testng增加失败重跑机制
注: 以下内容引自 http://www.yeetrack.com/?p=1015
testng增加失败重跑机制
使用Testng框架搭建自动测试框架,经常会需要增加失败自动截图,以及失败重跑功能,一般有两种方式,①修改testng的源码;②使用testng的listener。修改testng源码的方式不推荐;第二种方法,网易qa的一片文章介绍的比较全了,直接转过来,http://qa.blog.163.com/blog/static/19014700220138585422735/,不过解决失败重跑的case计入总case数的问题,代码写得较繁琐,修改了下。
自动截图功能
1、新建一个Java类继承TestListenerAdapter
2、重写onTestFailure、onTestSkipped等方法,在这些方法中加入截图操作
3、在testng.xml文件中配置自己编写的监听器类
<listeners> <listener class-name=“***.testng.TestngListener” /> </listeners>
public class TestngListener extends TestListenerAdapter { private static Logger logger =Logger.getLogger(TestngListener.class); public static final String CONFIG = “config.properties”;@Override public void onTestFailure(ITestResult tr) { super.onTestFailure(tr); logger.info(tr.getName() +” Failure”); takeScreenShot(tr); } @Override public void onTestSkipped(ITestResult tr) {super.onTestSkipped(tr); logger.info(tr.getName() + ” Skipped”); takeScreenShot(tr); } @Override publicvoid onTestSuccess(ITestResult tr) { super.onTestSuccess(tr); logger.info(tr.getName() + ” Success”); }@Override public void onTestStart(ITestResult tr) { super.onTestStart(tr); logger.info(tr.getName() + ” Start”); } @Override public void onFinish(ITestContext testContext) { super.onFinish(testContext); } /** * 自动截图,保存图片到本地以及html结果文件中 * * @param tr */ private voidtakeScreenShot(ITestResult tr) { SimpleDateFormat formatter = newSimpleDateFormat(“yyyy_MM_dd_HH_mm_ss”); String mDateTime = formatter.format(new Date());String fileName = mDateTime + “_” + tr.getName(); String filePath =OrangeiOS.driver.getScreenshotAs(fileName); Reporter.setCurrentTestResult(tr);Reporter.log(filePath); //这里实现把图片链接直接输出到结果文件中,通过邮件发送结果则可以直接显示图片 Reporter.log(“<img src=\”../” + filePath + “\”/>”); }
失败自动重跑功能
1、新建Java类实现IRetryAnalyzer接口 public class TestngRetry implements IRetryAnalyzer { privatestatic Logger logger = Logger.getLogger(TestngRetry.class); private int retryCount = 1; private static intmaxRetryCount; private static ConfigReader config; static { //外围文件配置最大运行次数 config = newConfigReader(TestngListener.CONFIG); maxRetryCount = config.getMaxRunCount();logger.info(“maxRunCount=” + (maxRetryCount)); } @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; } }
2、新建Java类实现IAnnotationTransformer接口 public class RetryListener implementsIAnnotationTransformer { @Override public void transform(ITestAnnotation annotation, Class testClass,Constructor testConstructor, Method testMethod) { IRetryAnalyzer retry =annotation.getRetryAnalyzer(); if (retry == null) { annotation.setRetryAnalyzer(TestngRetry.class); } } }
3、在build.xml或者testng.xml文件中添加RetryListener监听器 上面三步就可以实现失败自动重跑了,是不是比较方便,不过添加了重跑功能后会发现测试结果的邮件中用例的个数增加了,比如我只有一个用例,失败重跑了2次,一共运行3次,测试结果中显示的用例个数会是3个,那接下来就需要解决这个问题了。
首先解决TestNg生成的index.html文件中个数不对的问题,这个问题只需要在Testng监听器的onFinish方法中,等所有用例运行完之 后,检查用例,按照class+method+dataprodiver的名称生成hashcode获取唯一id,如果fail的用例中存在重复的则在 fail的用例中剔除掉,具体代码如下:这个网易qa的那篇文章写得比较繁琐,参考另一篇 http://martinholladay.wordpress.com/2013/11/16/testng-adjusting-test-counts-on-retry/ @Override public void onFinish(ITestContext iTestContext) { Iterator<ITestResult> listOfFailedTests = iTestContext.getFailedTests().getAllResults().iterator(); while (listOfFailedTests.hasNext()) { ITestResult failedTest = listOfFailedTests.next(); ITestNGMethod method = failedTest.getMethod(); if (iTestContext.getFailedTests().getResults(method).size() > 1) { listOfFailedTests.remove(); } else { if (iTestContext.getPassedTests().getResults(method).size() > 0) { listOfFailedTests.remove(); } } } }
在testng的xml中加入
<listener class-name="com.autonavi.traffic.test.TestngListener" />
当前失败重跑也存在一些小问题:
1、setup中出现的错误直接是skip的,不会重跑
2、如果存在dataprodiver,则第二组数据以后的用例是不会重跑的
3、testng自带生成的emailable-report.html文件中用例的个数也不对了,这个问题可以自行修改EmailableReporter.java文件
如何修改自定义emailable-report.html emailable-report.html是Testng运行完成后自动生成的,经常运行结束后我们会把这个文件作为邮件正文发送给收件人,如果我们要修改这个文件内容怎么办呢?
1、首先emailable-report.html文件的生成TestNG是实现了IReporter接口,那我们可以直接从源代码中取出这个文件源代码 https://github.com/cbeust/testng/blob/master/src/main/java/org/testng/reporters/EmailableReporter.java2、针对源代码进行自己修改
3、把修改后的源代码加入自己的工程
4、在build.xml文件中新增自定义的监听器,运行时就会调用自定义的监听器生成想要的html文件了 <testng outputDir=“test-output” classpathref=“http://qa.blog.163.com/blog/runpath” haltonfailure=“false”listeners=“com.****.CustomerEmailableReport” > <xmlfileset dir=“.” includes=“${testngxml}.xml” /></testng>
转载请保留链接地址: http://www.yeetrack.com/?p=1015
testng增加失败重跑机制的更多相关文章
- TestNg失败重跑—解决使用 dataProvider 参数化用例次数冲突问题
问题背景 在使用 testng 执行 UI 自动化用例时,由于 UI自动化的不稳定性,我们在测试的时候,往往会加上失败重跑机制.在不使用 @DataProvider 提供用例参数化时,是不会有什么问题 ...
- testNG-失败用例重跑机制
下面简单介绍下testNG的失败重跑的实现方法: 1.首先编写一个类,实现IRetryAnalyzer类,重写其中的retry方法. public class TestNGRetry implemen ...
- pytest失败重跑
一.说明 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例 ...
- testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...
- testng失败重跑
重跑失败场景 1.要添加两个文件 背景:因为这里只是想单独展示失败的重跑的案例,所以先暂时把app这块的运行注释掉,只跑一个简单的demo,就一个简单类,类中就3个测试方法,失败重跑的原理是,运行方法 ...
- 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)
使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...
- python3 unittest框架失败重跑加截图支持python2,python3
github源码地址下载:https://github.com/GoverSky/HTMLTestRunner_cn.git 解压文件后取出/HTMLTestRunner_cn.py文件丢进C:\Py ...
- RF实现多次失败重跑结果合并的基础方法和优化方法
实现思路:通过分次执行失败案例重跑,然后通过结果文件合并命令实现多次失败重跑结果文件的合并,并输出合并后的log和report文件: 说明:具体失败案例重跑命令和结果文件合并命令请参考本博客其他相关章 ...
- pytest 失败重跑截图
1.环境准备 /*@param: 作者:流浪的python Date:2019/01/19 env:python 3.7(由于3.0-3.5以下部分pytest可能有部分兼容问题安装建议2.7-2.9 ...
随机推荐
- C# 将PDF转为SVG的3种情况
PDF格式的文档广泛用于各种办公场所,在工作中难免会有将PDF文档转换为其他文档格式的需要.在本篇文档中,将介绍PDF转为SVG的方法.根据不同的转换需求,这里分三种情况进行讲述,即转PDF所有页为S ...
- Jmeter(二十五)_Xpath关联
在Jmeter中,除了正则表达式可以用作关联,还有一种方式也可以做关联,那就是 XPath Extractor.它是利用xpath提取出关键信息,传递变量. 具体用法 添加一个后置处理器-XPath ...
- 记一次线上coredump事故
1.事故背景 上周三凌晨,我负责的某个模块在多台机器上连续发生coredump,幸好发生在业务低峰期,而且该模块提供的功能也不是核心流程功能,所以对线上业务影响比较小.发生coredump后,运维收到 ...
- JQuery系统梳理
JQuery在前端网页开发中可以说是非常常用了,它所拥有的强大功能足以让我们完成各式各样的效果. 一.JQuery基础语法 1. 使用JQuery必须先导入jquery.x.x.x.js文件: 2. ...
- Group Anagrams 群组错位词
Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...
- 使用 focus() 和 blur()
<html> <head> <style type="text/css"> a:active {color:green} </style& ...
- spring 配置多数据源(mysql读写分离)
前段时间刚换了家新公司,然后看项目代码里用了数据库读写分离的架构,然后好奇扒了代码简单看了下,总体来说就是运用spring aop切面方式来实现的.看明白后就在自己的个人小项目里运用了下,测试OK,所 ...
- 对于程序员在boss直聘求职的建议
最近为一个岗位的招聘,在直聘伤刷了三百份简历 0.上传简历最好是PDF,word简历在不同的系统和软件下排版可能会出问题. 1.新职位投得要快,后面投的,有可能看不到. 为了投的命中率,投之前最好看一 ...
- Web运营手记
1.图片是给活人用户看的,相对来讲,文字是给搜索引擎看的.精华内容争取要在网站或者频道主页里面让人看到. 2.搜索引擎喜欢看的几种文字:页面标题.关键词元信息(只有Bing管点用).描述(descri ...
- 正确截取List指定位置的内容
正确截取List指定位置的内容 import java.util.ArrayList; import java.util.List; public class ListUtils { public s ...