Jemeter–独立不变参接口压测
Jemeter–独立变参接口压测
Jemeter–关联接口压测
案例分析
比如:有个波次复核接口很慢,优化后需要压测。但是波次复核接口数据是由另外两个接口(配单详情、内盒信息)的数据组合而来,而内盒信息又依赖于配单中返回的数据cardCode来查询。那应该如何压测呢?
接口关系:
波次复核接口数据 依赖 配单详情数据 +内盒信息数据 组合
内盒信息数据 依赖 配单详情数据
两种方法
1、如果数据库有足够数据,将关联符合的订单的配单的id查询出来,导出csv,先执行配单详情接口查询并把返回的数据作为变量,再根据变量数据执行内盒信息接口并把返回需要用到的数据作为变量。
最后从变量信息中组合数据调用波次复核接口。
2、如果数据库没有什么数据,就需要再添加前置生成数据的接口,比如生成订单接口、组波接口、生成配单接口,然后把配单id保存为变量,再执行配单详情接口查询并把返回的数据作为变量,再根据变量数据执行内盒信息接口并把返回需要用到的数据作为变量。最后从变量信息中组合数据调用波次复核接口。
(PS: 如果要保持测试库数据干净,可以把生成订单接口、组波接口、生成配单接口放到setUp线程组,然后把配单id保存为全局变量。然后在业务线程组执行配单详情接口、内盒信息接口、波次复核接口等业务接口,最后在TearDown线程组里执行删除生成的业务的所有数据逻辑,嗯,有点自动化测试的味道)
注意因为有依赖关系注意接口运行的顺序性,保证先执行的接口在前面。
下面选择第一种方案,第二种对业务来说多了很多接口过于麻烦了
CSV方案实现
1、创建公共组件
线程组、头部管理器、数据库筛选过的csv数据文件、结果树等监听器
2、创建http1配单详情接口
配置csv文件中的 bill_code 变量去查询配单详情,可以加个http1标志,方便知道这个接口是第一个需要执行的
3、提取配单详情返回Json数据变量
右击http1添加json提取器(接口交互是json的方式)
配置需要提取的变量
- 有多少个变量,这四行的数量是一样的
- $.是根据你接口的返回json层级来的
我的接口返回是直接{}里面就是数据,所以直接 $.字段
如果返回的形式这样
对应的配置
4、添加调试取样器
右击线程组,添加Debug Sampler 取样器,用来检测、获取变量的属性值
可以先执行这个接口,察看结果树,可以看到自定义的变量值都可以获取到了(可以没有获取到证明接口中哪里设置的有问题)
5、创建http2内盒信息接口
使用接口http1中的变量${cardCode} 获取内盒信息接口
6、提取内盒信息接口Json数据变量
添加http2的json提取器,内盒变量设置
注意: 返回数据套了两层[{}]括号,对应变量 $. . 两个点 属性值
7、创建http3复核接口
在body体中,使$引用对应的变量充当参数
8、调整整体接口、组件如下顺序
9、执行压测
察看结果树
汇总报告
聚合报告
TPS
10、总结
可以发现,接口http1、http2、http3是并发依次调用的,即在不同线程里是依次调用的,而且csv数据由线程共享的,不同线程不会取同一行的数据。