TestNG - 如何在重新运行测试时仅输出一个Pass / Fail结果?

时间:2012-07-24 00:12:58

标签: java unit-testing testng reportng

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

  

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

我希望结果显示的是:

  

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

基本上,除非所有5次重播都失败,否则不要将其视为失败。我该怎么做呢?

2 个答案:

答案 0 :(得分: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);

不知道如果有效,但看起来我可以:)祝你好运

答案 1 :(得分: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);