JMeter线程组线程间共享计数器变量及生成百万JSON请求咨询
问题2:生成100万条唯一JSON请求的负载测试方案
要生成100万条独立的JSON请求,每个线程执行一条,首先得把线程组的线程数设为1000000,但这里要注意JMeter的内存限制——得提前调整JVM启动参数,比如-Xms4g -Xmx8g,不然很容易内存溢出。接下来看动态字段怎么生成:
- 动态字段的生成逻辑:看你给的JSON示例,字段里都带时间戳和序号,咱们用JMeter的内置函数就能轻松搞定:
- 时间戳:用
__time函数,${__time(,)}就能拿到当前毫秒级时间戳;如果想让所有请求用同一个基准时间戳,就把它存在User Defined Variables里,比如baseTimestamp=${__time(,)},后面直接引用${baseTimestamp}就行。 - 唯一序号:因为每个线程只执行一条请求,用
__threadNum函数(线程编号)就够了,它从1开始递增,刚好对应100万条请求的唯一标识;要是担心线程编号重复(比如分布式测试),就用__counter的全局模式,确保每个请求的序号绝对唯一。
- 时间戳:用
- 构造JSON请求体:在HTTP请求的Body Data里,把动态部分用函数替换掉就行,比如:
这样每个线程生成的JSON字段都是唯一的,完全符合你的示例格式。{ "transaction_id": "TestTransactionId_${baseTimestamp}_${__threadNum(,)}", "document_id": "TestDocumentId_${baseTimestamp}_${__intSum(${__threadNum(,)},200,)}", "sender_id": "TestSenderId_${baseTimestamp}", "receiver_id": "TestReceiverId_${baseTimestamp}", "process_name": "TRANSACTION_TRACKING_PURCHASEORDER", "changed_by": "TestChangedBy_${baseTimestamp}" } - 性能优化小技巧:
- 直接跑100万线程压力太大?试试分布式测试:找几台机器当JMeter slave,每台跑10万线程,分摊负载,这样单台机器的压力就小多了。
- 关掉不必要的监听器!比如View Results Tree这种实时查看结果的监听器非常耗内存,只保留Summary Report或者Backend Listener来收集测试结果就行。
- 把JSON模板存成单独的文件,用
__FileToString函数读取后再替换变量,比直接在Body里写JSON更高效,也方便后续修改模板。 - 调整JMeter配置文件
jmeter.properties,比如设置httpclient4.retrycount=0、http.connection.timeout=5000,减少不必要的重试和超时等待,提升请求效率。
内容的提问来源于stack exchange,提问作者jgoyal10
相关产品推荐
相关产品推荐

