1. 程式人生 > 其它 >HttpRunner3.x 學習5-測試用例結構

HttpRunner3.x 學習5-測試用例結構

1、用例格式

HttpRunnerv3.x支援3種用例格式:pytestYAMLJSON

pytestYAMLJSON格式的測試用例完全等價,包含的資訊內容也完全相同。

  • 對於有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中可以引用