2016-05-04 50 views
1

我試圖在我的@AfterMethod中檢測跳過的測試以進行報告。在@afterMethod中檢測跳過的測試與testng

我可以捕獲失敗或通過測試,但似乎沒有在跳過測試時輸入它。

我的測試:

@Test 
public void method1() { 
    Assert.fail("created failure"); 
} 
@Test (dependsOnMethods = {"method1"}) 
public void method2() {} 

我AfterMethod:

@AfterMethod 
protected void afterMethod(ITestResult result){ 
    switch (result.getStatus()) { 
     case ITestResult.FAILURE: 
      ... 
      break; 

     case ITestResult.SKIP: 
      ... 
      break; 

     case ITestResult.SUCCESS: 
      ... 
      break; 
    } 

例如在這裏,我只檢索失敗,而是跳過不會在傳遞方法

任何想法後怎麼做 ?

謝謝!

+0

嘗試實施一個'TestListener',應該有所幫助。 – nullpointer

回答

0

testng中,如果跳過測試用例,則不會調用@AfterMethod,因爲測試用例尚未執行。 @AfterMethod只有在執行測試用例時纔會執行。

希望這會有所幫助。

+0

-1。 '@AfterMethod(alwaysRun = true)',然後是方法將運行。當你想讓@AfterMethod運行來做一些清理時,有很多情況。它就像Java的'finally'塊 – Andrejs

0

kartik是正確的,你不能通過方法得到它,但在報告中,你會發現跳過的測試用例。

但如果u想跳過的測試案例,U可以在這裏添加軟dependacies這樣的:@Test(alwaysRun = TRUE,dependsOnMethods = { 「方法」})

這將創建一個柔軟的依賴性,即應該執行帶註釋的測試,即使它依賴於的測試失敗/拋出異常,它將在after方法中調用。

1

我發現通過實現ITestListener類做這件事的方式,你可以發現有一個例子:

https://github.com/khmarbaise/testng-example/blob/41861115eb0ea1d98eed97fcfeb7ff30e93e0925/src/test/java/com/soebes/testing/testng/IntegrationTestListener.java

基本上你要做的就是創建一個類,將捕獲所有ITestResult甚至跳過一個什麼和裏面重新定義你想去做什麼:

public class IntegrationTestListener implements ITestListener { 
    public void onTestSkipped(ITestResult result) { 
     // do your stuff here 
    } 
} 

並在測試使用它那樣做:

@Listeners ({IntegrationTestListener.class}) 
public class NotAScenario extends BasicScenario { 

    @Test 
    public void test1() { 
    } 
} 
0

對於@AfterMethod,當我們知道測試肯定已經運行(因此不ITestResult.STARTED),有一個簡單的解決方案(經測試,它的工作原理):

@AfterMethod(alwaysRun = true) 
public void doStuff(ITestResult result){ 

    Integer status = result.getStatus(); 

    if(!status.equals(ITestResult.SUCCESS) || !status.equals(ITestResult.FAILURE)) { 
      // do stuff 
    }  
} 

一些更清潔不想執行的情況ITestListener的所有方法