You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:04:53