HttpRunner 2.x 参数化

前言

从 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"] -------------------上面的格式在2.5.7 没成功,报格式错误------------------ variables: [ {'p_username': '13700000002'}, {'p_username': '13700000010'}, ] 目前的格式是这样是成功的 完整的 API 目录下如下 config: name: login31 variables: [ {'p_username': '13700000002'}, ] teststeps: - name: login32 times: 3 压测次数, request: headers: Content-Type: application/json;charset=UTF-8 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 json: username: $p_username password: 3hxqO42EA+TCsF/BYIsTPg== method: POST url: http://124.223.176.133/login validate: - eq: - status_code - 200 - eq: - headers.Content-Type - application/json - eq: - content.status - 0 - eq: - content.msg - ok

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

variables: {} parameters: parameters: p_username-p_password: - [13700000010, IloA7cj8S6xkUb98FKpsXg==] - [13700000002, 3hxqO42EA+TCsF/BYIsTPg==] 有下中划线, p_username-p_password:对应username 和密码

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

config: name: "login suites1" variables: {} #p_username: 13700000010 base_url: "http://124.223.176.133/login" testcases: - name: login321_1 testcase: api/login321.yml parameters: p_username-p_password: - [1360000010, IloA7cj8S6xkUb98FKpsXg==] - [1360000002, 3hxqO42EA+TCsF/BYIsTPg==]

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

(p36h257) D:\htp_demo>hrun D:\htp_demo\demo\testsuites\de_login31.yml INFO HttpRunner version: 2.5.7 INFO Loading environment variables from D:\htp_demo\demo\.env INFO Start to run testcase: login321_1 login32 INFO POST http://124.223.176.133/login INFO status_code: 200, response_time(ms): 287.59 ms, response_length: 313 bytes . ---------------------------------------------------------------------- Ran 1 test in 0.296s OK INFO Start to run testcase: login321_1 login32 INFO POST http://124.223.176.133/login INFO status_code: 200, response_time(ms): 266.37 ms, response_length: 313 bytes . ---------------------------------------------------------------------- Ran 1 test in 0.278s OK INFO Start to render Html report ... INFO Generated Html report: D:\htp_demo\demo\reports\20240811T183240.341057.html Sentry is attempting to send 0 pending error messages Waiting up to 2 seconds Press Ctrl-Break to quit (p36h257) D:\htp_demo> https://www.cnblogs.com/xiaoyujuan/p/14657506.html

关联参数--- 声明数据驱动

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

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种组合

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

https://www.cnblogs.com/xiaoyujuan/p/14822690.html

线上部署Httprunner 网页版 部署 文档

介绍 | LunarLink

代码库

GitHub - tahitimoon/LunarLink: 一个基于 HttpRunner + Django + Vue + Element UI 的接口自动化测试平台,生产可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值