运行自动化测试的时候,有时会因为网络不稳定,测试环境或者第三方环境正在重启而造成用例运行结果不稳定,时而能跑过时而跑不过。这些难以重现的环境因素造成的用例失败会让测试人员很困扰,排查即耗费时间也没有太多改善的空间。针对这种情况,我们可以基于TestNG的重试器和监听器实现失败结果的重试和监听处理,一旦监听到失败的测试用例,启动自己定制的重试方法和处理方法来实现重新运行和截图。

IRetryAnalyzer实现失败重试

TestNG提供了IRetryAnalyzer接口,通过实现这个接口用户可以自定义重试方法,此接口仅定义了一个retry方法

测试人员实现IRetryAnalyzer接口,根据ITestResuly的状态决定是否继续尝试直到自定义的最大重试次数

TestNG会自动在添加了RetryAnalyzer的测试方法上监控测试方法的结果,并调用IRetryAnalyzer实现对不同结果的处理。本文中自定义的重试方法会判断每个测试方法的运行结果,如果测试成功,不做任何动作退出方法;如果测试失败且执行次数少于最大尝试次数,则进入重试并讲运行次数加一;如果测试失败,并尝试次数大于最大尝试次数,退出方法,并把方法标记为失败。

ITestListener实现失败截图

TestNG提供了ITestListener接口,通过扩展和实现此接口,能够实现自定义成功/失败的处理方式。ITestListener接口主要定义了如下方法:

• onTestStart

• onTestSuccess

• onTestFailure

• onTestSkipped

• onTestFailedButWithinSuccessPercentage

• onStart

• onFinish

上述方法主要定义测试类在构造前/运行后,以及测试类中每一个@Test注解方法创建前,获取运行结果后(运行成功/运行失败/跳过运行/部分成功)应该触发的动作。自定义实现ITestListener接口以后,就可以实现针对测试方法的自定义处理。

实现了自定义的监听器以后,就可以在需要失败重试的方法前加上相应的注解,通过注解的value属性指明处理的监听器。添加了监听器的方法在运行时会调用监听器里面实现的方法,否则不做任何处理

要实现失败自动截图,就需要在监听器的onTestFailure方法里添加截图的处理,Selenium支持把WebDriver转化成为截屏工具,并且保存截屏图片到硬盘上,通过如下语句可以实现截屏处理,把方法封装到监听器的onTestFailure即可。

作  者:Testfan Kitty
出  处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

稳定UI运行结果-自动化测试失败重试和截图的更多相关文章

  1. python unittest case运行失败重试

    因为使用unittest进行管理case的运行.有时case因为偶然因素,会随机的失败.通过重试机制能够补充保持case的稳定性.查阅资料后发现,python的unittest自身无失败重试机制,可以 ...

  2. testng testcase失败重试

    简单介绍 需求场景:测试移动端应用,常会因为点击失效.网络延迟大等原因导致测试脚本失败.这时,需要自动重新运行失败的脚本,直到脚本成功通过或者到达限定重试次数. 解决方案:实现testng的IRetr ...

  3. 使用UI Automation实现自动化测试--1-4

    Introduction UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active ...

  4. TestNg失败重试机制

    TestNg提供了失败重试接口IRetryAnalyzer,需要实现retry方法: package com.shunhe.testngprac.retry; import org.testng.IR ...

  5. 使用Python请求http/https时设置失败重试次数

    设置请求时的重试规则 import requests from requests.adapters import HTTPAdapter s = requests.Session() a = HTTP ...

  6. 5.如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?

    作者:中华石杉 面试题 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试官心理分析 服务治理,这个问题如果问你,其实就是看看你有没有服务治理的思想,因为这个是做过复杂微服务的 ...

  7. 使用UI Automation实现自动化测试--5-7

    使用UI Automation实现自动化测试--5 (Winfrom和WPF中弹出和关闭对话框的不同处理方式) 在使用UI Automation对Winform和WPF的程序测试中发现有一些不同的地方 ...

  8. 面试系列26 如何基于dubbo进行服务治理、服务降级、失败重试以及超时重试

    (1)服务治理 1)调用链路自动生成 一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成.那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的 ...

  9. 重新整理 .net core 实践篇————polly失败重试[三十四]

    前言 简单整理一下polly 重试. 正文 在开发程序中一般都有一个重试帮助类,那么polly同样有这个功能. polly 组件包: polly 功能包 polly.Extensions.Http 专 ...

随机推荐

  1. 面向资源操作的http请求

    Guide | Echo - High performance, minimalist Go web framework https://echo.labstack.com/guide e.POST( ...

  2. 阿里 JAVA 开发手册 学习 4 工程规约

    应用分层 1.分层如下 1)开放接口层:可以直接封装Service接口暴露成RPC:通过web封装成http接口:网关控制层等. 2)终端显示层:各个端的模板渲染并执行显示层. 3)Web层:主要是度 ...

  3. ABAP- INCLUDE Zxxx IF FOUND.

    大顾代码: INCLUDE zinc_ca_0002 IF FOUND. - 这肯定是大顾问写出来的 - 一般都不会加东西啊 -加了 IF FOUND 不知道啥意思.  古道无仙(173120830) ...

  4. [2017-10-25]Abp系列——集成消息队列功能(基于Rebus.Rabbitmq)

    本系列目录:Abp介绍和经验分享-目录 前言 由于提交给ABP作者的集成消息队列机制的PR还未Review完成,本篇以Abplus中的代码为基准来介绍ABP集成消息队列机制的方案. Why 为什么需要 ...

  5. spring和springmvc中,Configuration注解Bean重复加载

    问题:bean重复加载1.如下代码所示,开启Configuration注解,实现Bean代码注入,发现bean重复加载 @Configuration public class EhCacheConfi ...

  6. android系统启动框架、Activity界面显示过程详解

    一.Android系统框架 android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心 ...

  7. codeforces B. George and Round 解题报告

    题目链接:http://codeforces.com/contest/387/problem/B 题目意思:给出1-n个问题,以及要满足是good rounde条件下这n个问题分别需要达到的compl ...

  8. LiveCD、LiveDVD和BinDVD区别在哪里

    本文转载自: http://www.kankanews.com/ICkengine/archives/86968.shtml 1.CentOS系统镜像有两个,安装系统只用到第一个镜像即CentOS-6 ...

  9. JNI——C调用JAVA

    步骤: 1. 创建虚拟机 2. 获得class 3. 实例化对象:获得构造方法(方法名为“<init>”),构造参数,调用方法 4. 调用方法:又分为获得方法,构造方法,调用方法 操作方法 ...

  10. zynq交叉编译环境设置

    环境准备 Vmware 虚拟机:ubuntu14.04 下载安装文件 环境设置 按照上面地址下载 xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 将das ...