是否可以从 Jmeter 结果树中仅删除 returns 之一?类型指定?

is it possible to delete only one of the returns from the Jmeter result tree? Type specify?

我知道可以通过代码删除整个 Jmeter 结果树:

import org.apache.jmeter.gui.GuiPackage;
import org.apache.jmeter.gui.JMeterGUIComponent;
import org.apache.jmeter.gui.tree.JMeterTreeNode;
import org.apache.jmeter.samplers.Clearable;

log.info("Clearing All ...");

guiPackage = GuiPackage.getInstance();

guiPackage.getMainFrame().clearData();
for (JMeterTreeNode node : guiPackage.getTreeModel().getNodesOfType(Clearable.class)) {
    JMeterGUIComponent guiComp = guiPackage.getGui(node.getTestElement());
    if (guiComp instanceof Clearable){
        Clearable item = (Clearable) guiComp;
        try {
            item.clearData();
        } catch (Exception ex) {
            log.error("Can't clear: "+node+" "+guiComp, ex);
        }
    }
}

但我不想删除整个结果树,只删除状态为 == 500 的 returns。因为我的 api returns 500 直到回调是可供咨询,当它发现回调时 returns “成功”,所以当 api 不断重试时,这些重试在报告中显示为错误,但实际上回调尚未返回,当它returnsapireturns回调成功。我想从报告中删除这些正在重试的请求。

在响应码为500

时用下面代码添加一个JSR223 Post Processor忽略测试结果
if (prev.getResponseCode()=="500"){
    prev.setIgnore()
}

prev - (SampleResult) - gives access to the previous SampleResult (if any)

API 上一个变量的文档 (SampleResult)

我认为不修改 JMeter 源代码或大量使用 reflection 是不可能的。无论如何,答案不适合这里。

总的来说:

  1. 您应该仅将 JMeter GUI 用于测试开发和调试,当涉及到测试执行时,您应该 run your test in command-line non-GUI mode
  2. You should not be using listeners during test execution as they don't add any value, just consume valuable resources, all the necessary information is stored in .jtl results file
  3. Filter Results plugin 允许从 .jtl 结果文件中删除“不需要的”数据
  4. 您也可以(同样)生成 HTML Reporting Dashboard out of the .jtl results file, the Dashboard has its own responses filtering facilities

伙计们。首先,感谢您的回答,我最终放弃了从树中删除结果并寻找一种方法来修改结果呈现方式的想法。

我做了一个 beanShell 断言,所以如果 Status==500,它会在结果树中return“成功”:

BeanShell

我也这样做了,如果这是一个新的尝试,结果树中显示的名称将表明这一点,根据 return:

api name = variable

我有这样的逻辑:

import org.apache.jmeter.samplers.SampleResult;

//process main sample
if (${status} == 500) {
    SampleResult.setResponseCodeOK();
    SampleResult.setSuccessful(true);
vars.put("Api_Fake_Client_name", "API_FAKE_CLIENT_RETRY");

我会在其他条件下配置答案,但我相信这样我就能解决我的问题,因为新的尝试不再显示为错误。