使用testng listener实现测试用例失败重跑功能
来源:互联网 发布:中国网络声优排行榜 编辑:程序博客网 时间:2024/05/22 03:19
我们通过重写testng的retry方法和transform方法来实现用例失败重跑的功能。
首先添加两个文件
TestngRetry.java
public class TestngRetry implements IRetryAnalyzer { private static Logger logger = Logger.getLogger(TestngRetry.class); private static int maxRetryCount = 3; private int retryCount = 1; @Override public boolean retry(ITestResult result) { if (retryCount <= maxRetryCount) { String message = "Running retry for '" + result.getName() + "' on class " + this.getClass().getName() + " Retrying " + retryCount + " times"; logger.info(message); Reporter.setCurrentTestResult(result); Reporter.log("RunCount=" + (retryCount + 1)); retryCount++; return true; } return false; }}
RetryListener.java
public class RetryListener implements IAnnotationTransformer { @Override public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { IRetryAnalyzer retry = annotation.getRetryAnalyzer(); if (retry == null) { annotation.setRetryAnalyzer(TestngRetry.class); } }}
添加以上两个文件之后,有两种方法可以使用我们的listener进行监听:
- 在Test标签中添加retryAnalyzer属性
@Test(retryAnalyzer = com.xxx.retry.RetryListener.class)
- 在testng.xml文件中配置listener
<test name="test1"> <listeners> <listener class-name="com.xxx.retry.RetryListener" /> <classes> <class name="com.xxx.test.NewTest" /> </classes></test>
做完上面的工作,我们就可以实现失败重跑的功能了。但是,每次用例重跑之后,每次失败的结果也记录在运行结果中了,测试结果中运行的用例数增加了,不利于我们查看测试结果。因此,我们还需要把重复的用例去掉。
这个我们通过重写TestListenerAdapter中的onFinish方法实现:
TestngListener.java
public class TestngListener extends TestListenerAdapter { private static Logger logger = Logger.getLogger(TestngListener.class); @Override public void onFinish(ITestContext testContext) { super.onFinish(testContext); // List of test results which we will delete later ArrayList<ITestResult> testsToBeRemoved = new ArrayList<ITestResult>(); // collect all id's from passed test Set<Integer> passedTestIds = new HashSet<Integer>(); for (ITestResult passedTest : testContext.getPassedTests() .getAllResults()) { logger.info("PassedTests = " + passedTest.getName()); passedTestIds.add(getId(passedTest)); } Set<Integer> failedTestIds = new HashSet<Integer>(); for (ITestResult failedTest : testContext.getFailedTests() .getAllResults()) { logger.info("failedTest = " + failedTest.getName()); int failedTestId = getId(failedTest); // if we saw this test as a failed test before we mark as to be // deleted // or delete this failed test if there is at least one passed // version if (failedTestIds.contains(failedTestId) || passedTestIds.contains(failedTestId)) { testsToBeRemoved.add(failedTest); } else { failedTestIds.add(failedTestId); } } // finally delete all tests that are marked for (Iterator<ITestResult> iterator = testContext.getFailedTests() .getAllResults().iterator(); iterator.hasNext();) { ITestResult testResult = iterator.next(); if (testsToBeRemoved.contains(testResult)) { logger.info("Remove repeat Fail Test: " + testResult.getName()); iterator.remove(); } } } private int getId(ITestResult result) { int id = result.getTestClass().getName().hashCode(); id = id + result.getMethod().getMethodName().hashCode(); id = id + (result.getParameters() != null ? Arrays.hashCode(result .getParameters()) : 0); return id; }}
把listener添加到testng.xml中,当前testng.xml为:
<test name="test1"> <listeners> <listener class-name="com.xxx.retry.RetryListener" /> <listener class-name="com.xxx.retry.TestngListener" /> </listeners> <classes> <class name="com.xxx.test.NewTest" /> </classes></test>
OK,结束。
1 0
- 使用testng listener实现测试用例失败重跑功能
- Webdriver+Testng实现测试用例失败自动截图功能
- Webdriver+Testng实现测试用例失败自动截图功能
- 结合testng实现用例失败重跑
- testng实现用例失败重跑[修改篇]
- TestNG监听器实现用例运行失败自动截图、重运行功能
- TestNG监听器实现用例运行失败自动截图、重运行功能
- TestNG监听器实现用例运行失败自动截图、重运行功能
- TestNG监听器实现用例运行失败自动截图、重运行功能
- TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能
- TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能
- TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能
- TestNG实现用例运行失败自动截图和重跑
- TestNG-使用Listener获取失败截图
- UI自动化测试系列之TestNG----失败用例自动重试功能
- UI自动化测试系列之TestNG----失败用例自动重试功能二
- 如何解决testng执行用例失败自动重跑问题
- !!!testng增加失败重跑机制
- A20平台增加camera
- [LeetCode][Java] Decode Ways
- 【Android】使用 SwipeRefreshLayout 实现下拉刷新
- 前言
- 杭电 HDU 1247 ACMHat’s Words(trie树 或着STL)
- 使用testng listener实现测试用例失败重跑功能
- 什么是事务的传播特性?
- LeetCodeOJ_168_Excel Sheet Column Title
- 选择排序(selection sort)
- Linux关机命令详解
- PAT (Advanced Level) 1011. World Cup Betting (20) 求最大期望值,简单题
- SharePoint 2013 开发——获取用户配置文件属性内容(User Profile)
- 记大二结束
- 数据结构二叉树