首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TestNG -如何在套件完成后重新运行失败的测试

TestNG -如何在套件完成后重新运行失败的测试
EN

Stack Overflow用户
提问于 2019-10-09 20:12:40
回答 1查看 967关注 0票数 0

在TestNG中完成套件后,如何重新运行失败的测试。使用RetryAnalyzer,我可以在失败的测试用例之后立即重新运行失败的测试用例,而不是在套件完成之后。

我之所以需要这样做的原因是:我的测试用例在20+线程上并行运行,我的一些测试系统在这个负载上表现不佳,所以之后立即重试并没有太大帮助。

但是我们通过重新运行testNG-failed.xml来重试失败的测试用例,这些用例通过了。目前,我们正在重新运行testNG-failed.xml,但它为我们创建了2个报告和许多其他问题。我们可以在不重新运行testNG-failed.xml的情况下,通过RetryAnalyzer或testNG中的任何其他方式来实现类似的功能吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-22 22:04:20

您可以创建在测试套件运行后显示失败测试用例的suiteListener,如下所示,以获取所有上下文的所有失败测试用例

代码语言:javascript
运行
复制
public class suiteListener implements ISuiteListener {


    @Override
public void onStart(ISuite suite) {

}

     @Override
        public void onFinish(ISuite suite) {

              System.out.println("suite finished");
            final Map<java.lang.String,ISuiteResult>  res = suite.getResults()       
                    for (ISuiteResult r : res.values()) {
                             context =  r.getTestContext()  ;           
                    Iterator<ITestResult> failedTestCases =context.getFailedTests().getAllResults().iterator();
                    while (failedTestCases.hasNext()) {
                     System.out.println("failedTestCases...");
                     ITestResult failedTestCase = failedTestCases.next();
                     ITestNGMethod method = failedTestCase.getMethod();
                    java.lang.String testName =    failedTestCase.getName();

                       System.out.println("failed method.."+ method);   
                       System.out.println("failed testName.."+ testName);   
                    }
                }

}

并将侦听器附加到testng.xml文件

代码语言:javascript
运行
复制
<listeners>
      <listener class-name ="firsttestngpackage.suiteListener" />
 </listeners>

然后,您可以通过创建一个虚拟类,简单地利用this方法以编程方式运行测试

使用IAlterSuiteListener修改套件,并在您的testng.xml中添加侦听器

代码语言:javascript
运行
复制
import org.testng.IAlterSuiteListener;
import org.testng.xml.XmlPackage;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;

import java.util.Collections;
import java.util.List;

public class SimpleSuiteAlterer implements IAlterSuiteListener {
    @Override
    public void alter(List suites) {
        XmlSuite suite = suites.get(0);
        XmlTest xmlTest = new XmlTest(suite);
        xmlTest.setName("test123");

         XmlClass xmlClass = new XmlClass("yourClass");
        List<XmlInclude> includeMethods = new ArrayList<>();
        includeMethods.add(new XmlInclude("your_method1"));
         includeMethods.add(new XmlInclude("your_method2"));

         //add more methods dynamically from your other listener

         xmlClass.setIncludeMethods(includeMethods);
         xmlTest.setXmlClasses(classes) ;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58303887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档