实际上已经多次询问与testng-failed.xml相关的问题,但我的问题没什么不同。我想一起运行所有失败的测试用例,所以我所做的就是在我的pom中,我通过了testng-failed.xml。
但我遇到的问题是首先运行testng.xml然后运行testng-failed.xml然后覆盖testng-failed.xml。因此,假设我第二次对我的测试用例进行了新的运行,运行了testng.xml,那么我的testng-failed.xml以前的测试用例都失败了,所以它运行以前失败的情况然后更新testng-failed.xml这次失败了。
我不知道要添加什么监听器来处理这个问题,每当我运行第一个testng.xml时应该运行,然后它应该覆盖testng-failed.xml然后运行testng-failed.xml。 我正在使用Maven,selenium,testng。
我刚刚在我的pom中输入了testng-failed.xml,如下所示。请告诉我使用哪个列表器
<suiteXmlFiles>
<suiteXmlFile>src/resources/testng/testng.xml</suiteXmlFile>
<suiteXmlFile>test-output/testng-failed.xml</suiteXmlFile>
</suiteXmlFiles>
答案 0 :(得分:0)
通过实现'IAnnotationTransformer'创建类'RetryListener'。
public class RetryListener implements IAnnotationTransformer {
@Override
public void transform(ITestAnnotation testannotation, Class testClass,
Constructor testConstructor, Method testMethod) {
IRetryAnalyzer retry = testannotation.getRetryAnalyzer();
if (retry == null) {
testannotation.setRetryAnalyzer(Retry.class);
}
}
}
现在创建另一个类。
public class Retry implements IRetryAnalyzer {
private int retryCount = 0;
private int maxRetryCount = 1;
// Below method returns 'true' if the test method has to be retried
else 'false'
//and it takes the 'Result' as parameter of the test method that just
ran
public boolean retry(ITestResult result) {
if (retryCount < maxRetryCount) {
System.out.println("Retrying test " + result.getName() + " with status "
+ getResultStatusName(result.getStatus()) + " for the " + (retryCount+1) + " time(s).");
retryCount++;
return true;
}
return false;
}
public String getResultStatusName(int status) {
String resultName = null;
if(status==1)
resultName = "SUCCESS";
if(status==2)
resultName = "FAILURE";
if(status==3)
resultName = "SKIP";
return resultName;
}
}
现在在testNG xml文件中添加以下行
<listeners>
<listener class-name="com.pack.test.RetryListener"/>
</listeners>
并且不要在pom.xml中传递Xml文件
希望它能起作用
由于
答案 1 :(得分:0)
为什么在同一个testng任务中运行testng xml并且测试xml失败。您必须分离构建任务,首先运行testng xml并生成失败的测试xml,然后生成另一个运行失败的测试xml的任务。它会工作。
答案 2 :(得分:0)
我实施了一次运行,只重新运行了三遍新失败的测试。
mvn $par1=$pSuiteXmlFile test > $test1log
mvn $par1=$failedRelPath test > $failed1log
mvn $par1=$failedRelPath test > $failed2log
mvn $par1=$failedRelPath test > $failed3log
它可以工作,但是测试用例数量少。我有一个包含300个测试的套件,并且在主要(第一次)运行之后,surefire / testng不会创建testng-failed.xml。当套件较小时,将根据需要创建testng-failed.xml。