Testng 当测试类失败时,是否仍然需要重新运行它
当某个测试类的Testng 当测试类失败时,是否仍然需要重新运行它,testng,Testng,当某个测试类的@test失败时,我想重新运行一个测试类,包括它的@beforethod。我已经实现了TestNG重试逻辑来重新运行失败的测试用例,但我想运行整个类。请看一看:所有失败的测试都包含在单独的xml套件中,可以重新运行 <suite name="allSuites"> <suite-files> <suite-file path="yourSuite.xml" /> <suite-file path="testng-fail
@test
失败时,我想重新运行一个测试类,包括它的@beforethod
。我已经实现了TestNG重试逻辑来重新运行失败的测试用例,但我想运行整个类。请看一看:所有失败的测试都包含在单独的xml套件中,可以重新运行
<suite name="allSuites">
<suite-files>
<suite-file path="yourSuite.xml" />
<suite-file path="testng-failed.xml" />
...
</suite-files>
</suite>
...
这样做是可能的。
为此,您需要在testng.xml中将org.testng.ITestListener的实现注册为侦听器
<listeners>
<listener class-name="com.xyar.OnTestFailureClass" />
</listeners
小心您必须有充分的理由重新运行测试。当您确信第二次迭代将获得成功时,必须重新运行测试。 如果不是这样,那么您将进入一个无限循环,其中失败的测试将继续执行并失败 此外,如果不考虑测试结果,只想运行n次测试用例,那么必须在
onTestFailure
方法中为计数器构建逻辑
------------------------------------更新----------------------
发现了一个更优雅的解决方案
实现IRetryAnalyzer接口。Testing提供此接口的目的是为了重试失败的测试。它提供了必须重试的次数
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;
}
}
但是,为了避免将此属性添加到所有测试方法中
采取本链接引用的以下方法
''
这将有望为您提供testng-results.xml报告。您不应该手动运行,您可以有一个套件,由多个套件组成。请查看更新的答案。另一种方法是创建一个将执行的bat文件:
java org.testng.testng yourSuite.xml
,然后java org.testng.testng testng failed.xml
在这种情况下,testng failed.xml
将在实际套件完成后立即创建和启动,并再次运行失败的类但我在这里遇到的唯一问题是,它不会为重新执行的类创建任何类似testng-result.xml的xml格式的报告。由于这个原因,我的詹金斯构建失败了。
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)
@BeforeSuite(alwaysRun = true)
public void beforeSuite(ITestContext context) {
for (ITestNGMethod method : context.getAllTestMethods()) {
method.setRetryAnalyzer(new RetryAnalyzerImpl());
}
}