稳定UI运行结果-自动化测试失败重试和截图
运行自动化测试的时候,有时会因为网络不稳定,测试环境或者第三方环境正在重启而造成用例运行结果不稳定,时而能跑过时而跑不过。这些难以重现的环境因素造成的用例失败会让测试人员很困扰,排查即耗费时间也没有太多改善的空间。针对这种情况,我们可以基于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运行结果-自动化测试失败重试和截图的更多相关文章
- python unittest case运行失败重试
因为使用unittest进行管理case的运行.有时case因为偶然因素,会随机的失败.通过重试机制能够补充保持case的稳定性.查阅资料后发现,python的unittest自身无失败重试机制,可以 ...
- testng testcase失败重试
简单介绍 需求场景:测试移动端应用,常会因为点击失效.网络延迟大等原因导致测试脚本失败.这时,需要自动重新运行失败的脚本,直到脚本成功通过或者到达限定重试次数. 解决方案:实现testng的IRetr ...
- 使用UI Automation实现自动化测试--1-4
Introduction UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active ...
- TestNg失败重试机制
TestNg提供了失败重试接口IRetryAnalyzer,需要实现retry方法: package com.shunhe.testngprac.retry; import org.testng.IR ...
- 使用Python请求http/https时设置失败重试次数
设置请求时的重试规则 import requests from requests.adapters import HTTPAdapter s = requests.Session() a = HTTP ...
- 5.如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?
作者:中华石杉 面试题 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试官心理分析 服务治理,这个问题如果问你,其实就是看看你有没有服务治理的思想,因为这个是做过复杂微服务的 ...
- 使用UI Automation实现自动化测试--5-7
使用UI Automation实现自动化测试--5 (Winfrom和WPF中弹出和关闭对话框的不同处理方式) 在使用UI Automation对Winform和WPF的程序测试中发现有一些不同的地方 ...
- 面试系列26 如何基于dubbo进行服务治理、服务降级、失败重试以及超时重试
(1)服务治理 1)调用链路自动生成 一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成.那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的 ...
- 重新整理 .net core 实践篇————polly失败重试[三十四]
前言 简单整理一下polly 重试. 正文 在开发程序中一般都有一个重试帮助类,那么polly同样有这个功能. polly 组件包: polly 功能包 polly.Extensions.Http 专 ...
随机推荐
- 第一节 麒麟系统安装+基础环境搭建(JDK+Scala)
本文重点对没有Linux基础的人员提供高速上手的指导,假设你的开发环境已经搭建好,能够略过本章所讲内容,内容来源于网络.也谢谢这些默默讲自己经验分享的人!近期在学习大数据,有喜欢的朋友能够一起研究. ...
- cgic 中文文档
CGIC英文文档地址:https://boutell.com/cgic/ cgic是用c写cgi程序的一个很小的库,所以英文文档也很少,为了便于日后复习翻看,心血来潮,翻译了一遍. 1. 什么是cgi ...
- vim实现代码缩进和可视区域的字符串替换
今天2014年9月12号,实现了vim下的代码自动缩进和替换可视区域的字符串,之前一直在用vim这个强大的编辑器,它的强大只有用了的人才知道,现在把这两个很强大的功能展示出来,有个这两个功能,即使你写 ...
- Struts status
#status.odd 是否奇数行 #status.count 当前行数 #status.index 当前行的序号,从0开始[#status.count=# ...
- Python 参数校验的进化
Python 函数参数魔法 事情的起因是感觉目前项目中的参数校验方法写的太简单了,很多时候需要在server层再if else处理,于是就动手准备写一个好用一点的,可以自定义校验参数规则的参数校验器, ...
- webstorm代码提示按键改为alt+/
webstorm代码提示默认按键为ctrl+空格 但是windows输入法中英文输入法的默认按键也是ctrl+空格 这就导致webstorm按键冲突,无法使用代码快捷提示按键 解决方法: 按ctrl+ ...
- Vue父子组件间的通信
父组件通过 props 向下传递数据给子组件,子组件通过 events 向上给父组件发送消息. 父组件: <div> <div style="background:#344 ...
- 「LuoguP1220」 关路灯(区间dp
题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...
- mongodb replica set 配置高性能多服务器详解
mongodb的多服务器配置,以前写过一篇文章,是master-slave模式的,请参考:详解mongodb 主从配置.master-slave模式,不能自动实现故障转移和恢复.所以推荐大家使用mon ...
- mac上Firefox安装firebug和firepath
Firefox安装Selenium ide插件时提示:该附加组件无法安装 因为它似乎已损坏,如下图: 此时千万不要去想着这个插件有问题,可能是Firefox的版本问题. 在Firefox45之后的新版 ...