此场景可以用于稳定性测试,在稳定性测试中,通常需要持续压测几个小时甚至几天时间,查看接口是否有报错,或者cpu、内存会上涨,此时就需要通过控制持续时间来达到此目的。
1.创建线程组,循环次数勾选永远
2.勾选调度器,持续时间输入120,即可在120秒内持续调用接口
如果想控制每秒发送请求数量,仅仅通过线程数与循环次数是不够的,因为这只能控制发送总数,而要控制每秒发送数量,需要线程数与常数吞吐量控制器的搭配使用,这种场景在性能测试中使用不多。
例如每秒钟调用30次接口,那么把线程数设置为30,将常数吞吐量控制器的每分钟样本量设置为60,即每个线程每秒钟调用一次,通过此设置可以控制每秒钟的调用次数。
Jmeter不仅可以作为性能测试工具和接口自动化工具,也可以作为日常数据库操作的工具。如果想循环多次操作数据库,例如插入多条数据,不需要写java或者python代码,仅仅通过Jmeter添加几个插件就可以实现了。
1.先在测试计划中配置数据库连接中间件,以mysql5.7为例,下载mysql-connector,如果是mysql8+,还请网上自行下载对应connector。
然后配置到Jmeter的测试计划中。
2.创建线程组和JDBC Connection Configuration,然后配置变量名称
3.在下面的Database Connection Configuration中配置数据库url、driver、name、password
4.创建JDBC Request,变量名称与上一步的变量名称一致,下方输入sql语句,执行即可
5.如果数据的某个字段需要随机生成,可以配合工具->函数助手来完成
有时在进行性能测试时,需要将上一个接口的响应结果进行持久化保存,从而作为下一个接口的参数进行性能压测。创建线程组和HTTP请求,请求的响应结果中包含currentUserId这个字段,假定要提取这个字段
1.配置正则表达式提取器,每个字段的含义可查看此文章:https://zhuanlan.zhihu.com/p/27999878
2.配置BeanShell PostProcessor,参数与正则表达式中的引用名称一致,用${}进行引用,脚本如下:
FileWriter fw = new FileWriter("D:\\account1.csv",true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(vars.get("param"));
bw.newLine();
bw.close();
实现参数传递是做接口自动化的前提之一,而Jmeter可以实现参数提取与参数传递,例子中创建了两个HTTP请求,新闻列表请求会返回新闻列表uniquekey
而新闻详情请求的参数需要通过uniquekey,来返回详情内容。
1.在新闻列表的请求中增加JSON提取器,JSON Path expressions输入JsonPath表达式,定位到要提取的字段,然后赋值给变量“name”。
2.在新闻详情的请求中通过${}的形式,提取上一个接口的变量,注意此处变量用的是“name”
性能测试中,两个相关联的接口不一定都在同一个线程组,遇见这种情况时,我们要进行跨线程组传参,与上一个示例基本相同,只不过在第一个线程组中使用了BeanShell后置处理器,将参数保存到了全局变量。此处还是用新闻列表和新闻详情两个请求举例,只不过这次将两个请求分别放入不同的线程组。
1.新闻列表请求中配置BeanShell后置处理器,将“name”变量保存到全局变量中,并重新叫做“NAME”
${__setProperty(NAME,${name},)}
2.新闻详情请求中使用下面这种方式提取全局变量
${__property(NAME,,)}
3.如果失败,记得查看测试计划里是否勾选独立运行每个线程组,勾选后才生效
在进行混合负载测试时,需要按照线上实际的流量,添加多个接口进行测试,此时就需要使用吞吐量控制器来进行流量的分配。例如将三个接口按照30%、50%、20%的比例进行分配,持续调用一段时间后,最终调用三个接口调用的样本数为:3:5:2
1.在每个接口上增加吞吐量控制器,注意吞吐量不要加百分号
2.持续调用20秒,查看聚合报告,样本数量基本保持3:5:2
使用jmeter调用接口或者往数据库插入数据时,经常遇见id不能重复的情况,此时可以通过计数器来完成。
1.添加计数器控制元件,输入起始值、步长和引用名称
2.接口调用时使用${}引用计数器的引用名称即可实现变化