我想重新运行一个测试类,包括它的@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