1. 程式人生 > 其它 >HttpRunner3.X - 用例分層概念與基本用法說明

HttpRunner3.X - 用例分層概念與基本用法說明

一、前言

  前面講了怎麼搭建框架環境,怎麼執行,以及直接就講到了怎麼生成allure測試報告,說白了就是闡述了一個大的框架,但具體運用到工作中時,測試用例怎麼編寫呢?且看下面的嘮叨,哈哈哈。

二、用例分層

  在一個pytest格式的Python檔案的testcase裡可以有一個或者多個測試步驟,就是teststeps[]列表裡的Step()。   每一個Step()就可以類比成pytest框架下的def test_xxx()的用例函式,在每一個Step裡描述請求API的基本資訊,用到是是RunRequest()類,當然也可以呼叫其他測試用例RunTestCase()   官方想表達的就是測試用例分層的一個思想:
  • 測試用例(testcase)應該是完整且獨立的,每條測試用例應該是都可以獨立執行的
  • 測試用例是測試步驟(teststep)的有序集合
  • 測試用例集(testsuite)是測試用例的無序集合,集合中的測試用例應該都是相互獨立,不存在先後依賴關係的;如果確實存在先後依賴關係,那就需要在測試用例中完成依賴的處理
為了自動化測試的穩定性和可維護性,每個測試用例之間相互獨立是非常有必要的。

三、測試用例結構

每個測試用例都是 的子類HttpRunner,並且必須具有兩個類屬性:configteststeps

  • config:配置測試用例級別的設定,包括base_urlverifyvariablesexport
  • teststeps:teststep(List[Step]
    )列表,每一步對應一個API請求或者另一個testcase引用呼叫。此外,variables/extract/validate/hooks機制支援,可製作十分複雜的測試方案。
# NOTE: Generated By HttpRunner v3.1.5
# FROM: har\login.har


from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase


class TestCaseLogin(HttpRunner):

    config = Config("登入")\
        .verify(False)\
        .base_url("https://XXX.com")\
        .variables(
            **{"username":"李白","psw":"123456"}
        )\
        .export(*["userId","userNo","userName"])


    teststeps = [
        Step(
            RunRequest("登入介面")
            .post("/auth/login_by_password")
            .with_headers(
                **{
                    "accept": "application/json, text/plain, */*",
                    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
                    "current-user-id": "",
                    "content-type": "application/json;charset=UTF-8",
                    "accept-language": "zh-CN,zh;q=0.9",
                }
            )
            .with_json(
                {
                    "employeeName": "$username",
                    "loginType": "PASSWORD",
                    "password": "$psw",
                    "currentUserId": "",
                    "workerId": "",
                    "currentUserName": "",
                    "currentUserCode": "",
                }
            )
            .extract()
            .with_jmespath("body.data.userId","userId")
            .with_jmespath("body.data.userNo","userNo")
            .with_jmespath("body.data.userName","userName")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.successful", True)
            .assert_equal("body.code", "200")
            .assert_equal("body.message", "請求成功")
        ),
    ]


if __name__ == "__main__":
    TestCaseLogin().test_start()

1、config

每個測試用例應該有一個config部分,您可以在其中配置測試用例級別設定。

  • 姓名(必填):指定測試用例名稱。這將顯示在執行日誌和測試報告中。
  • base_url(可選):指定 SUT 的通用架構和主機部分,例如https://postman-echo.com.如果base_url指定,則 teststep 中的 url 只能設定相對路徑部分。如果您想在不同的 SUT 環境之間切換,這尤其有用。
  • 變數(可選):指定測試用例的公共變數。每個測試步驟都可以引用未在步驟變數中設定的配置變數。換句話說,步驟變數比配置變數具有更高的優先順序。
  • 驗證(可選):指定是否驗證伺服器的 TLS 證書。如果我們想記錄測試用例執行的 HTTP 流量,這尤其有用,因為如果 verify 未設定或設定為 True,則會發生 SSLError。SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 證書驗證失敗:證書鏈中的自簽名證書 (_ssl.c:1076)'))
  • 匯出(可選):指定測試用例的匯出會話變數。將每個測試用例視為一個黑盒,configvariables是輸入部分,configexport是輸出部分。特別是,當一個測試用例在另一個測試用例的步驟中被引用,並且會提取一些會話變數以供後續測試步驟使用時,則應在配置export部分配置提取的會話變數。

2、teststeps

每個測試用例應該有一個或多個有序的測試步驟 (List[Step]),每個步驟對應一個 API 請求或另一個測試用例引用呼叫。

RunRequest(name)

RunRequest用於向 API 發出請求並對響應進行一些提取或驗證的步驟。

nameRunRequest的引數用於指定測試步驟名稱,該名稱將顯示在執行日誌和測試報告中。

.with_variables

指定測試步驟變數。每個步驟的變數都是獨立的,因此如果要在多個步驟中共享變數,則應在配置變數中定義變數。此外,步驟變數將覆蓋配置變數中具有相同名稱的變數。

.method(url)

指定 HTTP 方法和 SUT 的 url。這些對應於method和 的url引數requests.request

如果base_url在config中設定,url只能設定相對路徑部分。

.with_params

為請求 url 指定查詢字串。這對應於 的params引數requests.request

.with_headers

為請求指定 HTTP 標頭。這對應於 的headers引數requests.request

.with_cookies

指定 HTTP 請求 cookie。這對應於 的cookies引數requests.request

.with_data

指定 HTTP 請求正文。這對應於 的data引數requests.request

.with_json

在 json 中指定 HTTP 請求正文。這對應於 的json引數requests.request

extract

.WITH_JMESPATH

使用jmespath提取 JSON 響應正文

with_jmespath(jmes_path:文字,var_name:文字)

  • jmes_path:jmespath 表示式,更多細節參考JMESPath 教程
  • var_name:儲存提取值的變數名,可供後續測試步驟引用

validate

.ASSERT_XXX

使用jmespath提取 JSON 響應正文並使用預期值進行驗證。

assert_XXX(jmes_path: Text, expected_value: Any, message: Text = "")

  • jmes_path:jmespath 表示式,更多細節參考JMESPath 教程
  • 預期值:這裡也可以使用指定的預期值、變數或函式引用
  • 訊息(可選):用於指示斷言錯誤原因

RunTestCase(name)

RunTestCase在一個步驟中用於引用另一個測試用例呼叫。

nameRunTestCase的引數用於指定測試步驟名稱,該名稱將顯示在執行日誌和測試報告中。

.with_variables

與 RunRequest 的.with_variables.

.call

指定引用的測試用例類。

.export

指定要從引用的測試用例匯出的會話變數名稱。匯出的變數可以被後續的測試步驟引用