JMeter-两种控制Sampler执行线程数量的方法

本文介绍了如何使用JMeter的如果控制器和吞吐量控制器来灵活控制Sampler的执行线程数量。通过如果控制器,可以根据线程数的奇偶性决定请求是否执行;而吞吐量控制器则提供了按百分比或执行次数控制请求频率的方式,帮助优化测试场景。示例展示了不同设置下的执行效果。

JMeter-两种控制Sampler执行线程数量的方法

一、如果(If)控制器

(1)添加”如果(If)控制器“,并在控制器中填写判断语句:

${__groovy(${__counter(false)}%2 == 0)}

注:该判断语句表示线程数为偶数的,执行该控制器下的请求

${__groovy(${__counter(false)}%2 == 1)}

注:该判断语句表示线程数为奇数的,执行该控制器下的请求

这里的判断语句,可根据实际的情况进行修改,多个判断条件可用 “&&”连接,如“${__groovy(${__counter(false)}%2 == 0 && ${__counter(false)}%3 != 0)}

如图所示:
在这里插入图片描述

(2)执行效果
现设置线程数为2,循环1次,执行:
在这里插入图片描述

执行结果:
在这里插入图片描述

二、吞吐量控制器

(1)添加吞吐量控制器
吞吐量控制器有两种方式:1.按百分比、2.按执行次数
按百分比:如下图设置的按百分比,当线程组中设置线程数为2时,该控制器下的请求共执行2x50%=1次
在这里插入图片描述
按执行次数(不勾选per user):当线程组设置为2,该控制器设置执行1次,则该控制器下的请求只执行1次
在这里插入图片描述
按执行次数(勾选per user):当线程组设置为2,该控制器设置执行1次,则该控制器下的请求共执行2x1=2次
在这里插入图片描述

### 如何设置与优化 JMeter 线程数量 #### 设置线程数量的基础方法JMeter 中,`Number of Threads (users)` 参数用于定义模拟用户的总数。这个参数直接影响到性能测试中的并发请求量[^1]。如果目标是模拟 100 个用户同时访问某个应用,则应将 `Number of Threads (users)` 设定为 100。 为了更精确地控制这些虚拟用户的行为,在配置时还需要关注另一个重要参数——`Ramp-Up Period (in seconds)`。此参数决定了所有线程被完全激活所需的时间间隔。例如,当 `Number of Threads (users)` 被设为 100 并且 `Ramp-Up Period (in seconds)` 是 10 秒的情况下,JMeter 将尝试在这段时间内逐步增加并最终达到全部 100 条线程运行状态[^2]。 #### 计算合适的线程数策略 确定恰当的线程数目并非易事,因为它依赖于多个因素,包括但不限于待测系统的预期负载水平、硬件资源状况以及网络条件等外部变量[^3]。一种常见的做法是从较低起点开始试验不同的数值范围直到找到能够代表实际生产环境工作负荷的最佳匹配值为止: - **初始估算**:基于历史数据或者业务需求预测可能的最大在线人数作为初步参考依据; - **渐进调整**:通过不断迭代修改上述两个主要参数(即线程计数和斜坡上升周期),观察响应时间变化趋势图以及其他指标表现情况从而做出进一步微调决策; 此外值得注意的是,在某些特殊场景下比如压力测试阶段可能会故意超出正常操作界限去探测崩溃点所在位置,这时所选用的具体数字显然也会有所不同甚至远高于常规设定标准。 #### 使用最佳实践进行优化 除了合理规划基础参数外,还有其他一些技巧可以帮助提升整体效率效果: - **分批执行计划**: 如果预计总流量较大可考虑拆分成若干批次分别实施进而减少单次实验持续时长同时也便于分析定位瓶颈问题; - **动态脚本编写**: 利用BeanShell 或者 JSR223 Sampler 编写灵活可控性强的自定义逻辑实现更加复杂的交互流程; - **分布式部署模式**: 当本地机器无法满足高吞吐率要求的时候可以借助远程节点共同完成大规模压测任务. 综上所述, 正确理解并科学运用好各个组成部分才能充分发挥 Apache JMeter 这款强大工具的优势价值最大化其效用服务于我们的项目开发过程之中. ```python def calculate_optimal_threads(max_users, ramp_up_time): """ A simple function to demonstrate how you might dynamically adjust thread counts. Args: max_users (int): The maximum number of users expected during peak load. ramp_up_time (float): Time period over which threads should be initiated. Returns: int: Suggested initial value for 'Number of Threads'. """ suggested_initial_value = round((max_users / ramp_up_time) * 5) return min(suggested_initial_value, max_users) print(calculate_optimal_threads(100, 10)) # Example usage with given parameters from the reference material. ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值