Jmeter中线程组的说明

Jmeter是大家熟悉的一种用于做压测和自动化测试工具,其中最常见的就是线程组设置,线程组的设置也比较简单,但是还是有些人经常会弄混淆,在这里mark一下。本人的Jmeter有做过中文破解,但是又破解的不彻底,所以有些显示的中文有些显示的英文,影响不大,我就懒得去弄了,大家就将就看一下吧。😄😳

一.线程组包括3类:Thread Group、setUp Thread Group、tearDown Thread Group,如下图:

1.  thread group(线程组)

这个就是我们通常添加运行的线程。通俗的讲一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。一般做性能测试时需要根据实际测试情况修改线程数。

2. setUp Thread Group

一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行;类似LoadRunner的init,测试开始时进行初始化的工作。

3. tearDown Thread Group

一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组;类似LoadRunnner的end,测试结束时进行回收工作。

二.线程组参数设置的意义:

我们把线程组的设置分成三个区域,如下:

区域一:在采样器错误后要执行的动作(LoadRunner里面也有类似的运行设置选项,对比去学习):

  1、continue:继续执行接下来的操作;

  2、Start Next Thread Loop:开始下一次循环;

  3、stop Thread:停止线程,退出该线程(不再执行此线程的操作);

  4、stop Test:等待当前执行的采样器结束后,结束整个测试;

  5、Stop Test Now:马上停止测试;

区域二:线程属性

  1、Number of Threads(users):线程数,相当于模拟的用户数量,性能测试时经常会设置,比如50并发;

  2、Ramp-up Period(in seconds):达到指定线程需要的时间,例如线程数为100,时间设定为10s,那么就是10s加载    100个线程,每秒启动的线程数=100/10=10;

  3、Loop Count:如果填具体的数值,就是循环对应的次数;如果选择“Forever”,则一直执行下去,直到手动停止;

  4、Delay Thread creation until needed:延迟线程创建,直到需要才创建。

区域三:调度器配置

  需要选中调度器(scheduler),调度器配置才生效。

### JMeter 中实现跨线程组传递参数的方法 在 JMeter试计划中,默认情况下,不同的线程组是相互独立运行的,彼此之间不会共享任何数据[^1]。然而,在某些场景下可能需要实现在不同线程组间传递参数的功能。以下是几种常见的方法及其具体实现方式: #### 方法一:通过文件作为中间媒介 可以利用外部文件(如 CSV 文件)作为存储介质来完成线程组间的参数传递。 ##### 实现步骤说明: 1. **写入文件** 在第一个线程组中提取所需的参数值并将其保存到指定路径下的文件中。可以通过 `JSR223 PostProcessor` 使用 Groovy 或 Java 编写的脚本来操作文件。 ```groovy import java.io.FileWriter; FileWriter writer = new FileWriter("path/to/your/file.csv", true); writer.write(vars.get("parameterName") + "\n"); writer.close(); ``` 2. **读取文件** 在第二个线程组中使用 `CSV Data Set Config` 组件加载该文件中的内容,并将这些值分配给相应的变量供后续使用[^2]。 --- #### 方法二:借助 JMeter 属性 (Properties) JMeter 提供了一种机制允许设置全局属性,从而可以在整个试范围内访问它们。这种方法适用于简单的字符串类型的参数交换。 ##### 实现细节如下: 1. 设置属性 利用 `${__P}` 函数或者直接通过 JavaScript/Groovy 脚本动态创建新的 Property 对象并将目标值赋给它。 ```javascript props.put("sharedParameter", vars.get("sourceVariable")); log.info("Shared Parameter Value: " + props.get("sharedParameter")); ``` 2. 获取属性 另一线程组可通过相同的逻辑检索已定义好的 Properties 值。 ```javascript String sharedValue = props.get("sharedParameter").toString(); vars.put("targetVariable", sharedValue); // 将其存放到本地 Variables 集合里以便进一步处理 ``` 注意这里使用的 `props` 是指代当前 JVM 运行实例内的所有配置项集合[^3]。 --- #### 方法三:采用 Inter-Thread Communication 插件 如果上述两种基础方案难以满足复杂需求,则可考虑安装第三方扩展插件——Inter-Thread Communication Plugin 来简化流程控制过程。这个插件专门设计用于解决多线程协作问题,支持阻塞队列等功能特性。 ##### 安装与应用指南: 1. 下载最新版本的 inter-thread communication plugin 并按照官方文档指示导入至您的 JMeter 环境之中; 2. 创建名为 “Synchronization Timer”的定时器元件,并调整相关选项卡里的设定以匹配实际业务模型; 3. 结合 BeanShell Scripting Language 编写出具体的交互代码片段,例如等待特定信号触发后再继续执行下一步动作等等。 ```java // Example of using the ITCP API within a Beanshell sampler to send data between threads. import org.apache.jmeter.util.JMeterUtils; String queueName = "myQueue"; Object messageToSend = vars.get("message"); synchronized(JMeterUtils.class){ Object lockObj = JMeterUtils.getProperty(queueName+"_LOCK"); if(lockObj==null){ lockObj=new Object(); JMeterUtils.setProperty(queueName+"_LOCK",lockObj); } synchronized(lockObj){ List<Object> messagesList=(ArrayList<Object>)JMeterUtils.getProperty(queueName); if(messagesList==null){ messagesList=new ArrayList<>(); JMeterUtils.setProperty(queueName,messagesList); } messagesList.add(messageToSend); } } ``` 以上展示了如何发送消息;接收端则需监听对应名称的消息列表即可。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值