专栏首页从零开始学自动化测试httprunner 2.x学习6-参数化与数据驱动

httprunner 2.x学习6-参数化与数据驱动

前言

从 2.0.0 版本开始,HttpRunner 不再支持在测试用例文件中进行参数化配置; 参数化的功能需要在 testsuite 中实现。变更的目的是让测试用例(testcase)的概念更纯粹

环境:httprunner==2.5.7

参数配置

参数化机制需要在测试用例集(testsuite)中实现。如需实现数据驱动机制,需要创建一个 testsuite,在 testsuite 中引用测试用例,并定义参数化配置。

测试用例集(testsuite)的格式如下所示:

config:
    name: testsuite description

testcases:
    testcase1_name:
        testcase: /path/to/testcase1

    testcase2_name:
        testcase: /path/to/testcase2

如需对某测试用例(testcase)实现参数化数据驱动,需要使用 parameters 关键字,定义参数名称并指定数据源取值方式。

参数名称的定义分为两种情况:

  • 独立参数单独进行定义;
  • 多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)进行连接。

数据源指定支持三种方式:

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

三种方式可根据实际项目需求进行灵活选择,同时支持多种方式的组合使用。 假如测试用例中定义了多个参数,那么测试用例在运行时会对参数进行笛卡尔积组合,覆盖所有参数组合情况。

单个参数时参数化

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

参数user账号数据,设置对应的值 [“test1”, “test2”, “test3”, “test4”],定义单个参数用variables,定义参数化用parameters

        variables:
            user: test
            password: 123456
        parameters:
            user: ["test1", "test2", "test3", "test4"]

如果参数化里面的数据只有一个,比如psw对应的值只有一个,parameters 也可以设置 password的值

        variables:
            user: test
            password: 123456
        parameters:
            user: ["test1", "test2", "test3", "test4"]

完整的 testsuites/test_parameters.yml 脚本如下

# testsuites/test_parameters.yml
# 上海-悠悠,httprunner QQ交流群:1121184576
config:
    name: "test userinfo"

testcases:
   login-参数化:
        testcase: case/test_login.yml
        variables:
            user: test
            password: 123456
        parameters:
            user: ["test1", "test2", "test3", "test4"]  # 参数化
            password: [123456]

运行用例,会自动生成四个测试用例

(venv_hrun) D:\soft\venu_hrun>hrun testsuites/test_parameters.yml
INFO     HttpRunner version: 2.5.7
INFO     Start to run testcase: login-参数化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 170.15 ms, response_length: 109 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.175s

OK
INFO     Start to run testcase: login-参数化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 138.63 ms, response_length: 109 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.140s

OK
INFO     Start to run testcase: login-参数化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 147.59 ms, response_length: 109 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.154s

OK
INFO     Start to run testcase: login-参数化
login-setup
INFO     POST http://127.0.0.1:8000/api/v1/login/
INFO     status_code: 200, response_time(ms): 136.7 ms, response_length: 109 bytes

.

----------------------------------------------------------------------
Ran 1 test in 0.140s

OK
INFO     Start to render Html report ...
INFO     Generated Html report: D:\soft\venu_hrun\reports\20200612T164223.834696.html

关联参数

上面的案例多个账号,密码都是一样的,如果密码不一样呢?上面的就行不通了,所以针对于一个账号对应一个密码,这种一一对应的关系,可以用关联性的参数化

# 上海-悠悠,httprunner QQ交流群:1121184576
config:
    name: "test userinfo"

testcases:
   login-参数化:
        testcase: case/test_login.yml
        parameters:
            user-password:
            -  ["test1", "123456"]
            -  ["test2", "123456"]
            -  ["test3", "123456"]
            -  ["test4", "123456"]

笛卡尔积组合

比如测试账号有四种[“test1”, “test2”, “test3”, “test4”],密码也有四种 [“123456”, “123456”, “123456”, “123456”] 用笛卡尔积组合的话,就是4*4=16种组合

# 上海-悠悠,httprunner QQ交流群:1121184576
config:
    name: "test userinfo"

testcases:
   login-参数化:
        testcase: case/test_login.yml
        parameters:
            user: ["test1", "test2", "test3", "test4"]
            password: ["123456", "123456", "123456", "123456"]

这样运行会生成16组用例,很显然,这种不适用与登录-密码一对一的情况。可以用在其它的测试场景

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang),作者:上海悠悠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Selenium2+python自动化37-爬页面源码(page_source)

    前言 有时候通过元素的属性的查找页面上的某个元素,可能不太好找,这时候可以从源码中爬出想要的信息。selenium的page_source方法可以获取到页面源码...

    上海-悠悠
  • jmeter压测学习7-登录参数化(CSV 数据文件设置)

    我们在压测登录接口的时候,如果只用一个账号去设置并发压测,这样的结果很显然是不合理的,一个用户并发无法模拟真实的情况。 如果要压测登录接口,肯定得准备几百,甚至...

    上海-悠悠
  • httprunner学习5-参数化与数据驱动

    参数化是自动化测试离不开的话题,httprunner里面只要把上一篇声明变量学会了,参数化也就自然会了。 不同的地方在于声明变量时对应值只有一个,参数化是多个值...

    上海-悠悠
  • netty源码分析之三Bootstrap初始化

    可以看到childGroup也就是group方法传入的workerGroup是赋值给ServerBootstrap的childGroup属性的。我们进入 sup...

    开发架构二三事
  • 陈龙:从金融的本质和历史,看未来

    大数据文摘
  • 中国信息通信研究院高级工程师韩涵:中国金融科技生态体系

    数据猿报道,2017年10月25日,由 数据猿 联合《清华金融评论》共同主办的“2017金融科技价值峰会——数据驱动金融商业裂变”在北京隆重召开。本文为数据猿...

    数据猿
  • 详解 Redis 内存管理机制和实现

    Redis是一个基于内存的键值数据库,其内存管理是非常重要的。本文内存管理的内容包括:过期键的懒性删除和过期删除以及内存溢出控制策略。

    remcarpediem
  • 详解 Redis 内存管理机制和实现

    Redis是一个基于内存的键值数据库,其内存管理是非常重要的。本文内存管理的内容包括:过期键的懒性删除和过期删除以及内存溢出控制策略。

    remcarpediem
  • 详解 Redis 内存管理机制和实现

    Redis是一个基于内存的键值数据库,其内存管理是非常重要的。本文内存管理的内容包括:过期键的懒性删除和过期删除以及内存溢出控制策略。

    黄泽杰
  • SAP最佳业务实践:无变式配置按订单生产(148)-2报价处理

    image.png 1、VA21创建、打印并发送销售报价给客户 您作为制造商已从客户那里收到客户说明文档形式的按单生产的销售报价请求。客户的说明文档包括客户产品...

    SAP最佳业务实践

扫码关注云+社区

领取腾讯云代金券