重新运行测试时如何只输出一个通过/失败结果?

问题描述 投票:0回答:2

我在 TestNG 中使用 IRetryAnalyzer 类来重新启动失败的测试(最多 5 次尝试)。现在,如果我运行一个测试,并且在通过之前失败了 3 次,它会说:

测试运行:4,失败:3,错误 0,跳过 0。

我想要显示的结果是:

测试运行:1,失败:0,错误 0,跳过 0。

基本上,我不希望它算作失败,除非它全部 5 次重新运行都失败了。我该怎么做?

java unit-testing testng reportng
2个回答
0
投票

既然没有人回复,我就试试吧。

只是我在阅读你的文章时的随机想法,同时我正在寻找解决我的问题的方法......

您可以通过

@AfterTest
ITestResult result

方法中获取测试结果
@AfterMethod
public void AfterMethod_CheckForFailure(ITestResult result, Method m)
当带有

@AfterMethod

 注释的方法完成时,会调用 
@Test
。 能够从具有
static
成员的
static
类中读取当前迭代 如果它
<5
那么使用

result.setStatus(ITestResult.SUCCESS); // or what ever status you want
setCurrentTestResult(result);

不知道这是否有效,但在我看来可以:)祝你好运


0
投票

我刚刚做了这件事,我是如何做到的,我考虑了上次成功之前的一切。我这样做是为了允许重新运行 3 次,这是我使用的代码:

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.Reporter;

public class RetryAnalyzer implements IRetryAnalyzer {
  private int count = 0;
  private int maxCount = 2;

  @Override
  public boolean retry(ITestResult result) {
    if (!result.isSuccess()) {
      if (count < maxCount) {
        count++;
        result.setStatus(ITestResult.SUCCESS);
        String message = Thread.currentThread().getName() + ": Error in " + result.getName() + " Retrying "
            + (maxCount + 1 - count) + " more times";
        System.out.println(message);
        Reporter.log(message);
        return true;
      } else {
        result.setStatus(ITestResult.FAILURE);
      }
    }
    return false;
  }
}

这里的关键是当我还在重试时,我将结果设置为成功

result.setStatus(ITestResult.SUCCESS)

当尝试完成后仍然失败,则将其设置为失败

result.setStatus(ITestResult.FAILURE);
© www.soinside.com 2019 - 2024. All rights reserved.