在运行并运行较旧的失败测试用例之前,testng_failed.xml不会刷新

时间:2015-08-19 06:51:39

标签: maven testing selenium-webdriver testng

实际上已经多次询问与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>

3 个答案:

答案 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。