2014-05-21 275 views
0

我已經通過TestNG將一個複雜的UI測試框架添加到我們不擁有的大型企業應用程序中(我們是用戶)。TestNG故障不是故障

測試框架解析適合使用查詢生成器進行測試的系統中的數據;有時候這些數據已經過時,並且會拋出預期的異常。這些例外意味着測試不能完成,但並未真正失敗。

我正在尋找一種方法來中止個別測試而不是失敗。這個測試每次構建都會執行6次,但我並不擔心是否每次構建都會中止1-2次,但是需要消除當前標記爲失敗的異常終止;除了導致他們通過,還有其他的選擇,這似乎是一個不好的選擇?

+0

嘗試這種情況:http://konigsberg.blogspot.co.il/2007/11/testng-and-expectedexceptions-ive.html @Test(expectedExceptions = PlaneFullException.class) –

+0

@ran我不相信預期異常是有效的,因爲它們需要它發生,我只是想在它們確實發生時使其保持安靜(10-20%的時間)。 – Syntax

回答

1

兩個更多的選擇:)這將有助於標記測試爲要跳過的,而不是失敗或通過

  1. 清楚你預期的異常,並從@Test方法拋出SkipException 或者
  2. 實施IInvokedMethodListener並在afterInvocation方法 這樣做

    公共無效afterInvocation(IInvokedMethod方法,ITestResult的TestResult){

    if(testResult.getThrowable().getClass().equals(YourExceptionClass.class)) 
        testResult.setStatus(TestResult.SKIP); 
    

    }

+0

完美的工作,這正是我所追求的! – Syntax

0

當然。您可以選擇跳過失敗的測試或將其忽略掉。

爲此,您將需要一個實現IMethodInterceptor的類。

我不能粘貼我使用的原因是顯而易見的任何代碼,但在這裏,看看關於如何使用IMethodInterceptor一個例子:https://gist.github.com/krmahadevan/5028960

你沒有你的問題提了,但如果你正在使用Jenkins,那麼你可以傳遞參數給構建,然後可以用它來過濾你試圖跳過/忽略的測試。

+0

不幸的是,IMethodInterceptor並不合適,因爲它要求你知道什麼將會失敗。在線執行的測試的關鍵部分是查詢來自現有實際生產數據的測試數據。因此,如果數據失敗(依賴於數據失敗)不會真正指示測試失敗,而只是無法正確運行測試解決的數據,那麼直到測試實例運行時我們才能知道。 – Syntax

0

使用try-catch來處理測試類中可接受的異常。如果您發現異常並且沒有任何失敗的斷言,測試將通過。

+0

我正在追逐第三條通過/失敗的路線,讓我注意到它沒有像預期那樣運行,但沒有顯示爲失敗;我認爲你的建議可能是我唯一的選擇,儘管 – Syntax