您的位置:首页 > 其它

结合testng实现用例失败重跑

2016-05-16 22:14 323 查看
我们在运行自动化测试用例的时候,经常会出现一些异常的情况的情况导致用例失败的问题。所以我们可能会希望对于失败的测试用例再重新运行一次,下来我们来看看结合testng如何使用这个功能

你需要在你的项目中添加如下两个类

Retry.java

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

public class Retry implements IRetryAnalyzer {
private int retryCount         = 0;
private int maxRetryCount     = 2;   // retry a failed test 2 additional times

@Override
public boolean retry(ITestResult result) {
if (retryCount <maxRetryCount) {
retryCount++;
return true;
}
return false;
}
}


RetryListener.java

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.testng.IAnnotationTransformer;
import org.testng.IRetryAnalyzer;
import org.testng.annotations.ITestAnnotation;

public class RetryListener implements IAnnotationTransformer {
public void transform(ITestAnnotation annotation, Class testClass,
Constructor testConstructor, Method testMethod) {
IRetryAnalyzer retry = annotation.getRetryAnalyzer();
if (retry == null) {
annotation.setRetryAnalyzer(Retry.class);
}
}
}


添加完如上两个类以后,你需要在你的pom.xml文件里面添加对应的监听器

<properties>
<property>
<name>listener</name>
<value>com.auto.RetryListener</value>
</property>
</properties>


以下是测试代码,我们先设置失败的用例

public class myTest {
@Test
public void myTestCase() {
Assert.assertEquals(0,1,"出错了");
}
}


运行的结果如下图所示



但是实际上这样子会有一个问题,那就是测试报告中的用例数会增多,可能就会出现,我们执行一条用例,但是这条用例先失败后成功后,结果会显示之行了2条测试用例,但是对我们来说更希望是只是一条,所以为了计算测试用例的的个数,我们需要创建一个TestListner.java的类实现ITestListener 的接口,如下所示:

TestListener.java

import java.util.Iterator;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;

public class TestListener implements ITestListener {

@Override
public void onFinish(ITestContext context) {
Iterator<ITestResult> listOfFailedTests = context.getFailedTests().getAllResults().iterator();
while (listOfFailedTests.hasNext()) {
ITestResult failedTest = listOfFailedTests.next();
ITestNGMethod method = failedTest.getMethod();
if (context.getFailedTests().getResults(method).size() > 1) {
listOfFailedTests.remove();
} else {
if (context.getPassedTests().getResults(method).size() > 0) {
listOfFailedTests.remove();
}
}
}
}

// Following are all the method stubs that you do not have to implement

public void onTestStart(ITestResult result) {
// TODO Auto-generated method stub
}

public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
}

public void onTestFailure(ITestResult result) {
// TODO  Auto-generated method stub
}

public void onTestSkipped(ITestResult result) {
// TODO Auto-generated method stub
}

public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// TODO Auto-generated method stub
}

public void onStart(ITestContext context) {
// TODO Auto-generated method stub
}
}  // ends the class


在pom.xml里面添加对应的监听器后,运行结果如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: