前言
在HttpRunner中,我們可通過extract提取數據,當響應結果為 JSON 結構,可使用 content 結合 . 運算符的方式,如 content.code,用起來十分方便,但如果響應結果為 text/html 結構時,便不能這么用了。
這時候,我們能不能使用正則表達式來提取呢?答案是肯定的。
本人環境:HttpRunner V1.5.8
測試場景
在這里,我將訪問 TesterHome 的首頁,通過正則表達式來提取響應數據中的 title標題 ,下面是在瀏覽器中訪問和Fiddler抓包的結果。
extract中正則提取和斷言
從上面的抓包結果中,我們如果要提取 標題title 中的 TesterHome 關鍵字,可以使用正則表達式為:<title>(.+?)</title>。YAML格式的用例如下:
- test:
name: visit TesterHome
request:
url: https://testerhome.com/
method: GET
extract:
- title: <title>(.+?)</title>
validate:
- eq: [status_code, 200]
- eq: [$title, "TesterHome"]
使用正則提取的數據,放入參數 title 中,如果后面需要用到該參數,則通過 $title 來引用。
validate中使用正則
除了在 extract 提取響應數據時使用正則,我們也可以直接在斷言時使用正則。YAML格式的用例如下:
- test:
name: visit TesterHome 2
request:
url: https://testerhome.com/
method: GET
validate:
- eq: [status_code, 200]
- eq: ['<title>(.+?)</title>', "TesterHome"]
我在這里使用正則時,若直接用 <title>(.+?)</title> 會報錯,我們加上 單引號或雙引號 即可,如 '<title>(.+?)</title>' 或 "<title>(.+?)</title>"。
完整的用例:
- config:
name: re test
- test:
name: visit TesterHome
request:
url: https://testerhome.com/
method: GET
extract:
- title: <title>(.+?)</title>
validate:
- eq: [status_code, 200]
- eq: [$title, "TesterHome"]
- test:
name: visit TesterHome 2
request:
url: https://testerhome.com/
method: GET
validate:
- eq: [status_code, 200]
- eq: ['<title>(.+?)</title>', "TesterHome"]