HttpRunner3.x 學習5-測試用例結構
1、用例格式
HttpRunnerv3.x
支援3種用例格式:pytest
、YAML
和JSON
。
pytest
、YAML
和JSON
格式的測試用例完全等價,包含的資訊內容也完全相同。
- 對於有python基礎的,建議以
pytest
格式而不是以前的YAML / JSON
格式編寫和維護測試用例。 - 對於新手來說,推薦使用 JSON 格式,雖然描述形式上稍顯累贅,但是不容易出錯(大多編輯器都具有 JSON 格式的檢測功能);同時,HttpRunner 也內建了 JSON 格式正確性檢測和樣式美化功能,詳情可檢視《Validate & Prettify》。
- 對於熟悉 YAML 格式的人來說,編寫維護 YAML 格式的測試用例會更簡潔,但前提是要保證 YAML 格式沒有語法錯誤。
2、測試用例結構
在httprunner中,測試用例組織主要基於三個概念:
- 測試用例集(testsuite): 對應一個YAML/JSON/Python檔案,包含單個或多個測試用例檔案。
- 測試用例(testcase): 對應一個YAML/JSON/Python檔案,包含單個或多個測試步驟。
- 測試步驟(teststep): 對應YAML/JSON/Python中 teststeps下的一個節點,描述單次介面測試的全部內容,包括髮起介面請求、解析響應結果、檢驗結果等。
3、變數空間(context)作用域
全域性作用域
- config: 作為整個測試用例的全域性配置項,作用域為整個測試用例,包含base_url, verify, variables, export。
區域性作用域
- teststeps: 測試步驟的列表,每個步驟都對應一個API請求或另一個用例的引用,另外variables/extract/validate/hooks支援建立及其複雜的測試用例。
變數作用域
- 測試步驟的變數空間會繼承或覆蓋config中定義的內容
- 若某變數在 config 中定義了,在某 test 中沒有定義,則該 test 會繼承該變數
- 若某變數在 config 和某 test 中都定義了,則該 test 中使用自己定義的變數值
- 測試步驟的變數空間會繼承或覆蓋config中定義的內容
- 如需在多個測試步驟中傳遞引數值,則需要使用 extract 關鍵字,並且只能從前往後傳遞
4、config
name(必須)
測試用例的名稱,將在log和報告中展示。
base_url(可選)
測試用例中的通用Host,例如https://postman-echo.com。如果base_url被指定,測試步驟中的url只能寫相對路徑。當你要在不同環境下測試時,這個配置非常有用。
variables(可選的)
定義的全域性變數,作用域為整個用例。每個測試步驟都可以引用config variables。也就是說,step variables 優先順序高於 config variables.
parameters(可選的)
全域性引數,用於實現資料化驅動,作用域為整個用例。
verify(可選的)
指定是否驗證伺服器的TLS證書。如果我們想記錄測試用例執行的HTTP流量,這將特別有用,因為如果沒有設定verify或將其設定為True,則會發生SSLError。
export(可選的)
指定輸出的測試用例變數。將每個測試用例看作一個黑盒,config variables是輸入變數,config export是輸出變數。當一個測試用例在另一個測試用例的步驟中被引用時,config export將被提取並在隨後的測試步驟中使用。
5、teststep
name(必須)
name用來定義測試步驟 name,將出現在log和測試報告中。
variables(可選的)
測試步驟中定義的變數,作用域為當前測試步驟。
如果想在多個測試步驟中共享變數,需要在config variables中定義。
測試步驟中的變數,會覆蓋config variables中的同名變數。
request(必須)
METHOD(必須)
設定http方法,支援RestFul中的所有http方法(GET/POST/PUT/PATCH/DELETE/),相當於requests.request中的method。
URL(必須)
設定Url,如果base_url在config中設定了,url只能是相對路徑部分。相當於requests.request中的url。
PARAMS(可選)
設定Url的query,相當於requests.request中的params。
HEADERS(可選)
設定請求的headers,相當於requests.request中的headers。
COOKIES(可選)
設定Http請求的cookies,相當於requests.request中的cookies。
DATA(可選)
設定http請求的Body,相當於requests.request中的data。
JSON(可選)
設定http請求json格式的body,相當於requests.request中的json。
extract(可選)
從當前 HTTP 請求的響應結果中提取引數,並儲存到引數變數中(例如token),後續測試用例可通過$token的形式進行引用。
原理:利用jmespath提取Json response body的內容。
validate(可選)
測試用例中定義的結果校驗項,作用域為當前測試用例,用於實現對當前測試用例執行結果的校驗。
原理:用jmespath提取Json response的內容,並進行斷言校驗。
運算子包括:
- equal: 等於
- contained_by: 實際結果是否被包含在預期結果中
- contains: 預期結果是否被包含在實際結果中
- endswith: 以...結尾
- greater_or_equals: 大於等於
- greater_than: 大於
- length_equal: 長度等於
- length_greater_or_equals: 長度大於等於
- length_greater_than: 長度大於
- length_less_or_equals: 長度小於等於
- length_less_than: 長度小於
- less_or_equals: 小於等於
- less_than: 小於
- not_equal: 不等於
- regex_match: 字串是否符合正則表示式匹配規則
- startswith: 以...開頭
- string_equals: 字串相等
- type_match: 型別是否匹配
- jmespath: jmespath表示式
- expected_value: 指定期望值或變數,也可以呼叫方法
- message(optional): 用於描述斷言失敗原因
hooks(可選)
- setup_hooks函式放置於debugtalk.py中,並且必須包含三個引數:
- method: 請求方法,比如:GET,POST,PUT
- url: 請求URL
-
kwargs: request的引數字典
-
teardown_hooks函式放置於debugtalk.py中,並且必須包含一個引數:
- resp_obj: requests.Response例項
6、teststep 引用其他測試用例
variables
跟request中的variables一樣
testcase
指定引用的測試用例
export
從引用的測試用例中提取的變數,該變數在後面的test steps中可以引用