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 部分。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。