结合testng实现用例失败重跑
2016-05-16 22:14
323 查看
我们在运行自动化测试用例的时候,经常会出现一些异常的情况的情况导致用例失败的问题。所以我们可能会希望对于失败的测试用例再重新运行一次,下来我们来看看结合testng如何使用这个功能
你需要在你的项目中添加如下两个类
添加完如上两个类以后,你需要在你的pom.xml文件里面添加对应的监听器
以下是测试代码,我们先设置失败的用例
运行的结果如下图所示
但是实际上这样子会有一个问题,那就是测试报告中的用例数会增多,可能就会出现,我们执行一条用例,但是这条用例先失败后成功后,结果会显示之行了2条测试用例,但是对我们来说更希望是只是一条,所以为了计算测试用例的的个数,我们需要创建一个TestListner.java的类实现ITestListener 的接口,如下所示:
在pom.xml里面添加对应的监听器后,运行结果如下图:
你需要在你的项目中添加如下两个类
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里面添加对应的监听器后,运行结果如下图:
相关文章推荐
- java的seek()函数
- 面试要回顾的知识
- Struts 2 入门
- 多线程-线程间通信-多生产者多消费者示例
- 按位异或 !
- JAVA第一步工作 classpath、path、JAVA_HOME的作用及JAVA环境变量配置等
- 小代码 F
- 你好哇,程序员 - me 跳槽经验说
- 201. Bitwise AND of Numbers Range
- 正则表达式大全
- 数据结构实验之链表七:单链表中重复元素的删除
- Unity 脚本生命周期流程图
- 设计模式之装饰者模式
- Intent
- Android Studio 魅族手机调试LogCat不显示解决方法
- TCP连接的建立与终止
- 338. Counting Bits
- JavaWEB中web.xml和servlet不得不说的秘密。
- 6个变态的C语言Hello World程序
- 大数据作业第三天