1. 程式人生 > 其它 >HttpRunner-04:編寫測試用例(校驗A類IPv4)

HttpRunner-04:編寫測試用例(校驗A類IPv4)

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條,說明實驗結果符合設計預期。