• httprunner 3.x学习11


    前言

    httprunner 3.x参数化(parameters)数据源支持三种方式:

    • 在 YAML/JSON/py 中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
    • 通过内置的 parameterize(可简写为P)函数引用 CSV 文件:该种方式需要准备 CSV 数据文件,适合数据量比较大的情况
    • 调用 debugtalk.py 中自定义的函数生成参数列表:该种方式最为灵活,可通过自定义 Python 函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式
      本篇讲解内置的 parameterize(可简写为P)函数引用 CSV 文件

    独立参数

    对于已有参数列表,并且数据量比较大的情况,比较适合的方式是将参数列表值存储在 CSV 数据文件中。
    对于 CSV 数据文件,需要遵循如下几项约定的规则:

    • CSV 文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行;
    • 若同一个 CSV 文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号;
    • 在 YAML/JSON 文件引用 CSV 文件时,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。

    例如,user_id 的参数取值范围为 1001~2000,那么我们就可以创建 user_id.csv,并且在文件中按照如下形式进行描述。

    user_id
    1001
    1002
    ...
    1999
    2000
    

    然后在 YAML/JSON 测试用例文件中,就可以通过内置的 parameterize(可简写为 P)函数引用 CSV 文件。

    config:
        name: "demo"
        base_url: ${ENV(base_url)}
        parameters:
            user: ${P(data/user.csv)}
    

    即 P 函数的参数(CSV 文件路径)是相对于项目根目录的相对路径。
    当然,这里也可以使用 CSV 文件在系统中的绝对路径,不过这样的话在项目路径变动时就会出现问题,因此推荐使用相对路径的形式。

    csv文件存放user数据

    先准备测试数据,准备四组登录用的账号和密码,账号为test1,test2,test3,test4,密码统一设置为123456。

    data/user.csv文件测试数据

    user
    test1
    test2
    test3
    test4
    

    testcases/params_csv.yml 文件引用 data/user.csv 文件语法${P(user.csv)}

    # testcases/params_csv.yml
    # 上海-悠悠,httprunner QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    config:
        name: login case
        base_url: ${ENV(base_url)}
        variables:
            user: test
            password: 123456
        parameters:
            user: ${P(data/user.csv)}
    
    teststeps:
    -
        name: step login
        request:
            url: /api/v1/login
            method: POST
            json:
                username: $user
                password: $password
        validate:
            - eq: [status_code, 200]
            - eq: [content.code, 0]
            - eq: [content.msg, login success!]
            - len_eq: [content.token, 40]
    

    对应pytest脚本

    # NOTE: Generated By HttpRunner v3.1.4
    # FROM: testcasesparams_csv.yml
    
    
    import pytest
    from httprunner import Parameters
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
    
    
    class TestCaseParamsCsv(HttpRunner):
        @pytest.mark.parametrize("param", 
                                 Parameters({"user": "${P(data/user.csv)}"}))
        def test_start(self, param):
            super().test_start(param)
    
        config = (
            Config("login case")
            .variables(**{"user": "test", "password": 123456})
            .base_url("${ENV(base_url)}")
        )
    
        teststeps = [
            Step(
                RunRequest("step login")
                .post("/api/v1/login")
                .with_json({"username": "$user", "password": "$password"})
                .validate()
                .assert_equal("status_code", 200)
                .assert_equal("body.code", 0)
                .assert_equal("body.msg", "login success!")
                .assert_length_equal("body.token", 40)
            ),
        ]
    
    
    if __name__ == "__main__":
        TestCaseParamsCsv().test_start()
    
    

    csv存放user和psw数据

    data/user_password.csv 文件测试数据

    user,password
    test1,123456
    test2,123456
    test3,123456
    test4,123456
    

    testcases/params_csv2.yml 文件引用 data/user_password.csv 文件

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    config:
        name: login case
        base_url: ${ENV(base_url)}
        parameters:
            user-password: ${P(data/user_password.csv)}
    
    teststeps:
    -
        name: step login
        request:
            url: /api/v1/login
            method: POST
            json:
                username: $user
                password: $password
        validate:
            - eq: [status_code, 200]
            - eq: [content.code, 0]
            - eq: [content.msg, login success!]
            - len_eq: [content.token, 40]
    

    对应pytest脚本

    # NOTE: Generated By HttpRunner v3.1.4
    # FROM: testcasesparams_csv2.yml
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    import pytest
    from httprunner import Parameters
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
    
    
    class TestCaseParamsCsv2(HttpRunner):
        @pytest.mark.parametrize(
            "param", Parameters({"user-password": "${P(data/user_password.csv)}"})
        )
        def test_start(self, param):
            super().test_start(param)
    
        config = Config("login case").base_url("${ENV(base_url)}")
    
        teststeps = [
            Step(
                RunRequest("step login")
                .post("/api/v1/login")
                .with_json({"username": "$user", "password": "$password"})
                .validate()
                .assert_equal("status_code", 200)
                .assert_equal("body.code", 0)
                .assert_equal("body.msg", "login success!")
                .assert_length_equal("body.token", 40)
            ),
        ]
    
    
    if __name__ == "__main__":
        TestCaseParamsCsv2().test_start()
    
    

    V3.x版本支持相对路径,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。如:data/user_id.csv

  • 相关阅读:
    watch监听不到data数据
    滑块验证码 纯js
    position: fixed居中
    Vue插件之缺口滑块验证码 适合于手机和pc(插件vuemonoplastyslideverify)
    Vue之滑动验证码 适合于手机和pc JcRange(可分辨系统)
    Bus
    Table表中添加下拉框
    容器docker网络解析
    jstack定位java程序CPU使用高问题
    <摘>C#,MFC,Win32——实现系统级热键
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14906313.html
Copyright © 2020-2023  润新知