HTTPRunner 3 用戶手冊 (3) 編寫用例

HttpRunner v3.x 支持三種測試用例格式,即 pytest,YAML 和 JSON。

強烈建議以 pytest 格式而不是以前的 YAML/JSON 格式編寫和維護測試用例。

格式關係如下圖所示:

記錄並生成測試用例

如果 SUT(被測系統)準備就緒,最有效的方法是先捕獲 HTTP 流量,然後使用HAR文件生成測試用例。有關更多詳細信息,請參考記錄並生成測試用例。然後基於生成的 pytest 測試用例,可以根據需要進行一些調整,因此需要了解測試用例格式的詳細信息。

用例結構

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

  • config:配置測試用例級別的設置,包括 base_url,verify,variables,export。

  • teststeps:測試步驟的列表(List [Step]),每個步驟對應一個 API 請求或另一個測試用例的應用。此外,還支持 variables/extract/validate/hooks 來創建極其複雜的測試方案。

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


class TestCaseRequestWithFunctions(HttpRunner):
    config = (
        Config("request methods testcase with functions")
        .variables(
            **{
                "foo1": "config_bar1",
                "foo2": "config_bar2",
                "expect_foo1": "config_bar1",
                "expect_foo2": "config_bar2",
            }
        )
        .base_url("https://postman-echo.com")
        .verify(False)
        .export(*["foo3"])
    )

    teststeps = [
        Step(
            RunRequest("get with params")
            .with_variables(
                **{"foo1": "bar11", "foo2": "bar21", "sum_v": "${sum_two(1, 2)}"}
            )
            .get("/get")
            .with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
            .with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
            .extract()
            .with_jmespath("body.args.foo2", "foo3")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.args.foo1", "bar11")
            .assert_equal("body.args.sum_v", "3")
            .assert_equal("body.args.foo2", "bar21")
        ),
        Step(
            RunRequest("post form data")
            .with_variables(**{"foo2": "bar23"})
            .post("/post")
            .with_headers(
                **{
                    "User-Agent": "HttpRunner/${get_httprunner_version()}",
                    "Content-Type": "application/x-www-form-urlencoded",
                }
            )
            .with_data("foo1=$foo1&foo2=$foo2&foo3=$foo3")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.form.foo1", "$expect_foo1")
            .assert_equal("body.form.foo2", "bar23")
            .assert_equal("body.form.foo3", "bar21")
        ),
    ]


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

鏈式調用

HttpRunner v3.x 的最強大功能之一是鏈式調用,使用它無需記住任何測試用例格式的詳細信息,並且在 IDE 中編寫測試用例時可以智能完成。

屬性介紹

config

在這裏進行配置,對當前測試類中的所有用例都有效。

name (必選)

指定測試用例名稱,在日誌和測試報告中爲展示該名稱。

base_url (可選)

指定被測系統的 host 部分,例如 https://postman-echo.com。如果指定了 base_url,則 teststep 中的 url 只能設置相對路徑部分。這對於在不同的測試環境中切換非常有用。

variables (可選)

指定測試用例的公共變量。每個測試步驟都可以引用這裏設置的變量,當然在測試步驟中也可以設置步驟級別的變量。如果測試步驟和測試用例同時設置了變量屬性,則以步驟爲準。

verify (可選)

指定是否驗證服務器的 TLS 證書。如果我們想記錄測試案例執行的 HTTP 請求內容,就需要設置。如果沒有設置 verify 屬性或者值不爲 True,則會發生 SSLError。

SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)'))

export (可選)

這裏的導出,主要是爲了關聯做準備。

比如一個用例的某些響應字段需要在其他的用例中使用時,或者在同一個用例中,某個步驟的結果字段會被另外的結果字段引用,可以將需要提取的字段變量放在 config 的 export 部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章