Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

1.简介

之前分享的所有文章都是只有一个线程组,而且参数的传递也只在一个线程组中,那么如果需要在两个线程组中传递参数,我们怎么做呢?宏哥今天就给小伙伴或者童鞋们讲解一下,如何实现在线程组之间传递参数。

2.什么是jmeter之跨线程组传递参数

顾名思义就是:使用jmeter工具在两个或者两个以上的线程组之间传递参数。

3.为什么在线程组之间传递参数?

首先往往我们接到一个性能测试任务需要对某一个接口进行压测时不需要每一次请求都取登录(如果每次都登录这样就会影响测试结果),那么遇到这种情况我们就要通过登录接口获取token(session、cookie)了,然后用另一个线程组进行压测。
其次大家可以想象一个场景,假设我们在测试一个购物车程序,而加东西进购物车之前,我们需要先登录(这样的逻辑设计就是不正确的,每选择一个商品添加到购物车,就需要重新登录一下,那这样的设计谁还会用你家的APP。)。在正常的场景下,我们的登录状态可以保持一段时间,不用每次添加购物车之前都登陆一下,在这种情况下,我们测试的时候就需要把登录和添加购物车写到两个线程组里,然后问题就来了,两个线程组直接无法直接共享参数。

以上两种情况是工作中经常面临的实际问题,所以需要在线程组之间传递参数。

4.如何在线程组之间传递参数?

JMeter变量作用域局限于所属线程。这样设计是经过深思熟虑的,目的是让测试线程能够独立运转。有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量。在Jmeter中,除了基本变量之外,还有一种,是它本身的属性,property,我们可以借助属性来完成线程组间的变量传递。属性为所有 JMeter 线程所共享,因此当某个线程设置一个属性后,其他线程就可以读取更新后的值。

5.实战

闲话少说,宏哥还是快速实践一下,具体步骤如下:

1、创建测试计划,并重新命名为“ jmeter之跨线程组传递参数”,然后添加线程组,并重新命名为“登录”。如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

2、选中线程组,右键添加取样器“HTTP请求”,并重新命名为“获取token”,然后配置取样器。如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

3、选中线程组,右键添加监听器“察看结果树”,保存脚本,运行jmeter,察看结果树(测试一下是否可以成功的获取到token,宏哥这里已经获取到了,然后留着等在其他线程组备用)。如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

从第三步可以看到宏哥已经成功获取到token了,紧接着就是要将token提取出来,然后再将token设置到属性中,这样其他线程组就可以调用了。

4、将token提取出来,宏哥这里使用的是正则提取器,你可以使用其他的提取器,只要提取出来就可以。首先在结果树中选择“正则测试器”,然后输入正则表达式,提取token。如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

5、从上边可以看出来,宏哥填写的正则表达式可以成功提取到token,那么宏哥选中获取token,右键添加正则表达式提取器然后将这里测试的正则表达式复制到正则提取器中进行相关的配置。如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

6、根据上边思路,提取出来就要加入到属性中,加入属性中,宏哥这里使用后置处理器-BeanShell后置处理器,选中获取token,右键添加BeanShell后置处理器,然后进行配置,添加脚本。如下图所示:

参考脚本:

String token = bsh.args[0];
${__setProperty(newtoken,${token},)};
log.info("token:" + token);

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

7、将上边BeanShell后置处理器的脚本中,加入“log.info("token:" + token);” 这段代码然后在日志中查看是否获取到token的值,宏哥运行测试计划脚本后,查看日志(点击右上角黄色都有感叹号的图标),如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

8、从上边的日志中我们清楚的发现没有提取到token的值,宏哥查看正则表达式提取器发现匹配数字是-1,这里有问题,将其修改成1,运行测试计划,再次查看日志,如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

9、从上图发现,宏哥已经提取到token的值到属性中了,那么就可以传递到其他线程组中调用这个token。然后继续创建一个线程组,右键添加配置元件“HTTP Cookie管理器”,进行配置,如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

10、右键添加取样器“HTTP请求”,并重新命名为“查看角色”进行配置,如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

11、添加监听器“察看结果树”,如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

12、保存测试计划脚本,运行jmeter后,查看结果树(可以看到获取到角色列表),如下图所示:

Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

好了,到此 jmeter之跨线程组传递参数,就已经完全实现了。

6.小结

宏哥这里就讲解了一下,跨线程传递token,像cookie、session以及其他参数都是类似的,照猫画虎即可。

上一篇:session跨域和ajax跨域名


下一篇:Android菜鸟的成长笔记(4)——你真的理解了吗?