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

JMeter SDK自定义SampleListener未执行问题求助

JMeter SDK自定义SampleListener未执行问题求助

嘿,我帮你排查下这个问题~你的自定义SampleListener完全没执行,核心原因是你把它挂载到了错误的HashTree节点上,JMeter的监听器(包括自定义的SampleListener)需要和采样器/线程组建立正确的层级关联,才能接收到采样事件。

你看代码里这句:

testPlanTree.add(testPlan, collector);

这相当于把监听器直接挂在了测试计划的根节点下,它没有被纳入任何实际执行采样的链路中,自然不会触发任何回调方法。

给你两个可行的修改方案:

  • 方案一:让监听器监听单个采样器的结果
    把collector加到和HTTP采样器、断言同层级的samplerTree里,这样它会监听这个HTTP采样器的所有执行结果:

    var samplerTree = new HashTree();
    samplerTree.add(httpSampler);
    samplerTree.add(assertion);
    samplerTree.add(collector); // 把collector移到这里
    
  • 方案二:让监听器监听整个线程组的所有采样结果
    如果想监听线程组下所有采样器的结果,就把collector加到线程组的子树中:

    var threadGroupSubTree = testPlanTree.add(testPlan, threadGroup);
    threadGroupSubTree.add(samplerTree);
    threadGroupSubTree.add(collector); // 加到线程组的子节点下
    

另外提个小建议:你的results用的是ArrayList,而线程组设置了100个并发线程,ArrayList不是线程安全的,可能会出现结果丢失或者并发修改异常。如果要保证结果准确性,可以换成CopyOnWriteArrayList:

final List<SampleResult> results = new CopyOnWriteArrayList<>();

修改后重新运行,你的sampleOccurred方法就会被每个采样结果触发,collector.results就能收集到预期的100条数据,后续的断言也能正常执行啦~

备注:内容来源于stack exchange,提问作者walsh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:50:30