2012-03-20 200 views
24

我使用JMeter作爲單元測試工具,在參數化調用中,我期望某些響應是500內部服務器錯誤。我使用BeanShell Assertions來檢查響應。JMeter如何不失敗500內部服務器錯誤

我希望某些500內部服務器錯誤不會被標記爲失敗,如果響應包含指定的文本。所有500個服務器錯誤都被標記爲失敗。是否有可能改變行爲?

下面是BeanShell Assertion的摘錄。

if (ResponseCode.equals("500")) { 
    Failure = false; 
    String respData = new String(ResponseData); 

    if (! respData.contains("specific Text")) { 
     Failure = true; 
     FailureMessage = "500 Internal Server Error: Unexpected Response. " + 
      "Response Message: " + respData; 
    } 
} 

謝謝你和問候

回答

31

最簡單的辦法如下:

,如果你想要做其他事情的代碼,然後

: 訪問和修改SampleResult - 如果代碼爲500,則從BeanShell Assert將狀態從「FAIL」更改爲「PASS」離子/ BSF斷言或使用BeanShell PostProcessor/BSF PostProcessor改爲 - 它們都可以訪問SampleResult對象。

1. BeanShell的斷言

if (ResponseCode.equals("500") == true) { 
    SampleResult.setResponseOK(); 

    /* the same is 
    SampleResult.setSuccessful(true); 
    SampleResult.setResponseCodeOK(); 
    SampleResult.setResponseMessageOK(); 
    */ 
} 

2. BeanShell的PostProcessor中
使用prev代替 - 訪問哪一個後處理器被安裝在取樣器SampleResult對象:

if (prev.getResponseCode().equals("500") == true) { 
    prev.setResponseOK(); 

    /* the same is 
    prev.setSuccessful(true); 
    prev.setResponseCodeOK(); 
    prev.setResponseMessageOK(); 
    */ 
} 
+0

謝謝。添加SampleResult.setResponseOK();爲我所需要的完美工作。 – 2012-03-21 12:31:45

+0

@Gazen加納多斯,在這種情況下接受答案將是非常好的。 – 2012-03-21 14:47:32

+2

這將更改響應代碼。你的其他答案是一個更好的解決方案imo – MishaP 2014-11-13 23:17:07

37

另一種可能的解決方案是使用Response Assertion與選中「忽略S tatus」標誌添加到您的採樣:

忽略狀態
指示JMeter的初始狀態設置爲成功。

樣品的整體成功通過組合與現有的響應狀態的斷言的 結果確定。當選擇 忽略狀態複選框時,在評估斷言之前,響應狀態被強制爲 成功。

與在4XX和5XX範圍狀態HTTP響應通常視爲 不成功。 在執行進一步檢查之前,「忽略狀態」複選框可用於設置 狀態成功。注意,這 將清除所有以前的斷言失敗的影響,所以 確保此僅在第一個斷言設置。

+1

這正是我所需要的。我不想按照其他答案中的建議將響應更改爲確定...我想斷言響應是正確的錯誤(在我的情況下,404 Not Found)。那謝謝啦! – 2013-10-21 16:51:37

+0

完美。我需要檢查401。謝謝! – asokan 2014-07-10 18:11:17

+1

這應該是正確的答案 – Ruben 2016-06-21 06:39:28

-2

使用BeanShell的斷言,迫使HTTP取樣器通過,然後通過/失敗定期BeanShell的斷言語句,而不是:

if (ResponseCode.equals("500") == true) { 
    SampleResult.setResponseOK(); 

    /* the same is 
    SampleResult.setSuccessful(true); 
    SampleResult.setResponseCodeOK(); 
    SampleResult.setResponseMessageOK(); 
    */ 
} 
String path = SampleResult.getURL().getPath(); 
if (!path.contains("anerror")) { 
    Failure = true; 
    FailureMessage = "URL Path: didn't contain \"anerror\"" + 
     System.getProperty("line.separator") + "URL Path detected: " + path; 
} 
-1

添加一個「迴應聲明」的要求後,你想傳遞並勾選「忽略狀態」複選框。