使用JMeter做性能测试会遇到这么一个场景:后面的请求需要根据前面的查询列表结果通过正则表达式提取器取值后赋值,而后面用户的赋值必须是唯一的,此时该如何做?
如果按编程思维来说,这个问题并不难。只需要把前面的结果保存到一个数组变量中,后面的用户(即线程组中的单个线程)逐一从该数组变量中取值即可。
小酋开始的思路也是如此,但最后发现要实现这个功能,非常复杂。如果大家不信,可以试试看,如果有简单的实现方式,可以留言告诉小酋。
最后,小酋最后通过__threadNum该函数很容易解决了上述的问题。
下面谈谈具体的思路
1、假如我们前一请求的查询列表结果如下
如果你想学习jmeter性能测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的jmeter接口测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386
15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!_哔哩哔哩_bilibili15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!共计27条视频,包括:1.【性能测试】什么是性能测试以及性能测试的价值和目的、2.【性能测试】真实企业性能测试指标详解以及指标测算、3.【性能测试】真实企业中性能测试流程以及细节剖析等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1B14y1D7X9/?spm_id_from=333.337.search-card.all.click
2、此时要用3个用户(线程)执行测试,迭代一轮
3、我们在JMeter中新建一【http请求】,实现请求查询列表
4、通过正则表达式提取器对查询结果取值(该提取器的具体用法参见文章《JMeter正则表达式提取器实践》)
5、新建一【JAVA请求】,名字直接为 ${ID} (即上面取值的变量)方便我们后续查看结果。
6、最后添加一监听器【查询结果树】,运行后(如下)我们看到三个用户(线程)的取值一样。
这里可能大家第一时间想到的是对前面查询列表结果的取值做处理,但前面提到小酋尝试过要实现很复杂。仔细看上面截图中线程组的每个线程都有编号(如 线程组 1-3),那我们是不是可以在这上面想办法?
7、在正则表达式提取器中,使用${__threadNum}作为匹配数字的值。
8、最后我们再来运行下,看看取值结果(如下),即完美解决了将接口查询结果列表按顺序赋值给各用户,保证各用户赋值唯一的问题。
思考几个问题: