NetEase Arrow

TestNG 监听器扩展插件
授权协议 未知
开发语言 Java
所属分类 开发工具、 程序调试工具
软件类型 开源软件
地区 国产
投 递 者 董谦
操作系统 跨平台
开源组织 网易
适用人群 未知
 软件概览

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/

  • 合并”1.5.2”分支到我(heshiyu)的分支上 1/先切换到”1.5.2”分支,pull最新的内容到本地; 2/然后切换到”heshiyu”分支,选择“合并“ – “从抓取的远程分支合并“ 3/最后再从本地分支“heshiyu“ push 到远程分支“heshiyu“ “实时加载”、“热加载” “实时加载”:明显的全局刷新 devServer: { contentBa

  • AppendArraySlice AppendArraySlice 这个接口,目前每个 builder 都会有. 所以最终的copy 实现是在builder_primitive.h NumericBuilder 之 AppendArraySlice arrow/cpp/src/arrow/array/builder_primitive.h Status AppendArraySlice(con

  • Netease Music Spider 博客引流 这篇只是入门篇,进阶请移步Netease Music Spider for DB 爬虫是很久之前 就想研究的一个问题 但因为懒 嗯 懒 最近经常有一些写爬虫的新手 找我的网站练手 看着日志 表示很难受 所以决定自己来研究一下如何来写爬虫~~(我不会说这是作业的)~~ 本文对近2w个热门歌单的3024511首歌曲数据进行爬取及分析 为什么选择爬网易

  • ubuntu22.04安装网易云音乐会报错: /opt/netease/netease-cloud-music/netease-cloud-music: /opt/netease/netease-cloud-music/libs/libselinux.so.1: no version information available (required by /opt/netease/netease-c

  • 个人为网易云音乐重度用户,从ubuntu到arch后,感觉netease-cloud-music在ubuntu中支持更好,毕竟linux下的netease-cloud-music是由网易云音乐和深度deepin联合开发的,ubuntu有官方的deb包,arch的aur中的netease-cloud-music是基于此deb进行打包的,在体验上没有差别,在arch中用起来感觉也还不错,在此记录下使用

  • 安装环境 opensuse leap 42.3(理论上仓库中列出的支持版本都可以用此方法安装) 官方软件仓库搜索netease,也可直接点击此处打开:https://software.opensuse.org/package/netease-cloud-music?search_term=netease 选择对应版本,点击Source下载源码,我这里下载的对应版本为42.3,得到如下文件(注意这里

  • 解决办法(两种任选其一): 1、打开文件桌面图标文件netease-cloud-music.desktop: $ sudo gedit /usr/share/applications/netease-cloud-music.desktop 找到文件中以下代码: Exec=netease-cloud-music %U 修改为: Exec=netease-cloud-music --no-sandb

  • 个人为网易云音乐重度用户,从ubuntu到arch后,感觉netease-cloud-music在ubuntu中支持更好,毕竟linux下的netease-cloud-music是由网易云音乐和深度deepin联合开发的,ubuntu有官方的deb包,arch的aur中的netease-cloud-music是基于此deb进行打包的,在体验上没有差别,在arch中用起来感觉也还不错,在此记录下使用

 相关资料
  • 扩展说明 当有服务暴露时,触发该事件。 扩展接口 org.apache.dubbo.rpc.ExporterListener 扩展配置 <!-- 暴露服务监听 --> <dubbo:service listener="xxx,yyy" /> <!-- 暴露服务缺省监听器 --> <dubbo:provider listener="xxx,yyy" /> 已知扩展 org.apache.dubbo

  • 扩展说明 当有服务引用时,触发该事件。 扩展接口 org.apache.dubbo.rpc.InvokerListener 扩展配置 <!-- 引用服务监听 --> <dubbo:reference listener="xxx,yyy" /> <!-- 引用服务缺省监听器 --> <dubbo:consumer listener="xxx,yyy" /> 已知扩展 org.apache.dub

  • 如果默认的调度器不满足要求,还可以部署自定义的调度器。并且,在整个集群中还可以同时运行多个调度器实例,通过 podSpec.schedulerName 来选择使用哪一个调度器(默认使用内置的调度器)。 开发自定义调度器 自定义调度器主要的功能是查询未调度的 Pod,按照自定义的调度策略选择新的 Node,并将其更新到 Pod 的 Node Binding 上。 比如,一个最简单的调度器可以用 sh

  • 我正在尝试使用maven assembly插件生成zip文件程序集。我只剩下两个问题,我想知道是否有可能仅仅通过配置来解决,但作为最后的手段,我也在考虑编写自己的maven插件来扩展maven assembly插件 丢失的两块是 > 将与include模式匹配的每个依赖项放入其自己的 这是我的程序集的相关部分 这将使用

  • Kubernetes在设计之初就充分考虑了可扩展性,很多资源或操作都可以通过插件来自由扩展,比如认证授权、网络、Volume、容器执行引擎、调度等。

  •        扩展插件为LSV(LocaSpaceViewer)的扩展应用中心。扩展插件会定期更新各种实用小工具,方便广大朋友使用。插件功能可以独立获取授权,购买授权后,可以在LSV软件内直接使用。授权只和账号绑定,与所用电脑无关。 坐标地址批处理工具 功能介绍        地理编码指将结构化内容转换为经纬度坐标,逆地理编码指将经纬度坐标转换成结构化地址。使用该功能模块,可以快速批量把Excel

  • Simditor only integrates key features and uses extensions to support some optional features. Send your repository to us! We are happy to receive your extensions! Please make your extension has the sim

  • 主要内容:监听器的分类,监听对象创建和销毁的监听器,监听属性变更的监听器,监听 Session 中对象状态改变的监听器,注册监听器监听器 Listener 是一个实现特定接口的 Java 程序,这个程序专门用于监听另一个 Java 对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即自动执行。 监听器的相关概念: 事件:方法调用、属性改变、状态改变等。 事件源:被监听的对象( 例如:request、session、servletContext)。 监听器:用于监听事件源对象