2013-11-01 177 views
4

我有一個帶請求和持續時間斷言的HTTP請求採樣器。現在,當響應斷言失敗時,下一個HTTP請求採樣器不允許運行。只有持續時間斷言失敗時,才允許運行下一個HTTP請求採樣器。有沒有辦法來檢查某個斷言是否失敗

我開始與IF Controller這樣做的,檢查${JMeterThread.last_sample_ok}但這是,當我只有到位的響應斷言。當添加持續時間斷言和新的要求時,不再適用。

當持續時間斷言失敗時,我嘗試過BeanShell Post Processors來添加某些變量。但是當持續時間斷言失敗時,下面的代碼總是讓我回到空陣列事件。

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. 

上午我做錯了什麼,是它甚至有可能我想要什麼?

在此先感謝。

回答

5

我設法讓它與BeanShell Listener一起工作。由於execution order,我第一次嘗試使用BeanShell後置處理器進行此操作是不可能的。後處理器在斷言之前運行。這也是Debug Post Processor未顯示在BeanShell Listener中創建的變量的原因。

所以我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()); 

在我IF Controller我設置了以下條件:

${do_post_assertion_consumer_service_url} 
相關問題