HttpRunner-8-数据驱动-httprunner-8

news/2025/10/31 15:30:06/文章来源:https://www.cnblogs.com/phyger/p/19180054

数据驱动概览

为什么要用数据驱动

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

httprunner 的数据驱动

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

定义数据源的三种方式

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

定义参数的两种方式

  • 独立参数定义
config:name: testcase descriptiontestcases:create user:testcase: demo-quickstart-6.ymlparameters:user_id: [1001, 1002, 1003, 1004]

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

  • 多个具有关联性的参数定义
config:name: "demo"testcases:testcase1_name:testcase: /path/to/testcase1parameters: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/testcase1parameters: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/testcase1parameters: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/testcase1parameters: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/testcase1parameters:username-password: ${get_account(10)}

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

实例

测试项目源码

demo_api 文件:

name: demo api
variables:var1: value1var2: value2
request:url: /phygermethod: GETheaders:User-Agent: $user_agentContent-Type: "application/json"json:key: $var2username: $usernamepwd: $password

demo_api2 类似。

用例文件:

config:name: "demo testcase"variables:device_sn: "ABC"base_url: "https://getman.cn/mock"output: ["username","password"]teststeps:
-name: demo step 1api: api/demo_api.ymlvariables: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_snusername: $usernamepassword: $passwordvalidate:- eq: ["status_code", 200]setup_hooks:- ${hook_print(setup)}teardown_hooks:- ${hook_print(teardown)}
-name: demo step 2api: api/demo_api2.ymlvariables: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 1testcase: testcases/demo_testcase.ymlvariables:device_sn: $device_snparameters:- username-password: ${get_account(10)}

执行测试

测试报告

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HttpRunner-7-用例分层-httprunner-7

何为用例分层? 在自动化测试领域,自动化测试用例的可维护性是极其重要的因素,直接关系到自动化测试能否持续有效地在项目中开展。 概括来说,测试用例分层机制的核心是将接口定义、测试步骤、测试用例、测试场景进行…

HttpRunner-6-环境变量-httprunner-6

为什么要用环境变量 在自动化测试中,有时需要借助环境变量实现某些特定的目的,常见的场景包括:切换测试环境 切换测试配置 存储敏感数据(从信息安全的角度出发)设置环境变量 Linux 中 使用 export 命令 $ export …

HttpRunner-5-DebugTalk-httprunner-5

什么是 debugtalk 在前面的文章中我们已经介绍过 httprunner 的项目结构。debugtalk.py 是用来表示项目根目录的,同时我们也能在其中自定义一些方法供 api 和 case 使用。 debugtalk 用于 hook 详情查看:HttpRunner-…

制造业运营管理新突破:Tita 赋能下的精益生产与协同发展

在全球制造业加速向智能化、数字化转型的大背景下,传统制造业运营管理模式正面临严峻挑战。市场需求的快速变化、产品更新换代的加速、供应链的复杂多变以及内部管理的低效,都成为制约企业发展的瓶颈。Tita 作为一款…

2025年10月上海装修公司对比榜:五强真实口碑与工期排名

在上海,装修一套房子往往意味着要在上百家公司里做选择:有人担心工期被拖,有人怕隐蔽工程出问题,有人被报价里的“增项”吓退。2025年三季度,上海市住建委发布的《住宅装饰装修行业运行简报》显示,全市在册家装企…

测试开发必看!JVM调优10大技巧,性能瓶颈瞬间搞定

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 在软件测试和开发中,JVM不仅是执行 Java 程序的核心引擎,也是性能优化的“战场”。对于大型互联网应用或复杂系统,JVM 的配置直接影响应…

Dify入门实战:5分钟搭建你的第一个AI测试用例生成器

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 传统的手工编写测试用例方式效率低下且容易遗漏边界场景。借助Dify平台,即使没有深厚的编程背景,你也可以快速构建一个能自动生成测试用例…

.NET Core + Docker 部署:Serilog 日志配置与查看全攻略

.NET Core + Docker 部署:Serilog 日志配置与查看全攻略作者:iamlong关键词:.NET Core、Serilog、Docker、Linux、日志挂载、日志排查在将 .NET Core Web API 部署到 Linux 服务器并使用 Docker 容器化运行时,日志…

2025年10月国内环保工程设备厂家前5名推荐榜单

当前,环保工程设备行业正朝着智能化、集成化方向高速发展,技术迭代与服务升级成为企业脱颖而出的关键。本文结合市场占有率、技术创新力与用户反馈,为您呈现一份最新的行业顶尖厂家排名,并附上详细的对比分析表单,…

测试同学要求我们产品写用例,然后你们照着测?

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 “测试同学要求我们产品写用例,然后你们照着测?” 当看到产品经理发送的这条消息时,作为测试 Leader,心里五味杂陈: 一方面是被误解的…

光伏支架冲孔机生产厂家:探索高效制造解决方案

文章摘要 光伏支架冲孔机行业随着可再生能源的快速发展而蓬勃兴起,2025年预计市场规模将突破百亿元,驱动制造技术向智能化、高效化转型。本文基于行业数据和用户反馈,整理了2025年光伏支架冲孔机生产厂家口碑排行榜…

2025年光伏支架冲孔机源头厂家推荐榜单:技术革新与市场格局深度解析

摘要 随着光伏产业进入规模化发展新阶段,光伏支架冲孔机作为关键加工设备迎来技术升级浪潮。本文基于2025年行业数据,深入分析全球光伏支架冲孔机制造领域的技术发展趋势与市场竞争格局,特别针对江苏众利达自动化设…

2025年克拉玛依壁挂炉公司权威推荐榜单:燃气壁挂炉/万家乐壁挂炉/威能壁挂炉服务商精选

在冬季寒冷漫长的克拉玛依地区,壁挂炉作为家庭和商业场所的核心供暖设备,其可靠性、能效表现及售后服务的响应速度直接关系到用户的取暖体验与生活品质。据行业数据显示,2024年中国壁挂炉市场规模已突破200亿元,其…

weblogic、thinkphp、shiro反序列化漏洞

1、复现weblogic弱口令漏洞并getshell2、使用goby工具扫描weblogic漏洞3、复现thinkphp 5.x命令执行漏洞、shiro反序列化漏洞并植入内存马 [thinkphp 5.x命令执行漏洞]:[shiro反序列化漏洞]:4、复现phpmyadmin弱口令并…

PandaCoder 2.4.3 震撼发布!

PandaCoder 2.4.3 震撼发布! “SQL Monitor”来了——让每一行 SQL 都无所遁形!“我不是在做工具,我是在为开发者造光。” —— 舒一笑不秃头 www.poeticcoder.com一、为什么我们需要 SQL Monitor? 你有没有遇到过…

2025年油污泥脱水机制造企业权威推荐榜单:洗煤污泥脱水机/带式浓缩污泥脱水机/尾矿污泥脱水机源头厂家精选

在环保政策持续收紧与工业绿色转型的双重驱动下,油污泥处理已成为石化、油田、炼化等行业的重点关注环节。据行业调研数据显示,2025年中国工业污泥处理市场规模预计突破百亿元,其中油污泥处理设备年增长率稳定在15%…

2025 年洗墙灯厂家最新推荐榜,技术实力与市场口碑深度解析,严选高品质户外照明品牌防尘洗墙灯/酒店洗墙灯/建筑洗墙灯公司推荐

引言 为精准筛选出 2025 年优质洗墙灯品牌,本次推荐榜测评由照明电器协会全程指导,结合协会发布的《2024-2025 户外照明产品质量测评报告》核心数据开展。测评采用 “三维九项” 评估体系:第一维度为技术实力,涵盖…

2025 年加药装置厂家最新推荐榜,技术实力与市场口碑深度解析,精选高适配性优质品牌加药装置/江苏加药装置公司推荐

引言 为精准筛选出 2025 年加药装置领域优质品牌,本次推荐榜联合环境保护产业协会开展测评,测评覆盖国内 120 余家加药装置生产企业。测评采用 “三维九项” 评估体系,从技术实力(核心技术研发、定制化能力、智能化…

钢坝闸厂家:创新水工解决方案的领导者

文章摘要 本文深入探讨钢坝闸在现代水利工程中的关键作用,重点介绍安徽寓泽水利科技有限公司在钢坝闸制造领域的创新优势。通过分析用户痛点和行业挑战,阐述全钢板结构、智能化控制及高性价比如何提升防洪效率和工程…

2025年衡水出租救护车公司权威推荐榜单:短途救护车出租/跨省救护车出租/私家救护车出租源头服务商精选

在医疗健康服务体系中,除了紧急救援,非急救医疗护送、康复期转运、长途跨省转院等需求同样重要。这类服务为行动不便的患者出院、转院、往返医疗机构进行治疗提供了至关重要的交通保障。选择一家资质齐全、服务专业、…