HttpRunner-08-数据驱动

简介: HttpRunner-08-数据驱动

数据驱动概览


为什么要用数据驱动


举个简单例子,当我们在测试一个输入框的功能时,可能需要输入不同的参数,此时,我们不需要设计多个用例,而只需要将输入值参数化,将不同的参数作为一个列表通过数据驱动的方式进行加载即可。


httprunner 的数据驱动


通过上篇文章,我们已经知道 httprunner 的数据驱动需要在 testsuite 中使用关键字 parameters 来定义。


定义数据源的三种方式


  • testsuiteyaml/json 文件中直接定义。
  • 通过内置的 parameterize 函数引用外部 csv 文件,适用大数据场景。
  • 调用 debugtalk.py 定义的函数(动态)生成参数列表,此方式最灵活。


定义参数的两种方式


  • 独立参数定义


config:
    name: testcase description
testcases:
    create user:
        testcase: demo-quickstart-6.yml
        parameters:
            user_id: [1001, 1002, 1003, 1004]
复制代码


进行该配置后,测试用例在运行时就会对 user_id 实现数据驱动,即分别使用 [1001, 1002, 1003, 1004] 四个值运行测试用例。测试用例总共会运行 4 次,并且每次运行时都采用不同的 user_id


  • 多个具有关联性的参数定义


config:
    name: "demo"
testcases:
    testcase1_name:
        testcase: /path/to/testcase1
        parameters:
            username-password:
                - ["user1", "111111"]
                - ["user2", "222222"]
                - ["user3", "333333"]
复制代码


进行该配置后,测试用例在运行时就会对 usernamepassword 实现数据驱动,即分别使用 {"username": "user1", "password": "111111"}、{"username": "user2", "password": "222222"}、{"username": "user3", "password": "333333"} 运行 3 次测试,并且保证参数值总是成对使用。

通过以上内容,我们可以知道,在 HttpRunner 的数据驱动中,我们有 6 种方式进行实现。即:


三种数据源*两种参数定义方式


编号 驱动模式
1 独立参数 & 直接指定参数列表
2 关联参数 & 直接指定参数列表
3 独立参数 & 引用 CSV 文件
4 关联参数 & 引用 CSV 文件
5 独立参数 & 引用自定义函数
6 关联参数 & 引用自定义函数


数据驱动实例


在上面我们已经介绍了 6 中驱动模式,而且也学习了直接在 yml 文件中定义参数的两种场景,那怎么使用 CSV 文件实行数据驱动呢?


独立参数 & 引用 CSV 文件


当我们需要对 user_id(1000 个)进行数据驱动时,首先,需要准备 user_id.csv 文件,文件内容如下:


user_id
1001
1002
...
1999
2000
复制代码


然后,我们在 testsuite 中就可以通过内置的 parameterize(可简写为 P)函数引用 CSV 文件:


假设 user_id.csv 在项目根目录的 data 目录下


config:
    name: "demo"
testcases:
    testcase1_name:
        testcase: /path/to/testcase1
        parameters:
            user_id: ${P(data/user_id.csv)}
复制代码


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


关联参数 & 引用 CSV 文件


当我们需要对 username-password(1000 个)进行数据驱动时,首先,需要准备 account.csv 文件,文件内容如下:


username,password
test1,111111
test2,222222
test3,333333
...
test1000,999999
复制代码


然后,我们在 testsuite 中就可以通过内置的 parameterize(可简写为 P)函数引用 CSV 文件:


假设 account.csv 在项目根目录的 data 目录下


config:
    name: "demo"
testcases:
    testcase1_name:
        testcase: /path/to/testcase1
        parameters:
            username-password: ${P(data/account.csv)}
复制代码


需要说明的是,在 parameters 中指定的参数名称必须与 CSV 文件中第一行的参数名称一致,顺序可以不一致,参数个数也可以不一致。


例如,在 account.csv 文件中可以包含多个参数,username、password、phone、age


username,password,phone,age
test1,111111,18600000001,21
test2,222222,18600000002,22
test3,333333,18600000003,23
...
test1000,999999,18600000003,99
复制代码


独立参数 & 引用自定义函数


当我们想要动态生成 100user_id 的时候,我们可以使用 debugtalk.py 的自定义函数动态生成。


debugtalk.py 中定义函数:


def get_user_id():
    ret = []
    for nu in range(101):
       ret.append({"user_id": nu})
    return ret
复制代码


然后,在 YAML/JSONparameters 中就可以通过调用自定义函数的形式来指定数据源:


config:
    name: "demo"
testcases:
    testcase1_name:
        testcase: /path/to/testcase1
        parameters:
            user_id: ${get_user_id()}
复制代码


另外,通过函数的传参机制,还可以实现更灵活的参数生成功能,在调用函数时指定需要生成的参数个数。


关联参数 & 引用自定义函数


当我们想要动态生成 100 个账号的时候,我们可以使用 debugtalk.py 的自定义函数动态生成。


debugtalk.py 中定义函数:


def get_account(num):
    ret = []
    for nu in range(num):
        name = 'user-{}'.format(nu)
        pwd = 'pwd-{}'.format(nu)
        ret.append({"username": name,'password':pwd})
    return ret
复制代码


那么在 YAML/JSONparameters 中就可以调用自定义函数生成指定数量的参数列表:


config:
    name: "demo"
testcases:
    testcase1_name:
        testcase: /path/to/testcase1
        parameters:
            username-password: ${get_account(10)}
复制代码


数据驱动在 testsuite 中的 testcases 下使用关键字 parameters 定义,这些数据在 testcase 中的 teststeps 中使用关键字 variables 直接使用即可。


实例


测试项目源码


demo_api 文件:


name: demo api
variables:
    var1: value1
    var2: value2
request:
    url: /phyger
    method: GET
    headers:
        User-Agent: $user_agent
        Content-Type: "application/json"
    json:
        key: $var2
        username: $username
        pwd: $password
复制代码


demo_api2 类似。


用例文件:


config:
    name: "demo testcase"
    variables:
        device_sn: "ABC"
    base_url: "https://getman.cn/mock"
    output: [
        "username",
        "password"
    ]
teststeps:
-
    name: demo step 1
    api: api/demo_api.yml
    variables:
        user_agent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
        device_sn: $device_sn
        username: $username
        password: $password
    validate:
        - eq: ["status_code", 200]
    setup_hooks:
        - ${hook_print(setup)}
    teardown_hooks:
        - ${hook_print(teardown)}
-
    name: demo step 2
    api: api/demo_api2.yml
    variables:
        token: ${get_token()}
    validate:
        - eq: [reason, OK]
复制代码


测试套文件:


config:
    name: "demo testsuite"
    variables:
        device_sn: "XYZ"
    base_url: "http://127.0.0.1:5000"
testcases:
-
    name: call demo_testcase with data 1
    testcase: testcases/demo_testcase.yml
    variables:
        device_sn: $device_sn
    parameters:
        - username-password: ${get_account(10)}
复制代码


执行测试


网络异常,图片无法展示
|


测试报告


网络异常,图片无法展示
|


我们可以看到共执行用例 10 条,测试步骤 20,全部通过。测试用例遍历了测试套中获取的数据源 10 条,又因为测试用例中有两个步骤,所以总共有 1*10*2=20 个步骤。

感谢您的阅读,别忘了关注,点赞,评论,转发四连哟!

相关文章
|
7月前
|
存储 测试技术 Python
软件测试/测试开发全日制|Pytest结合CSV实现测试的数据驱动
软件测试/测试开发全日制|Pytest结合CSV实现测试的数据驱动
|
3月前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
|
4月前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
|
7月前
|
存储 XML 敏捷开发
深入理解自动化测试中的数据驱动方法
【5月更文挑战第30天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快市场交付的关键步骤。数据驱动测试(DDT)是一种高效的自动化测试策略,它通过外部数据源来增强测试用例的灵活性和可维护性。本文将探讨数据驱动方法的核心概念、实施步骤及其在各种测试场景中的应用优势。通过实际案例分析,我们将展示如何利用数据驱动方法提高测试覆盖率并减少重复工作。
|
7月前
|
存储 XML 测试技术
深入理解自动化测试中的数据驱动框架
【5月更文挑战第27天】 随着软件开发周期的加速,自动化测试成为确保产品质量和缩短上市时间的关键因素。数据驱动测试(DDT)作为一种高效的自动化测试策略,允许测试人员通过外部数据源控制测试用例的执行流程。本文将探讨数据驱动框架的核心概念、实施步骤以及在复杂测试场景中的应用优势,为读者提供一种灵活、可扩展的自动化测试解决方案。
|
7月前
|
存储 XML 测试技术
什么是数据驱动测试?
什么是数据驱动测试?
189 0
|
设计模式 人工智能 测试技术
软件测试/人工智能|如何使用ChatGPT编写符合PO模式的数据驱动测试框架
软件测试/人工智能|如何使用ChatGPT编写符合PO模式的数据驱动测试框架
|
存储 JSON 测试技术
HttpRunner-02-用例组织
HttpRunner-02-用例组织
181 0
|
存储 测试技术 API
HttpRunner-07-用例分层
HttpRunner-07-用例分层
248 0
|
测试技术 Python
干货 | 利用 pytest 玩转数据驱动测试框架
干货 | 利用 pytest 玩转数据驱动测试框架

热门文章

最新文章