testng dataprovider和iretrylistener数据问题

时间:2015-11-22 23:09:37

标签: testng testng-dataprovider

当我使用新的测试数据(而不是来自dataprovider的原始数据)重试失败的测试时,我遇到了一个问题。如果我错过了适当的现有主题,请随时指出我的正确方法。

我发现在测试方法失败的情况下也会重试dataprovider方法。我怎样才能重新运行测试方法(使用原始测试数据)?

提前感谢您的帮助。

以下是我的代码的一些部分:

测试类:

@Listeners({RetryTestListener.class})
public class MyClassTest extends FunctionalTest {

private boolean counter = true;

@BeforeTest(alwaysRun = true)
public void beforeTest(ITestContext context) {
    for (ITestNGMethod method : context.getAllTestMethods()) {                             
                            if(Arrays.asList(method.getGroups()).contains("expectedDataFromUpstream"))      {
        method.setRetryAnalyzer(new MyClassTest());
    }
}
 }

 @Test(enabled = true, groups = {"expectedDataFromUpstream"},      dataProviderClass =  dataProvider="dataProvider")
 public void testWithRerun(boolean flag1, boolean flag2) {        
      if(counter) {
         counter = false;
         stepHelper().assertThat("Fail result", true,   Matchers.equalTo(false));
      } else {
          counter = true;
          stepHelper().assertThat("Pass result", true, Matchers.equalTo(true));
    }
 }    
 @DataProvider(name="dataProvider")
 public Object[][] dataProvider(Method method) {
      return new Object[][] { { getRandomBoolean(), getRandomBoolean() }, { getRandomBoolean(), getRandomBoolean() }, { getRandomBoolean(), getRandomBoolean() }};
 }

 public boolean getRandomBoolean() {
      return Math.random() < 0.5;
 }   
}

RetryTestListener:

 public class RetryTestListener extends TestListenerAdapter {

 @Override
 public void onTestSuccess(ITestResult result) {
     if (result.getMethod().getRetryAnalyzer() != null) {
    FunctionalTest retryAnalyzer = (FunctionalTest)result.getMethod().getRetryAnalyzer();
    retryAnalyzer.setDefaultCurrentCounterValue();
     }
 }

 @Override
 public void onTestFailure(ITestResult result) {
     if (result.getMethod().getRetryAnalyzer() != null) {
    FunctionalTest retryAnalyzer = (FunctionalTest)result.getMethod().getRetryAnalyzer();

    if(retryAnalyzer.isRetryAvailable()) {
        result.setStatus(ITestResult.SKIP);
    } else {
        result.setStatus(ITestResult.FAILURE);
    }
    Reporter.setCurrentTestResult(result);
 }
 }
 }

IRetryAnalyzer:

 public abstract class FunctionalTest extends BaseFunctionalTest implements IRetryAnalyzer {

 private static int currentCounterValue = 1;

 public boolean isRetryAvailable() {
     return currentCounterValue % 2 != 0;
 }

 public void setDefaultCurrentCounterValue() {
     currentCounterValue = 1;
 }

 @Override
 public boolean retry(ITestResult result) {
     if (isRetryAvailable()) {
          currentCounterValue++;
          return true;
     }
     setDefaultCurrentCounterValue();
     return false;
 }

 .....
 }

1 个答案:

答案 0 :(得分:0)

团队已经知道这个问题: https://github.com/cbeust/testng/issues/891