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

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

时间:2023-03-02 14:56:25浏览次数:52  
标签:Jmeter 宏哥 传递 token 线程 所示 jmeter

------------------------------------------------------------------- 

转载自:北京-宏哥 https://www.cnblogs.com/du-hong/p/13667219.html 

-------------------------------------------------------------------- 

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

 

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,宏哥,传递,token,线程,所示,jmeter
From: https://www.cnblogs.com/lirongyang/p/15595287.html

相关文章

  • jmeter日期时间函数:time函数
     time函数的使用方法:${__time(日期时间格式,自定义变量名)} 年:yyyy或yy  月:MM  日:dd  时:HH(24小时制) hh(12小时制)  分:mm  秒:ss  毫秒:SSS1.......
  • Java实验-Swing 简单多线程实验
    实验要求:多线程是生活中常见的现象,我们要让计算机程序同时做N件事,就可以通过多线程实现:如图所示,分别用Thread和Runnable两种方法各开2条线程,实现如下界面,每条线程的数字......
  • jmeter传参中文插入数据,业务系统显示乱码
    在jmeter传参含中文的请求中,将编码设置为:UTF-8即可现象:解决方法:  ......
  • 【Nginx】优化,增加线程
    https://blog.csdn.net/cnskylee/article/details/127645806 众所周知,Nginx一款体积小巧,但是性能强大的软负载,主要被用作后端服务和应用的反向代理和负载均衡。Nginx......
  • 多线程模型之生产者消费者 -- 转载
    https://www.cnblogs.com/pandamohist/p/13852197.html互斥量std::mutex:解决多个线程对共享数据的访问问题。条件变量std::condition_variable:是一种线程间的通讯机制,......
  • 线程
    线程1.线程概述进程是CPU分配资源的最小单位,线程是操作系统调度执行的最小单位。线程是轻量级的进程,在Linux环境下线程的本质仍是进程。线程和进程的区别:进程间的信......
  • java 如何使用多线程调用类的静态方法?
     1.情景展示静态方法内部实现:将指定内容生成图片格式的二维码;如何通过多线程实现?2.分析之所以采用多线程,是为了节省时间 3.解决方案准备工作logo文件......
  • jmeter随机函数
    随机数字:${__Random(开始数字,结束数字,)}从起止数字范围里面随机抽取1个应用范例一:从666-888中随机抽取1个数字: ${__Random(666,888,)}应用范例二:手机号:  ${__Rand......
  • Jmeter(五十一) - 从入门到精通高级篇 - jmeter之运动战(详解教程)
    ------------------------------------------------------------------- 转载自:北京-宏哥https://www.cnblogs.com/du-hong/p/13667219.html -------------------------......
  • Jmeter(五十) - 从入门到精通高级篇 - jmeter 之模拟弱网进行测试(详解教程)
    ------------------------------------------------------------------- 转载自:北京-宏哥https://www.cnblogs.com/du-hong/p/13667219.html -------------------------......