2014-09-12 49 views
1

比方說,我有一個模擬一些用戶登錄和幾個更多操作的Jmeter測試。我也有'開始新的線程出現錯誤'打開。因此,如果某些用戶失敗 - 它只會讓另一個用戶繼續處理測試指定的時間。Jmeter中可能對線程故障執行某些操作嗎?

但我有一些定期調用授權用戶和模擬他們,我需要使用「線程間通信」和附加線程組(-s)。基本上,這在以下方式中工作正常 - 在主線程中,我登錄並填充一些具有所需cookie的FIFO隊列,並在另一個線程組中獲取該cookie。在另一個線程組中,我還檢查了另外一個FIFO隊列(在用戶註銷時填充),如果得到我需要的,停止該線程。

這裏的問題是主線程在登錄後失敗。在這種情況下,子線程將被永久執行,因爲該定期調用會保持會話活動。

而這個問題 - 是否有一些可能性讓Jmeter在線程失敗時執行一些操作(像finally塊一樣運行)。基本上我需要在註銷或線程故障時填寫第二個FIFO隊列

+0

不能使用IF控制器用JavaScript處理您所需的代碼登錄失敗後的處理加工。 – 2014-09-12 13:19:57

+0

沒有。因爲我不知道可能發生錯誤的確切位置。問題是登錄後我有很多請求,並且每個都可能失敗。 – 2014-09-12 14:01:49

回答

1

在與所有請求相同的級別添加Beanshell Assertion。它將適用於每個請求,如果發生故障,您將能夠滿足您的需求。

喜歡的東西:

  • 線程組
    • 登錄樣
    • 其他一些採樣
    • 一些其他採樣
    • 的BeanShell斷言

示例斷言的代碼:

if (!SampleResult.isSuccessful()){ 
    log.info("Test " + SampleResult.getSampleLabel() + " has failed"); 
    // handle the error 
} 

參見How to Use JMeter Assertions in 3 Easy Steps指南的詳細信息,JMeter Assertions

+0

謝謝,但這不起作用。我不確定這是一個功能還是問題,但在beanshell中使用的Jmeter函數總是執行,即使它們不可訪問{}塊,即使它們已被註釋。 所以有下面的BS斷言: 'if(Failure){$ {__ fifoPut(JSESSIONID,true)}; } print(「$ {__ fifoGet(JSESSIONID,)}」); ' 我會爲所有樣本打印'true'(如果它們沒有失敗,則無關緊要)。 – 2014-09-16 07:39:24

+0

'Failure'是指示斷言是否失敗的屬性,它默認爲'false'。如果你想檢查父採樣器是否失敗,你應該使用'SampleResult.isSuccessful()'而不是像我在上面的回答中提到的那樣 – 2014-09-16 08:16:52

+0

Failure或者SampleResult.isSuccessful()無關緊要,結果是相同的 - 函數總是執行 – 2014-09-16 08:47:55

0

我還必須註銷樣本錯誤,它需要try-catch-finally之類的東西。與條件${JMeterThread.last_sample_ok}IF Controller和下方勾選Evaluate for all children?,滿足我的清潔方式需要:

TestPlan 
    HTTP Cookie Manager 
    HTTP Request Defaults 
    ThreadGroup - (continue on error) 
      HTTP Request - login 
     IfController - (Evaluate ${JMeterThread.last_sample_ok} for all children) 
        HTTP Request 1 
        HTTP Request 2 
        .... 
        HTTP Request n 
      HTTP Request - logout (after and outside of IF) 
相關問題