Jmeter 有没有办法检查某个断言是否失败

Jmeter 有没有办法检查某个断言是否失败,jmeter,Jmeter,我有一个带有响应和持续时间断言的HTTP请求采样器。现在,当响应断言失败时,不允许运行下一个HTTP请求采样器。只有当持续时间断言失败时,才允许运行下一个HTTP请求采样器 我用一个IF控制器开始这样做,并检查${JMeterThread.last_sample_ok},但那是在我只有响应断言的时候。当添加持续时间断言和新需求时,这将不再适用 我尝试过BeanShell后处理器在持续时间断言失败时添加某些变量。但以下代码总是在duration断言失败时返回空数组事件 BeanShell后处理器代

我有一个带有响应和持续时间断言的HTTP请求采样器。现在,当响应断言失败时,不允许运行下一个HTTP请求采样器。只有当持续时间断言失败时,才允许运行下一个HTTP请求采样器

我用一个
IF控制器
开始这样做,并检查
${JMeterThread.last_sample_ok}
,但那是在我只有响应断言的时候。当添加持续时间断言和新需求时,这将不再适用

我尝试过BeanShell后处理器在持续时间断言失败时添加某些变量。但以下代码总是在duration断言失败时返回空数组事件

BeanShell后处理器代码:

import org.apache.jmeter.assertions.AssertionResult;

AssertionResult[] results = prev.getAssertionResults();

if (results.length == 0) {
   vars.put("assertions_have_zero_length", "true"); 
}

//debug post processor shows the above variable.
我还尝试使用BeanShell侦听器,这确实会返回两个断言,但在创建(放置)某些变量时,它们不会显示在调试后处理器中

BeanShell侦听器代码:

import org.apache.jmeter.assertions.AssertionResult;

AssertionResult[] results = sampleResult.getAssertionResults();

System.out.println("Current counter value = " + results.length);

if (results.length == 0) {
  vars.put("assertions_have_zero_length", "true"); 
} else {
  vars.put("assertions_have_zero_length", "false"); 
}

//no assertion_have_zero_length variable shown in debug post processor.
我做错什么了吗?我想要什么,这可能吗


提前谢谢。

我设法让它与
BeanShell监听器一起工作。我第一次尝试用BeanShell后置处理器来做这件事是不可能的,因为。后处理器在断言之前运行。这也是
调试后处理器
没有显示在BeanShell侦听器中创建的变量的原因

因此,我的
BeanShell Listener
的代码如下:

import org.apache.jmeter.assertions.AssertionResult;

AssertionResult[] results = sampleResult.getAssertionResults();

boolean skipPostAssertionConsumerService = false;

for(int i =0; i<results.length; i++) { 

    AssertionResult result = results[i];

    boolean isResponseAssertion = result.getName().equals("Response Assertion - Is Not Authentication Failed");
    boolean resultHasFailed = result.isFailure() || result.isError();

     if(isResponseAssertion && resultHasFailed) { 
        skipPostAssertionConsumerService = true;
        break;
     } 
}

vars.put("do_post_assertion_consumer_service_url", (!skipPostAssertionConsumerService).toString());
${do_post_assertion_consumer_service_url}