使用吞吐量控制器与Unique Each Occurrence参数化时无法达成目标TPS
可行解决方案:JMeter 实现唯一产品分配并达标预期TPS
方案1:CSV数据集配置+严格唯一分配
- 准备含所有唯一产品ID的CSV文件,每行一个ID
- 配置CSV数据集:选择
Share mode: Current thread group,关闭Recycle on EOF?,开启Stop thread on EOF?(若需循环唯一分配,可结合计数器重置逻辑) - 这种方式依赖JMeter原生组件,性能开销远低于自定义代码,能更好适配吞吐量控制器与计时器的TPS控制逻辑
方案2:预生成产品ID列表+内置计数器
- 用JSR223前置处理器提前生成所有唯一产品ID的列表,存入JMeter全局属性(如
productList_0、productList_1...) - 添加
Counter元件:起始值0、步长1、最大值设为产品列表长度-1 - 调用产品ID时用
${__P(productList_${counter},)},通过计数器索引直接取值,避免运行时动态计算损耗
方案3:调整吞吐量控制层级与逻辑
- 将恒定吞吐量计时器移至线程组级别,而非嵌套在事务/吞吐量控制器内,确保全局TPS控制生效
- 吞吐量控制器选择
Total Executions模式而非百分比模式,精确控制事务执行总量 - 把产品ID获取逻辑移到吞吐量控制器外部的前置处理器中,避免控制器内逻辑叠加导致的性能损耗
方案4:分布式测试+分片产品ID
- 若单节点因负载或ID生成逻辑出现瓶颈,启用JMeter分布式测试
- 给每个测试节点分配独立的产品ID分片(如节点1用1-1000,节点2用1001-2000),既保证全局唯一,又通过多节点分摊负载提升TPS
内容的提问来源于stack exchange,提问作者Om Prakash Yadav
相关产品推荐
相关产品推荐

