HttpRunner-04:編寫測試用例(校驗A類IPv4)
阿新 • • 發佈:2021-12-01
1.需求
假設現在有一個需求,當訪問http://www.httpbin.org/ip
地址時,響應資訊中包括origin欄位,返回值為一個ip地址格式,需求是校驗它是否符合A類的IPv4地址
引用維基百科解釋:
A類IPv4地址經過進一步整理得到的範圍為:1.0.0.1~127.255.255.254
,即我們的需求目的就是校驗origin欄位返回值是否在A類IPv4地址範圍內。
2.編寫測試用例(yaml)
明確需求後,我們接下進入設計用例
首先,我們在debugtalk.py
檔案中定義一個校驗是否為A類IPv4的方法,這樣寫的目的是為了在執行測試用例前,做一個前置判斷,完成稍微複雜的測試場景
# add content to debugtalk.py def is_valid_ipv4(origin): """ check origin in 1.0.0.1~127.255.255.254 (class A ipv4) :param origin: ipv4 :return: origin variable or None """ if origin is None: return elif isinstance(origin, str): value_list = origin.split('.') if len(value_list) == 4: _ip = [int(s) for s in value_list] if 1 <= _ip[0] <= 127 and 0 <= _ip[1] <= 255 and 0 <= _ip[2] <= 255 and 1 <= _ip[3] < 255: return origin
其次,在testcase目錄下新建一個檔案,命名為:check_origin_ip.yml
,編寫一個測試用例,如下:
config: name: httpbin介面測試練習 base_url: "http://www.httpbin.org" verify: False teststeps: - name: 檢查是否為A類IPv4地址:1.0.0.1~127.255.255.254 # variables: # origin: 192.168.1.111 extract: origin: 'body.origin' request: method: GET url: /ip headers: User-Agent: HttpRunner/${get_httprunner_version()} Content-Type: "text/plain" validate: - eq: ['body.origin', "${is_valid_ipv4($origin)}", '不是A類IPv4地址?'] # 這裡引用debugtalk檔案定義的方法,寫法:${呼叫函式},並且宣告一個$origin引數,利用extract從當前 HTTP 請求的響應結果中提取引數
部分測試用例結構解釋:
config
- name(必須):測試用例的名稱,將在log和報告中展示。
- base_url(可選):測試用例中的通用Host,如果base_url被指定,測試步驟中的url只能寫相對路徑。當你要在不同環境下測試時,這個配置非常有用
- verify(可選的):指定是否驗證伺服器的TLS證書。如果我們想記錄測試用例執行的HTTP流量,這將特別有用,因為如果沒有設定verify或將其設定為True,則會發生SSLError。
teststeps
- name(必須):name用來定義測試步驟 name,將出現在log和測試報告中
- variables(可選的):測試步驟中定義的變數,作用域為當前測試步驟。如果想在多個測試步驟中共享變數,需要在config variables中定義。測試步驟中的變數,會覆蓋config variables中的同名變數。
- extract(可選):從當前 HTTP 請求的響應結果中提取引數,並儲存到引數變數中(例如token),後續測試用例可通過$token的形式進行引用。原理:利用jmespath 提取Json response body的內容。
- request(必須):
- METHOD(必須):http方法
- URL(必須):設定Url,如果base_url在config中設定了,url只能是相對路徑部分
- HEADERS(可選):設定請求的headers
- validate(可選):測試用例中定義的結果校驗項,作用域為當前測試用例,用於實現對當前測試用例執行結果的校驗。
原理:用 jmespath 提取Json response的內容,並進行斷言校驗。
- 運算子: [jmespath表示式, expected_value, message]
運算子包括:
- 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表示式,詳見JMESPath Tutorial
- expected_value: 指定期望值或變數,也可以呼叫方法
- message(optional): 用於描述斷言失敗原因
3.執行測試用例(並生成html格式報告)
使用hrun命令執行yaml檔案,並且追加生成html報告的命令--html=report.html --self-contained-html
- 執行測試用例的完整寫法如下
rosaany@Rosefinch:~/demo$ hrun testcases/check_origin_ip.yml --html=report.html --self-contained-html
這時,在demo目錄下生成一份report.html
檔案,生成的檔案命名在執行測試用例時指定
最後,結果顯示一共有測試用例1條,成功1條,說明實驗結果符合設計預期。