JMeter配置ConstantThroughputTimer接收用户输入时JMX报错求助
问题原因
JMeter加载JMX测试计划时,会尝试将ConstantThroughputTimer的doubleProp/value字段解析为双精度数字,而${__P(Throughput)}是字符串形式的变量引用,无法被静态解析为数字,因此触发NumberFormatException。
解决方案
方法1:通过JSR223 PreProcessor动态设置吞吐量(推荐)
这种方法避开XML加载时的类型校验,在测试运行时动态从JMeter属性中取值并设置到定时器:
- 在测试计划的Thread Group下添加一个JSR223 PreProcessor(需放在所有请求之前)。
- 在PreProcessor的脚本框中输入以下Groovy代码:
// 根据定时器名称定位目标ConstantThroughputTimer def timer = ctx.getTestPlan().findTestElementsOfType(org.apache.jmeter.timers.ConstantThroughputTimer).find { it.getName() == "Constant Throughput Timer" } if (timer) { // 读取JMeter属性中的Throughput值,转换为双精度类型后设置给定时器 def throughput = props.get("Throughput") as double timer.setThroughput(throughput) }
- 修改JMX中
ConstantThroughputTimer的throughput为一个默认数字(确保XML能正常加载):
<doubleProp> <name>throughput</name> <value>100.0</value> <savedValue>0.0</savedValue> </doubleProp>
方法2:使用带默认值的属性函数(兼容部分场景)
在doubleProp/value中使用带有默认数字的__P函数,XML加载时会用默认值解析为数字,运行时自动替换为传入的属性值:
<doubleProp> <name>throughput</name> <value>${__P(Throughput, 100.0)}</value> <savedValue>0.0</savedValue> </doubleProp>
注意:部分JMeter版本可能仍会对变量引用做静态解析,此方法兼容性不如方法1。
额外优化
可以移除UserParameters中的throughput变量,因为${__P(Throughput)}可直接在测试中引用JMeter属性,无需通过用户参数中转。
内容的提问来源于stack exchange,提问作者Suvendu Mandal
相关产品推荐
相关产品推荐

