首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在测试类失败时重新运行它?

有没有办法在测试类失败时重新运行它?
EN

Stack Overflow用户
提问于 2014-09-11 15:00:41
回答 2查看 13.5K关注 0票数 7

当任何一个@BeforeMethod失败时,我想重新运行一个测试类,包括它的@Test。我已经实现了TestNG重试逻辑来重新运行失败的测试用例,但我想运行整个类。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 21:17:47

这样做是可能的。为此,您需要在testNg.xml中将org.testng.ITestListener的实现注册为侦听器

代码语言:javascript
复制
<listeners> 
    <listener class-name="com.xyar.OnTestFailureClass" />
</listeners

OnTestFailureClass必须实现org.testng.ITestListener

按如下方式实现onTestFailure:

代码语言:javascript
复制
  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提供,专门用于重试失败的测试。它提供了必须进行重试的次数。

代码语言:javascript
复制
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; 
     } 
 } 

您需要使用以下注释

代码语言:javascript
复制
 @Test(retryAnalyzer=Retry.class)

但是,为了避免将此属性添加到您的所有测试方法中,请使用此链接“”引用的以下方法。

代码语言:javascript
复制
  @BeforeSuite(alwaysRun = true)
  public void beforeSuite(ITestContext context) {
      for (ITestNGMethod method : context.getAllTestMethods()) {
          method.setRetryAnalyzer(new RetryAnalyzerImpl());
      }
  }

这将有望为您提供testng- report ts.xml报告。

票数 16
EN

Stack Overflow用户

发布于 2014-09-11 15:53:33

请看一下:http://testng.org/doc/documentation-main.html#rerunning所有失败的测试都包含在单独的xml套件中,可以重新运行。

代码语言:javascript
复制
<suite name="allSuites">
  <suite-files>
    <suite-file path="yourSuite.xml" />
    <suite-file path="testng-failed.xml" />
    ...
  </suite-files>
</suite>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25781098

复制
相关文章

相似问题

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