1.简介

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

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

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

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

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

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

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

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

5.实战

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

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

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

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

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

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

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

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

参考脚本:

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

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

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

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

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

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

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

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

6.小结

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

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

  1. Jmeter(三十六) - 从入门到精通进阶篇 - 设置负载阶梯式压测场景(详解教程)

    1.简介 在性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间,然后继续加压达到某个值持续运行,如此循环直到达到预期的峰值,运行一 ...

  2. Jmeter(四十二) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 -番外篇(详解教程)

    1.简介 为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是模模糊糊的.更有甚者觉得那是禁地神圣不可轻 ...

  3. Jmeter(三十七) - 从入门到精通进阶篇 - 输出HTML格式的性能测试报告(详解教程)

    1.简介 相对于Loadrunner,Jmeter其实也是可以有测试报告产出的,虽然一般都不用(没有Loadrunner的报告那么强大是一方面),但是有小伙伴们私下问,那宏哥还是顺手写一下吧,今天我们 ...

  4. Jmeter 跨线程组传递参数 之两种方法

    终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直 ...

  5. Jmeter 跨线程组传递参数 之两种方法(转)

    终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直 ...

  6. Jmeter跨线程组传递参数

    Jmeter的线程组之间是相互独立的,各个线程组互不影响,所以线程组A中输出的参数,是无法直接在线程组B中被调用的. 但有时候为了方便,可以把不同模块接口放在不同线程组,就涉及不同线程组传参问题,比如 ...

  7. Jmeter操作之跨线程组传递参数

    思路:将某一线程组内的变量通过“__setProperty”函数设置成jmeter的全局变量,在另一线程组中通过“__P”函数调用即可. 1.添加-后置处理器-BeanShell PostProces ...

  8. Jmeter(三十四) - 从入门到精通进阶篇 - 参数化(详解教程)

    1.简介 前边三十多篇文章主要介绍的是Jmeter的一些操作和基础知识,算是一些初级入门的知识点,从这一篇开始我们就来学习Jmeter比较高级的操作和深入的知识点了.今天这一篇主要是讲参数化,其实前边 ...

  9. Jmeter(三十八) - 从入门到精通进阶篇 - 命令行运行JMeter详解(详解教程)

    1.简介 前边一篇文章介绍了如何生成测试报告,细心地小伙伴或者同学们可以看到宏哥启动Jmeter生成测试报告不是在gui页面操作的,而是在gui页面设置好保存以后,用命令行来生成测试报告的.这一篇宏哥 ...

  10. Jmeter(四十三) - 从入门到精通高级篇 - Jmeter之IP伪装和欺骗(详解教程)

    1.简介 我们从小接受的教育就是不要撒谎,要做一个诚实的孩子,但是在现实生活中有时候说一个善意的谎言也不是可以的.这里由于服务器各种安全机制的限制和校验,因此我们不得不欺骗一下服务器,今天宏哥就给大家 ...

随机推荐

  1. php实现设计模式之 装饰模式

    <?php /* * 装饰模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. * * 角色 * 抽象构件(Compone ...

  2. yuecheng 笑话

    http://115.28.189.219:9898/stock/manager_articles/fundamentals 要闻 http://115.28.189.219:9898/stock/m ...

  3. Android动画View Animation

    Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等, ...

  4. JS单例设计模式

     单例,指的是只有一个实例的对象.    在应用单例模式时,生成单例的类必须保证只有一个实例的存在,很多时候整个系统只需要拥有一个全局对象,才有利于协调系统整体的行为.比如在整个系统的配置文件中,配置 ...

  5. MyEclipse 安装SVN插件方法及插件下载地址

    直接解压法 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240下载SVN插件:site-1.x.x. ...

  6. C++中出现的计算机术语2

    C-style strings(C 风格字符串) C 程序把指向以空字符结束的字符数组的指针视为字符串.在 C++ 中,字符串字面值就是 C 风格字符串.C 标准库定义了一系列处理这样的字符串的库函数 ...

  7. git修改文件夹名字

    git mv -f oldfolder newfolder git add -u newfolder (-u选项会更新已经追踪的文件和文件夹) git commit -m "changed ...

  8. HeadFIrst Ruby 第六章总结 block return values

    前言 这一章通过抽取一个文件中的确定的单词的项目进行讲解,主要包括了: File 的打开.阅读与关闭 find_all & refuse方法的相关内容 map 方法的相关内容这章的核心是:关于 ...

  9. php 第三方DB库NOTORM

    百度NOTORM找到该库的官网 :http://www.notorm.com/ 打开E:\AppServ\php7\php.ini 找到extension=php_pdo_mysql.dll 解开前面 ...

  10. js实现toFixed截取效果

    Number.prototype.toFixed = function(fractionDigits) { ; || f > ) { throw new RangeError("Pre ...