jmeter并发时比例控制的四种方法

本文探讨了在负载测试中如何控制不同类型的用户行为比例,提出了四种方法:使用counter函数、生成随机数、使用配置元件生成随机数及利用switchcontroller。这些方法帮助测试人员精确模拟实际用户行为,提高测试效率。

最近项目中遇见了这么一个场景:
100个并发,20个人登录,80个人浏览。
 

这实际上就是一个比例控制的问题。
在网上浏览了一些资料,大概有这么几种方式,这里做一个归纳。

1.利用counter函数。

 

 

 

一个线程就理解成一个用户。
2个用户,每个用户迭代3次。
一共迭代6次

1.${__counter(true,i)}:只统计该用户的迭代次数,

 

2.${__counter(false,i)}:统计所有用户的迭代次数

 

 

 

如要求比例为2:8。
1,2,3,4,5,6,7,8,9,10。
这10个数中,能被5整除的有5,10;不能被5整除的有余下8个。所以比例为2:8。
写成数学式:
比例为20%,则${__counter(false,)}%5 ==0,
比例为80%,则${__counter(false,)}%5 !=0

若比例为3:7,
${__counter(false,)}%2 =1,则有1,3,5,7,9
${__counter(false,)}%4 =0,则有4,8
${__counter(false,)}%2 =1||${__counter(false,)}%4 =0的集合则为:1,3,4,5,7,8,9
${__counter(false,)}%2 ==0&&${__counter(false,)}%4=2的集合则有2,6,10
则结果为3:7.

说到底是一个数学问题。

这里以2:8为例。


 

 

 ${__counter(false,)}%2 =1 这种写法,等价于${__Random(1,10,)}%2==1


方法二:
有些童鞋若觉得通过数学的方法计算比例的方法比较绕,那么可以采用以下的方法。
思路:
取1-10的随机数randNo,
若randNo<=2,执行请求A;randNo>2,执行请求B;

 

这样A:B=2:8

 

若randNo<=3,执行请求A;randNo>3,执行请求B;
这样A:B=3:7

 

这样可以随心所欲的控制比例。

先在前置处理器中生成随机数,用于if控制器中作为条件,进行判断;




但是这种方法每次都要生成随机数,该请求也会对服务器造成一定的压力。

方法三:
思路和方法二一样,只有一点小区别;

 

是用的配置元件中Random Variable来生成随机数,取代了方法二中在beanshell中生成随机数。
这样就不用增加一个请求,用于生成随机数了,个人认为方法三是优于方法二的。

 

 

 

方法四:

利用switch controller来实现;

比例2:8,则0,0,1,1,1,1,1,1,1,1

switch的值等于0,执行请求2,switch的值为1执行请求8;


这种方法和方法二一样,需要先生成一个值作为参数传入;

优先考虑方法一和方法三,方法二、方法四了解下就可以了,拓展下思路~

练习资料传送门:
点击打开链接

<think>好的,用户想了解JMeter并发控制器的使用方法和参数配置。我需要先回忆一下JMeter的相关知识,特别是关于并发控制器的部分。并发控制器可能指的是线程组中的线程配置,或者是某种逻辑控制器,比如Throughput Controller或者Synchronizing Timer? 首先,用户提到的引用里提到了并发设置,引用1提到JMeter并发设置教程,设置并发和查看报告。这可能指的是线程组的配置,比如线程数、ramp-up间等。引用3提到了while控制器和计数器,这可能与循环控制有关,但并发控制器可能不是这个。 需要明确的是,JMeter中并没有一个直接叫“并发控制器”的组件。可能用户指的是如何控制并发用户数,这通常通过线程组来设置。或者用户可能是指Throughput Controller,用来控制执行频率,或者Synchronizing Timer用于同步请求,模拟并发。 根据用户的问题,应该先解释线程组的配置,因为这是控制并发用户数的核心部分。然后,如果有其他控制器用来控制并发逻辑,比如Synchronizing Timer,也需要提到。 另外,用户可能需要具体的步骤,比如如何添加线程组,设置线程数、ramp-up间,循环次数等。然后,如果有其他控制器配合使用,比如Synchronizing Timer来让多个线程在同一刻发起请求,以模拟瞬间的并发压力。 还需要注意引用中的内容,引用3提到while控制器和计数器,这可能是在循环中控制请求次数,但和并发控制关系不大,不过可以提一下如何结合使用。 可能的结构是:首先介绍线程组的基本配置,然后讲解如何通过其他组件(如定器)来进一步控制并发,最后给出示例和注意事项。需要确保步骤清晰,参数配置说明到位,并引用相关的内容。 另外,用户可能需要示例,比如如何设置100个并发用户,每秒增加10个用户等。可能需要给出截图或者代码块,但用户提供的示例中有Python代码,这里可能需要JMeter的测试计划结构,比如XML配置,但实际使用中用户可能更倾向于界面操作步骤,所以应该用文字描述步骤。 需要检查引用是否正确应用,比如引用1和引用2关于并发的设置,引用3关于循环控制。在回答中适当引用这些内容,比如线程组配置参考引用1,同步定器可能没有直接引用,但可以结合已有的引用进行说明。 最后,生成相关问题要围绕并发控制,比如线程组参数优化、定器的使用、如何模拟高并发场景等。</think>### JMeter并发控制器的使用方法及参数配置 在JMeter中,**并发控制主要通过线程组(Thread Group)和相关逻辑控制器实现**。以下是具体操作步骤和参数说明: --- #### 一、线程组配置(核心并发设置) 1. **添加线程组** 右键测试计划 → 添加 → 线程(用户) → 线程组。 2. **关键参数配置** - **线程数(Number of Threads)**:模拟的并发用户数,例如设置为`100`表示100个用户同操作[^1]。 - **Ramp-up间(Ramp-up Period)**:线程启动的间间隔。例如设置为`10`秒,表示每秒启动`10`个线程[^1]。 - **循环次数(Loop Count)**:单个线程执行请求的次数,设置为`无限`可配合调度器持续压测。 ```plaintext 示例配置: - 线程数:100 - Ramp-up间:10 - 循环次数:1 ``` --- #### 二、同步定器(Synchronizing Timer) 用于**精确控制多个线程在同一刻发起请求**,模拟瞬间高并发场景。 1. **添加同步定器** 右键线程组或请求 → 添加 → 定器 → 同步定器。 2. **参数说明** - **模拟用户组的数量(Number of Simulated Users to Group by)**:每积累到指定数量的线程后,同触发请求。 - **超间(Timeout in milliseconds)**:若未达到指定线程数,等待的最长间。 ```plaintext 示例配置: - 模拟用户组的数量:50 - 超间:5000 ``` --- #### 三、Throughput Controller(吞吐量控制器) 用于**控制请求的执行频率**,间接影响并发压力分布。 1. **添加吞吐量控制器** 右键线程组 → 添加 → 逻辑控制器 → 吞吐量控制器。 2. **模式选择** - **百分比模式**:按比例分配请求执行次数。 - **总次数模式**:直接指定执行次数。 --- #### 四、结合计数器实现动态控制(引用[3]) 通过**计数器(Counter)**和**While控制器**,可实现循环并发逻辑: 1. 添加计数器 → 设置自增步长。 2. 添加While控制器 → 条件设为`${pageNumber < 20}`。 3. 在控制器内嵌套HTTP请求,实现循环并发[^3]。 --- #### 五、注意事项 1. **资源监控**:使用监听器(如`聚合报告`)查看TPS、响应间等指标[^1]。 2. **分布式测试**:单机资源不足,可通过多台JMeter Agent分担压力。 3. **参数化**:使用CSV文件或函数助手动态替换请求参数,避免重复数据干扰。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值