2015-11-22 48 views
0

我遇到了一个问题,当我的失败测试正在使用新的测试数据(不是来自dataprovider的原始数据)重试。如果我错过了适当的现有话题,请随时指点我。testng dataprovider和iretrylistener数据问题

我发现数据提供者方法正在重试也在测试方法失败的情况下。我怎样才能重新运行测试方法(与原始测试数据)?

在此先感谢您的帮助。

这里是我的代码的某些部分:

测试类:

@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; 
} 

..... 
} 

回答