一. 背景
数据驱动Data Driven Testing(DDT),是一种用于创建自动化测试的方法,或者说是一种架构, 本质是输入数据和用这些数据获取测试结果, 使测试逻辑和测试数据分离.
DDT的优点是测试工程师不必为每一个输入数据创建一个单独的测试用例, 测试在一个实例中创建, 并且输入测试数据和预期结果在表格文件中获取.
二. Jmeter 数据驱动
首先创建url.csv文件作为输入测试数据, 内容如下:
![5a644c2cd464de986c90409b6c4c31d7.png](https://i-blog.csdnimg.cn/blog_migrate/6b1b5b086af1c6cd50a07119c0167c82.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
以上内容保存退出后也可以用文本编辑器编辑, 注意标点符号
我是mac os, 保存目录为/Users/louiezhou/home/url.csv
csv数据设置文件中要用到这个路径
被测接口如下:
- get方法: https://postman-echo.com/get?foo1=bar1
- get方法: https://postman-echo.com/get?foo2=bar2
- post方法: https://postman-echo.com/post 入参{"foo1":"bar1","foo2":"bar2"}
API文档来源: https://docs.postman-echo.com/?version=latest#078883ea-ac9e-842e-8f41-784b59a33722
接下来到jmeter里, 首先创建一个线程组
![6d3f6293db4ab0d347d40a4b1f7fd012.png](https://i-blog.csdnimg.cn/blog_migrate/14f92a00768074adae31674a45c6ef22.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
在该线程组下创建一个普通http请求, 命名为postman-echo_header, 用于和数据驱动比较
![18b1dedf17a365493af464c47ee51327.png](https://i-blog.csdnimg.cn/blog_migrate/838522f72e0308f3f7be544143e740e6.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
添加一个循环控制器
![bdbe29146487c1ae9e4039faeeb51baf.png](https://i-blog.csdnimg.cn/blog_migrate/e6000ff963f9ef709f515d2cb8079d25.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
循环数量和数据表格文件中用例数量推荐保持一致.
在循环控制器下添加csv 数据文件设置
![1ea44a612db1c00ff6e2dd189d45dbc6.png](https://i-blog.csdnimg.cn/blog_migrate/1d7867c4f151b43ad67f30eefa5718da.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
在循环控制器下添加if 控制器,命名为if_get
![c86ffc4e415942aba70821e35de3c77b.png](https://i-blog.csdnimg.cn/blog_migrate/af0ddf9021f968bc694607dafd0e7fe3.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
jmeter 5.0 + 版本, if控制器和old version 略有不同.
此处添加if主要是判断如果是get方法就走这个if_get控制器, 如果是post方法, 就走if_post控制器.
在if_get控制器下添加一个http请求
命名规则为: ${caseSeq}_${apiSeq}_${apiName}
用例编号_API版本_API名称, 这样命名更为直观,便于理解
![769b74ec0e09ffa5bb5c57c70e51ca1a.png](https://i-blog.csdnimg.cn/blog_migrate/57fe2d8e1527b86b2927ec4980934146.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
${apiType} =https 为API请求协议
${host} =http://postman-echo.com 在用户自定义变量中定义
${url}=/get
${param}= foo1=bar1
拼接完整的是: https://postman-echo.com/get?foo1=bar1
再来看if控制器的if_post
仍然是在循环控制器下新建一个if控制器,命名为if_post
![0144cebcd00f2e5cd341214abd603099.png](https://i-blog.csdnimg.cn/blog_migrate/13b2f38dffcea76c049a022636559349.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
在if_post下新建一个http请求, 命名规则同if_get下http一致
![7f117cd105f9586b6c362f5698b55fb7.png](https://i-blog.csdnimg.cn/blog_migrate/6ec67efc70ee0453ea7c8de5ed171b74.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
${param}={“foo1”:”bar1”, “foo2”:”bar2”}
拼接完整的请求是:
https://postman-echo.com/post
POST data:
{"foo1":"bar1","foo2":"bar2"}
因为是post方式, 入参方式与get有所区别, 因此还需要在该http下声明一个http信息管理头
![3f779055ef4e7c1cd62517fae28f4fb8.png](https://i-blog.csdnimg.cn/blog_migrate/b50299291ad22889b25d957fa779caec.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
主流程到这里就完成了, 接下来看下零碎的地方
给每个http请求加上断言
![00a4d99a8c70c739d7377b06698c4dbe.png](https://i-blog.csdnimg.cn/blog_migrate/c7d2e1998519646585cd4464df3bf3b6.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
虽然他们的预期值都是变量${expectValue}, 但实际值是不同的
用例C001的预期值:${expectValue}: foo1=bar1
用例C002的预期值${expectValue}:foo2=bar2
用例C003的预期值${expectValue}: {“foo1”:”bar1”,”foo2”:”bar2”}
再来看下用户自定义变量
![8b8c5721540de404e801b4f3e8d821bc.png](https://i-blog.csdnimg.cn/blog_migrate/5208cbbd0c7b18a232bd781d43f6d249.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
目录层级结构
![d424c313d0617a921491662dfc65d8de.png](https://i-blog.csdnimg.cn/blog_migrate/c50ea05eec257e8355d43e6de95239fa.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
添加相应的监听即可执行了.
接下来看执行结果
![188497db3d417795e35bb6a30e9f7849.png](https://i-blog.csdnimg.cn/blog_migrate/c7d6b0a0a35ce9f90e76ea351444aa6a.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
![66e64094269478241d48ed6a4ce4c5fa.png](https://i-blog.csdnimg.cn/blog_migrate/825f5ae5fb58093580dbf8cc659345d7.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
![8d3c70deb7ebdb7c195b35a7d0aa5c56.png](https://i-blog.csdnimg.cn/blog_migrate/2efc336f1911b353208a4603553e3ad4.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
![3be6b1735e2b58bfe758e20aab750c49.png](https://i-blog.csdnimg.cn/blog_migrate/57aee570e7afe90c18b98afa2447bbc2.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
![de2eb6186ce721b4aa0f5fe9eed10775.png](https://i-blog.csdnimg.cn/blog_migrate/cb10ea8d353f52dd80cac135eaf11671.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
![1da0378e2426c9a08a0fd62b08032266.png](https://i-blog.csdnimg.cn/blog_migrate/4505ca8a24883b9f2fa722f5cd9b1399.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
![f88e4dd417e51a9ba5680d13dc39a12d.png](https://i-blog.csdnimg.cn/blog_migrate/03136c697dfafe589219779518dcd5c4.jpeg)
![42442498574f5928bfb88f793d80f93d.png](https://i-blog.csdnimg.cn/blog_migrate/e777121b2c86abd939a684038f561086.png)
在数据表格文件中还有些参数没有用到, 比如priority字段, 可以根据需求适当添加相应判断, 本篇幅仅为抛砖引玉, 如您有更好的idea, 欢迎抛过来.
最后来一碗鸡汤:
你现在的生活水平,是你三年前的工作状态决定的;而你现在的努力程度,会决定你三年后的生活;软件行业是个逆水行舟,不进则退的行业,既然选择了这个行业,那么就要努力地“敲”下去。
今日精选推荐
JMeter接口测试-if控制器
JMeter数据库操作
Jmeter接口测试-正则表达式
JMeter中文返回乱码
Jmeter接口测试-参数化
JMeter接口测试-基础
测试-感想