在自动化测试工具和自动化测试用例开发过程中,经常需要处理一些待操作对象不稳定的情况,例如,某些界面元素不能及时出现,某些服务暂时不可用。这个时候,测试代码必须想方设法应对这种情况,以便提高工具和用例的健壮性,最常见的解决方法就是进行重试:当特定条件不满足的时候,等待一段时间,然后再次尝试,直到期望的条件满足继续运行,或者重试到达一定数目抛出异常退出。

下面是一种常用的重试代码样板.

def do_something_unreliable(retry=10):for i in range(retry):try:if random.randint(0, 10) > 1:raise IOError("Unstable status, try again")else:print("Get stable result")returnexcept Exception as e:print(e.message)

其实,已经有高人开发了一个名叫Tenacity的Python库,帮我们优雅地搞定这些需要重试的情况了,使用起来非常简单。

我们可以用pip install tenacity来安装这个库,然后用@retry装饰器来重构上面的代码。

from tenacity import retry
@retry
def do_something_unreliable():if random.randint(0, 10) > 1:raise IOError("Unstable status, try again")else:print("Get stable result")

上面的例子,实现了遇到异常就重试,如果想要限制重试次数,只需要修改@retry装饰器那一行即可。

from tenacity import retry, stop_after_attempt
@retry(stop=stop_after_attempt(3))

如果想要每5秒钟重试一次

from tenacity import retry, wait_fixed
@retry(wait=wait_fixed(5))

上面这些,仅仅是tenacity最简单的使用方法,其他重试的方式还有很多种,大家可以访问http://tenacity.readthedocs.io/en/latest/ 找到更多的使用方法。

当然,看到好东西,就应该把它用起来,今天我已经把常用的多节点存活状态采集的自动化工具用tenacity改进了一版,以前必须要用较长的超时机制(requests的timeout参数)来对抗网络异常,现在只新加两行代码,就大大缩短了统计时间,增强了健壮性,优雅地不得了。

代码下载

本系列文章和代码已经作为项目归档到github,大家觉得有帮助就请在github上star一下,你的支持是我更新的动力。github仓库地址:jumper2014/PyCodeComplete

Python实践3-Tenacity提高自动测试健壮性相关推荐

  1. C++使用const提高函数的健壮性

    C++使用const提高函数的健壮性 看到const关键字,C++程序员首先想到的可能是const常量.这可不是良好的条件反射.如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮.cons ...

  2. 移动端测试 APP启动性能分析 WebView性能分析 H5性能分析 卡顿分析 帧分析 CPU统计 网络流量分析 耗电量指标 弱网测试 健壮性测试 兼容性测试 Amdahl

    Android官网使用指南性能:https://developer.android.com/topic/performance 一.APP启动性能分析 APP的启动过程 调用起APP.创建一个空白窗口 ...

  3. MIT与FAIR提出「mixup」,利用数据和标签的随机线性插值提高神经网络的健壮性

    来源: 雷克世界 摘要:麻省理工学院(MIT)与Facebook人工智能研究院(FAIR)提出了一种能够构建虚拟训练样本的方法--mixup,提高了神经网络的健壮性. 近日,麻省理工学院(MIT)与F ...

  4. Python+selenium+360浏览器实现自动测试

    最近,因工作需要爬取一个系统的数据.该系统只能用低版本IE浏览器,所以尝试了用360浏览器,考虑能够让更多人扩展该爬虫,选取selenium驱动浏览器.现在把需要用到的主要技术点整理如下,备以后查询. ...

  5. 随机线性插值提高神经网络的健壮性

    https://blog.csdn.net/cf2suds8x8f0v/article/details/78431112

  6. 软件质量测试中的健壮性测试是什么?一文和你说

    当大多数人开车时,他们不会担心刹车失灵.当他们的孩子得到一个新玩具时,他们也不担心因故障受伤.事实上,大多数人在日常生活中根本不担心系统故障. 这是因为软件开发人员或质量控制工程师已经解决了质量问题. ...

  7. Java应用,如何提高系统健壮性

    Java 是一门广泛应用于企业级应用的编程语言,在编写大型系统时需要考虑系统健壮性,以确保系统的可靠性和稳定性. 以下是提高 Java 系统健壮性的一些建议: 异常处理:合理处理异常可以避免程序在遇到 ...

  8. 网络分析仪自动化测试软件,基于Agilent PNA系列网络分析仪实现脉冲器件自动测试系统的设计...

    前言 雷达的微波射频系统主要包括混频器.滤波器.放大器.天线等部分.其中放大器.混频器.T/R组件为脉冲器件测试的主要对象.这些关键部件会对雷达的脉冲调制信号造成影响,典型的信号恶化包含:信号过冲.定 ...

  9. 2021-11-24系统健壮性

    目录 代码评审 烂代码 健壮性和鲁棒性 构建健壮性系统 负载均衡 容灾能力 数据健壮性 代码健壮性 失败的架构思维 混沌工程 代码评审 烂代码 人的视角 维护者脏话的频率高.维护者脏话的类型丰富.存在 ...

  10. 爱奇艺移动端APP健壮性测试的设计与实践

    ‍ ‍ 01 前言 一款APP的发布以及新功能的迭代需要经过严格的质量保证,而崩溃性问题是影响APP稳定的头号问题.其中,因前端不兼容后端服务数据格式变更而引起的崩溃问题占有一定的比例.这类崩溃问题一 ...

最新文章

  1. 如何实现对ELK各组件的监控?试试Metricbeat
  2. ICCV 2017 《Unsupervised Learning from Video to Detect Foreground Objects in Single Images》论文笔记
  3. 鼠标经过替换背景和文字
  4. [SpringBoot2]HelloWorld
  5. VS2010主题设置及插件推荐
  6. shell进行mysql统计
  7. 【ZooKeeper Notes 5】单机启动多个zk实例注意点
  8. 知网中的硕博论文是caj格式,如何用CAJ转PDF?
  9. 电脑设置u盘启动方法
  10. 【Matlab水果蔬菜识别】灰度+二值化+腐蚀+直方图处理水果蔬菜识别【含GUI源码 1052期】
  11. 得到平面设计师进阶之路
  12. 球坐标系(Spherical coordinate system )简单总结
  13. 用Python制作二维码
  14. cpuz不显示服务器内存,cpu-z怎么看不到内存频率
  15. 关于IntelliJ IDEA
  16. float a=1.0f 这里的1.0f中的 f 代表什么?有什么意思?
  17. c语言 谭浩强第五版第五章习题第17题 乒乓球比赛
  18. 0x03数据类型和变量
  19. Vuex前端saas人力资源中台管理项目第四天 员工管理模块
  20. C# SolidWorks 二次开发 API --- 2018版 中文翻译 之官方示例

热门文章

  1. Axure谷歌浏览器Chrome扩展程序安装方法
  2. 通过 SQL Server 视图访问另一个IP地址数据库服务器表的方法
  3. win7电脑变身WiFi热点,让手机、笔记本共享上网
  4. 计算机的硬盘有几个区,电脑固态硬盘需要分区吗 分几个区比较好?
  5. 桌面日历软件有哪些?日历提醒便签软件推荐
  6. glibc 知:手册08:消息翻译
  7. 全息投影的发展潜力不可估量,百度神灯搜索不是梦
  8. r中gglot怎么组合多张图_怎样组合多张ggplot2图片
  9. 中南大学计算机学院研究生录取分数线,中南大学研究生录取分数线
  10. 以太网协议------802.1q,802.1d,802.1x