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
相关产品推荐
相关产品推荐

