【发布时间】:2017-08-05 21:30:58
【问题描述】:
我正在使用 dataprovider 方法和一个测试方法(在测试方法中带有 ITestContext 参数)。一个简化的例子如下:
@DataProvider(name="Dataprovider")
public Object[][] dataprovider(){
return new Object[][]{{1},{2,},{3}};
}
@Test(dataProvider="Dataprovider")
public void test(int data, ITestContext itx){
System.out.println(data);
org.testng.Assert.assertEquals(data, 3);
}
我的 Retry 类和 RetryListener 类如下:
public class RetryListener implements IAnnotationTransformer {
@Override
public void transform(ITestAnnotation testannotation, Class testClass,
Constructor testConstructor, Method testMethod) {
IRetryAnalyzer retry = testannotation.getRetryAnalyzer();
if (retry == null) {
testannotation.setRetryAnalyzer(Retry.class);
}
}
}
public class Retry implements IRetryAnalyzer {
private static int retryCount = 0;
private int maxRetryCount = 1;
// Below method returns 'true' if the test method has to be retried else 'false'
//and it takes the 'Result' as parameter of the test method that just ran
public boolean retry(ITestResult result) {
if (retryCount < maxRetryCount) {
System.out.println("Retrying test " + result.getName() + " with status "
+ getResultStatusName(result.getStatus()) + " for the " + (retryCount+1) + " time(s).");
retryCount++;
return true;
}
retryCount = 0;
return false;
}
public String getResultStatusName(int status) {
String resultName = null;
if(status==1)
resultName = "SUCCESS";
if(status==2)
resultName = "FAILURE";
if(status==3)
resultName = "SKIP";
return resultName;
}
}
预期:当测试失败时,TestNG调用重试,然后数据提供者应该返回相同的值给测试方法。
已观察到:Dataprovider 返回相同的值,但测试方法未运行,重试终止并开始下一个测试(dataprovider 现在将返回新值)
但是我的重试没有进入测试方法(它不期望 (int data, ITestContext itx) 用于测试方法)。如果我删除 ITestContext,则重试有效。
ITestContext 是维护测试用例上下文的必要条件。那么如何执行重试以及将 ITestContext 保留在测试方法中。
【问题讨论】:
-
"我的重试没有进入测试方法"->什么意思?
-
当retry被调用时,数据提供者被再次调用以相同的值返回到测试方法,这次它不运行测试方法,测试只是通过(重试通过)和进入下一个测试
-
由于附加参数
ITestContext itx,目前无法编译。 -
@GrzegorzGórkiewicz 你的意思是,它不会“运行”正确吗?
-
好的,所以没有办法做到这一点吗?我必须删除 ITestContext 才能运行测试方法,是吗?
标签: java testing automation testng