我想重新運行一個測試類,包括它的@BeforeMethod
,其中任何一個@Test
都失敗。我已經實現了TestNG重試邏輯來重新運行失敗的測試用例,但我想運行整個類。有沒有辦法在失敗時重新運行測試類
回答
有可能這樣做。 爲此,您需要的testng.xml註冊org.testng.ITestListener的實現作爲一名聽衆
<listeners>
<listener class-name="com.xyar.OnTestFailureClass" />
</listeners
OnTestFailureClass
必須實現org.testng.ITestListener
。
實現onTestFailure如下:
public void onTestFailure(ITestResult result) {
XmlSuite suite = new XmlSuite();
suite.setName("rerunFailedTestClasses");
XmlTest test = new XmlTest(suite);
test.setName(result.getTestName());
List<XmlClass> classes = new ArrayList<XmlClass>();
classes.add(result.getTestClass().getXmlClass());
test.setXmlClasses(classes) ;
List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(suite);
TestNG tng = new TestNG();
tng.setXmlSuites(suites);
tng.run();
}
注意
你必須有一個很好的理由來重新運行測試。當你確定第二次迭代會成功時,必須重新開始測試。 如果情況並非如此,那麼您將進入無限循環,其中失敗的測試將繼續執行並失敗。另外,如果你想只運行一個測試用例n次,而不考慮測試結果,那麼你將不得不在onTestFailure
方法中建立一個計數器的邏輯。
----------------------------- UPDATE --------------- ---------------------
發現了一個更優雅的解決方案 實現IRetryAnalyzer界面。 TestNG專門提供此接口用於重試失敗的測試。它提供了重試必須完成的次數。
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class RetryAnalyzerImpl implements IRetryAnalyzer{
private int retryCount = 0;
private int maxRetryCount = 3;
public boolean retry(ITestResult result) {
if(retryCount < maxRetryCount)
{
retryCount++;
return true;
}
return false;
}
}
,你需要使用以下注釋
@Test(retryAnalyzer=Retry.class)
但是,爲了避免增加該屬性的所有測試方法 採取以下的辦法,是通過這個鏈接 「TestNG retryAnalyzer only works when defined in methods @Test, does not work in class' @Test」
簡稱@BeforeSuite(alwaysRun = true)
public void beforeSuite(ITestContext context) {
for (ITestNGMethod method : context.getAllTestMethods()) {
method.setRetryAnalyzer(new RetryAnalyzerImpl());
}
}
這應該有希望爲您提供t estng-results.xml報告。
請看看:http://testng.org/doc/documentation-main.html#rerunning所有失敗的測試都包含在單獨的xml套件中,可以重新運行。
<suite name="allSuites">
<suite-files>
<suite-file path="yourSuite.xml" />
<suite-file path="testng-failed.xml" />
...
</suite-files>
</suite>
你不應該手動運行,你可以有一個套件,由幾個套件組成。請查看最新的答案。 – 2014-09-11 08:33:09
另一種方法是使用bat文件執行:'java org.testng.TestNG yourSuite.xml'然後 'java org.testng.TestNG testng-failed.xml'在這種情況下'testng-failed.xml'將肯定創建並在實際套件完成後立即開始 – 2014-09-11 08:53:41
- 1. 有沒有辦法同時運行C++單元測試測試?
- 2. 有沒有辦法使未定義的測試更新測試失敗?
- 3. 有沒有辦法在Netty泄漏檢測時失敗自動化測試?
- 4. 只有在以前的測試沒有失敗時才運行測試
- 5. 自動重新運行測試失敗
- 6. 有沒有辦法同時運行Bamboo測試?
- 7. 如何重新運行只有失敗的竹子測試?
- 8. 有沒有辦法檢測何時加載磁貼失敗?
- 9. 有沒有辦法取消在Selenium Grid中運行測試?
- 10. 有沒有辦法在遠程主機上運行Selenium測試?
- 11. 有沒有辦法在Kubernetes的e2e測試中運行單個測試?
- 12. 如何重新運行失敗的測試Python Webdriver測試?
- 13. 有沒有辦法在Plone中重新運行升級步驟?
- 14. 如果一次測試沒有失敗,則運行所有測試
- 15. 有沒有辦法在運行時訪問調試符號?
- 16. 有沒有辦法在運行泄漏時調試(iPhone)?
- 17. 有沒有辦法用Selenium Webdriver運行Jasmine 2測試?
- 18. 有沒有辦法'測試運行'螞蟻構建?
- 19. 有沒有辦法使用Gallio運行MS測試?
- 20. 有沒有辦法爲JUnit測試用例運行MySQL內存?
- 21. 重新運行失敗和未運行測試
- 22. 有沒有辦法在PHPUnit中關閉「停止失敗/錯誤」特定測試?
- 23. 只有在運行PhantomJS時獲取失敗的測試(TypeError)
- 24. ,有沒有辦法在運行時確定類的成員?
- 25. 有沒有辦法強制類在運行時加載
- 26. 有沒有辦法在運行時獲取類的字節碼?
- 27. 有沒有辦法在運行時加載類jar和包?
- 28. 其運行沒有失敗
- 29. 有沒有辦法使IE6在遇到'>'時優雅失敗?
- 30. 如果沒有測試運行,失敗SonarQube質量門
是的,它工作並再次運行失敗的類,但只有我遇到的問題,它不會創建類似testng-result.xml的任何類似於重新執行的類的報告。由於這個,我的詹金斯生成失敗。 – 2014-09-12 09:54:40