公司让我做性能测试,系统的逻辑是调用两个接口,调用第二个接口时会生成一个订单,我想半小时内逐步生成50个订单,但是用自定义线程组设置五十个线程循环一次不太行,想问问有什么正确的实现方法
补充一下:半个小时生成五十个订单是第一阶段,还有二阶段和三阶段,是不是需要结合UItimate ThreadGroup进行测试?
jmeter做性能测试遇到了问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
檀越@新空间 2025-11-21 13:14关注下午好🌅🌅🌅
本答案参考通义千问在使用 JMeter 进行性能测试时,如果你的目标是在半小时内逐步生成50个订单,并且系统逻辑是先调用第一个接口,再调用第二个接口生成订单,那么使用“自定义线程组”或“线程组”进行设置时需要注意以下几点:
一、问题分析
你提到“用自定义线程组设置五十个线程循环一次不太行”,这可能是因为:
- 线程数过多:50个线程同时运行可能导致服务器压力过大。
- 请求频率过高:如果每个线程都立即执行,可能会导致短时间内产生大量请求,不符合“逐步生成”的需求。
- 没有控制请求的节奏:没有设置合适的延迟(如
Constant Timer)来控制请求速率。
二、正确的实现方法
为了在30分钟内逐步生成50个订单,建议采用以下方式:
1. 使用“线程组” + “定时器”控制请求频率
步骤如下:
-
创建一个线程组:
- 线程数设为 1(单线程)。
- 循环次数设为 50(生成50个订单)。
- 勾选“调度器”并设置“持续时间”为 1800秒(30分钟)。
-
添加两个HTTP请求:
- 第一个请求:调用第一个接口。
- 第二个请求:调用第二个接口生成订单。
-
添加“Constant Timer”控制请求间隔:
- 在第二个请求前添加一个 Constant Timer。
- 设置 延迟时间 为 36秒(因为 1800 / 50 = 36 秒/次)。
重点说明:
- 使用单线程可以保证请求按顺序执行,避免并发导致的数据冲突。
- Constant Timer 控制请求之间的间隔,确保每36秒生成一个订单,总时间为30分钟。
三、代码示例(JMX结构)
以下是 JMeter 的基本结构(JMX 文件中的一部分):
<threadGroup guiclass="ThreadGroupGui" name="线程组" ...> <stringProp name="ThreadGroup.num_threads">1</stringProp> <stringProp name="ThreadGroup.ramp_time">0</stringProp> <stringProp name="ThreadGroup.loops">50</stringProp> <boolProp name="ThreadGroup.scheduler">true</boolProp> <stringProp name="ThreadGroup.duration">1800</stringProp> <elementProp name="ThreadGroup.thread_group" elementType="ThreadGroup"> <collectionProp name="ThreadGroup.processors"> <elementProp name="HTTP Request 1" elementType="HTTPSamplerProxy"> <stringProp name="HTTPSampler.path">/api/endpoint1</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> </elementProp> <elementProp name="Constant Timer" elementType="ConstantTimer"> <stringProp name="ConstantTimer.value">36000</stringProp> <!-- 36秒 --> </elementProp> <elementProp name="HTTP Request 2" elementType="HTTPSamplerProxy"> <stringProp name="HTTPSampler.path">/api/endpoint2</stringProp> <stringProp name="HTTPSampler.method">POST</stringProp> </elementProp> </collectionProp> </elementProp> </threadGroup>注意:
36000是毫秒单位,表示36秒。
四、其他优化建议
| 优化点 | 说明 | |--------|------| | 使用“CSV Data Set Config” | 如果需要模拟不同用户生成订单,可以使用CSV文件提供不同的参数。 | | 使用“If Controller” | 可以根据条件判断是否执行生成订单的请求。 | | 监控资源使用情况 | 使用 Monitor Metrics 插件监控服务器CPU、内存等指标。 |
五、总结
要实现“在30分钟内逐步生成50个订单”,推荐使用以下方案:
- 使用单线程,避免并发问题。
- 设置循环次数为50,确保总共生成50个订单。
- 设置调度器和持续时间,控制总时长为30分钟。
- 使用 Constant Timer 控制请求间隔,确保每36秒生成一个订单。
如有更多接口依赖或复杂逻辑,可进一步使用 If Controller、Switch Controller 或 JSR223 Sampler 实现更灵活的控制。需要我帮你设计更复杂的脚本也可以继续提问!
解决 无用评论 打赏 举报