TestNG 监听器扩展插件 NetEase Arrow

未知
Java
跨平台
网易
2014-09-23
叶秀兰

TestNG 是一个设计用来简化广泛测试需求的 测试框架,旨在涵盖所有类型的测试,包括单元测试、功能测试、端到端集成测试等,而我们在基于TestNG搭建自动化测试框架,编写测试用例时,为保证测试用例的稳定性,需要增加测试用例失败自动重跑功能,这便促成了Arrow 的诞生。 Arrow是基于TestNG监听器扩展的插件,如果把TestNG比作一把强劲的弓,那么插件就是配合弓使用的箭,这也是Arrow命名的由来。

一、Arrow功能介绍

1、  支持通过简单配置实现失败的测试用例自动重跑

2、  支持Html结果报告中展示测试用例运行次数

3、  支持自动解析源代码中的@author标签,在Html结果报告中展示(失败用例可以方便查找维护者)

4、  修复TestNG原生Html报告中锚点跳转不正确的Bug

俗话说,眼见为实耳听为虚,下面就带大家看看实际效果图吧!

二、Arrow使用效果

使用Arrow插件运行基于TestNG的测试用例后会生成我们自定义的报告power-emailable-report.html,下图1显示 在测试用例中书写@author标签,使用arrow执行完用例后生成如图2的结果报告,报告中会自动读取authors信息以及running counts运行次数,通过authors信息方便自动获取到该用例的维护者,通过running counts方便知道当前用例是否失败重跑。

TestNG插件Arrow开源了 - 网易杭州QA - 网易杭州 QA Team 

                      图1

TestNG插件Arrow开源了 - 网易杭州QA - 网易杭州 QA Team

                      图2

三、如何使用Arrow

使用Arrow无需修改原有的测试代码

1、  首先你需要有一套TestNG编写的测试用例

2、  测试工程中需要testng.jar(核心不能忘!),log4j.jar(用于日志的输出)以及我们提供的arrow.jar

3、  测试工程根目录下新建config.properties文件,同时配置如下参数

retrycount=1 #定义重跑次数,不是必填项, 默认值是0,即失败不重跑

sourcecodedir=src #定义源代码路径,不是必填项, 默认值是src

sourcecodeencoding=UTF-8 #定义源代码编码,不是必填项,默认值是utf-8

4、  在build.xml文件中加入监听器,配置如下,配置完成后通过ant运行TestNG测试用例后可以在生成的Html结果报告中查看效果

<target name="testng">
<mkdir dir="test-output" />
<testng outputDir="test-output"
haltonfailure="false" listeners="com.netease.qa.testng.PowerEmailableReporter,
com.netease.qa.testng.RetryListener, com.netease.qa.testng.TestResultListener">
<xmlfileset dir="." includes="testng.xml" />
</testng>
</target>

5、  如果您不习惯4的做法,可以在testng.xml中加入如下的监听器,配置完成后右键testng.xml文件运行测试用例即可

<listeners>
<listener class-name="com.netease.qa.testng.TestResultListener" />
<listener class-name="com.netease.qa.testng.RetryListener" />
<listener class-name="com.netease.qa.testng.PowerEmailableReporter" />
</listeners>

四、Arrow扩展-失败用例自动截图

由于截图功能在不同的测试框架上API会不同,所以当前Arrow中没有把这个功能集成进来,但是如果你需要该功能也可以很方便的进行扩展。

1、 下载Arrow的源代码

2、 修改TestResultListener类,在onTestSkipped以及onTestFailure方法中加入如下代码

       @Override
        public void onTestFailure(ITestResult tr) {
               super.onTestFailure(tr);
               saveScreenShot(tr);
        }

        @Override
        public void onTestSkipped(ITestResult tr) {
               super.onTestSkipped(tr);
               saveScreenShot(tr);
        }

        private void saveScreenShot(ITestResult tr) {
               SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
               String mDateTime = formatter.format(new Date());
               String fileName = mDateTime + "_" + tr.getName();
               String filePath = "";
               try {
                   //这里可以调用不同框架的截图功能
                   File screenshot = ((TakesScreenshor)webdriver).getScreenshotas(OutputType.FILE);
                   filePath = “screenshot/” + filename + “.jpg”
                   File destFile = new File(filePath);
                   FileUtils.copyFile(screenshot, destFile);

               } catch (Exception e) {
                       filePath = fileName + " firefox tackScreentshot Failure:" + e.getMessage();
                       logger.error(filePath);
               }

               if (!"".equals(filePath)) {
                    Reporter.setCurrentTestResult(tr);
                    Reporter.log(filePath);
                    //把截图写入到Html报告中方便查看
                    Reporter.log("<img src=\"../" + filePath + "\"/>");
               }
        }

3、修改完成后重新运行测试用例,即可实现失败自动截图,同时会把截图写入到Html结果报告中,方便定位问题,如图3。

TestNG插件Arrow开源了 - 网易杭州QA - 网易杭州 QA Team

 图3

最后,欢迎大家使用以及共同改进Arrow,方便大家基于TestNG的测试工作。

介绍来自:http://qa.blog.163.com/blog/static/1901470022014245230459/

加载中

评论(0)

暂无评论

暂无资讯

暂无问答

js onkeyup,onkeydown,onkeypress

onkeypress是在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。 onkeyup 是在用户放开任何先前按下的键盘键时发生。 onkeydown 是在用户按下任何键盘键...

2012/09/20 11:22
79
0
吉软-人文精英班-第七次作业

CSS: /*代码太多了没注释0.0*/ /* * @Author: Administrator * @Date: 2018-11-24 11:37:27 * @Last Modified by: Administrator * @Last Modified time: 2018-11-28 23:22:11 */ *{ paddin...

2018/11/28 23:31
3
0
jQuery Mobile数据属性

Jquery mobile框架使用html5的 data- 属性来使初始化标记和配置组件。这些属性全部都是可选的,并且支持手动调用插件。为了避免命名上的和与其他也使用html5的 data- 属性插件与框架的冲突,...

2013/04/28 16:26
783
0
把别人的Tcl/Tk代码加入到Go语言里14 游戏7 行星游戏

a 首先打开网页 http://wiki.tcl.tk/13601 b 把网页里提到的第一段tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_scrip...

2015/05/13 14:08
50
0
[分享] Mac 键盘和Pc键盘对照表

Period键就是大键盘上的“.”键,ctrl+Period说的就是ctrl+.切换标点 mac leopard 下 苹果电脑常用快捷键 系统固定快捷键,Mac OS X适用 动作 快捷键 停止进程 Command + period 强制退出应用...

2012/05/23 00:10
2.2K
0
ipad simulator 横竖转化

Cmd + Arrow Right /Arrow Left 用于横竖转化

2013/06/25 15:28
8
0
Keyboard Symbols for HTML

Keyboard Symbols for HTML This chart is a list of symbols related to the Apple keyboard. Each symbol has a Unicode identifier and its corresponding HTML code. Compiled by Samuel...

2013/07/26 21:26
25
0
2019年大数据的发展趋势

前言 企业喜欢将技术栈的层次定义为“即服务”模式,从云供应商提供的基础架构到完整的SaaS应用程序。但是,在数据方面,企业仍然采用IT拥有和IT控制模式运行,数据用户正在等待他们的“即服...

09/10 18:22
27
0
Navicat Premium for Mac快捷键汇总

navicat premium mac是一个可多重连接的数据库管理工具,Navicat 的功能足以符合专业开发人员的所有需求,但是对数据库服务器的新手来说又相当容易学习。它可让你以单一程序同時连接到目前世...

09/29 16:07
5
0
JS定制—略微强大的导航栏菜单

Absolutely, the popular things tend to be nice-looking.

2014/07/24 16:39
20
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部