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

JMeter中JSR223采样器SampleResult函数异常问题咨询

解决JMeter JSR223采样器(Java)中SampleStart调用两次的错误

嘿,这个问题我前不久帮同事排查过,太熟悉了!咱们一步步来解决:

问题根源

JMeter的JSR223采样器默认会自动帮你调用SampleResult.sampleStart()和SampleResult.sampleEnd()——脚本执行前自动启动计时,脚本结束后自动停止。如果你在自己的代码里又手动调用了这两个方法,就会触发“sampleStart called twice”的错误,相当于重复启动了采样计时。

针对性解决方案

根据你的需求,分两种情况处理:

情况1:不需要手动控制采样计时

直接删除脚本中所有手动调用的SampleResult.sampleStart()和SampleResult.sampleEnd()代码,让JMeter自动处理采样的开始和结束就好。这样既不会报错,也能正常生成采样结果。

情况2:必须手动控制采样时机(比如只计时某段核心代码)

如果你的脚本里需要只对某部分逻辑计时(比如初始化driver之后的业务操作),那得先告诉JMeter不要自动管理采样结果,再手动控制:

// 第一步:禁用JMeter自动的采样管理
SampleResult.setIgnore(true);

// 第二步:重置并手动启动采样计时
SampleResult.reset();
SampleResult.sampleStart();

// 你的核心业务代码(比如driver操作页面)
// ...

// 第三步:停止计时并标记采样状态
SampleResult.sampleEnd();
SampleResult.setSuccessful(true); // 如果执行出错就设为false

额外提醒:脚本里的静态变量坑

看你的代码里用了public static WebDriver driver这种静态变量,在JMeter多线程压测时,静态变量会被所有线程共享,很容易出现多个线程抢用同一个driver的混乱情况。建议改用JMeter的线程局部变量vars来存储:

// 从线程变量里取driver,不存在就初始化
WebDriver driver = (WebDriver) vars.getObject("driver");
if (driver == null) {
    DesiredCapabilities desCapabilities = DesiredCapabilities.chrome();
    driver = new ChromeDriver(desCapabilities);
    vars.putObject("driver", driver); // 存到线程变量里,仅当前线程可见
}

这样既能解决当前的采样错误,也能避免后续的线程安全问题~

内容的提问来源于stack exchange,提问作者Bala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:13:14