pytest测试框架系列 - Pytest 失败重跑pytest-rerunfailures插件详解

## 前言 当服务器不稳定,偶尔出现波动、本地网络偶尔出现不稳定等情况,导致用例执行失败,这种情况大家都觉得用例标记失败不太合理,想要在用例执行失败后延时一些时间再次进行执行,如果超过3次仍然失败,则表明用例执行失败;所以就需要失败重跑功能。 ## pytest-rerunfailures 安装 - 前提条件: `pytest (>=5.3)` 和`python >=3.6` - 安装:`pip install pytest-rerunfailures` ![pytest-rerunfailures 安装](https://www.icode9.com/i/ll/?i=20210708231759410.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) - 查看安装版本:`pip show pytest-rerunfailures` ![查看版本](https://www.icode9.com/i/ll/?i=20210708231924859.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) ## pytest-rerunfailures 使用 - 命令行参数: --reruns n(重新运行次数)--reruns-delay m(等待运行秒数) - 使用装饰器: @pytest.mark.flaky(reruns=5, reruns_delay=2) ### 在命令行参数进行用例失败重跑 示例: ```python # !/usr/bin/python3 # _*_coding:utf-8 _*_ """" # @Time  :2021/7/8 23:22 # @Author  : king # @File   :test_rerun.py # @Software :PyCharm # @blog :https://blog.csdn.net/u010454117 # @WeChat Official Account: 【测试之路笔记】 """ import pytest def add(a, b): return a + b def test_rerun(): assert add(1, 2) == 4 if __name__ == '__main__': pytest.main() ``` 在命令行输入: `pytest -v --reruns 2 --reruns-delay 5 test_rerun.py` 失败用例重试2次,每次延时5秒 ![失败重试运行](https://www.icode9.com/i/ll/?i=20210708232830498.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) ### 使用装饰器的方式进行失败用例重跑 示例: ```python # !/usr/bin/python3 # _*_coding:utf-8 _*_ """" # @Time  :2021/7/8 23:22 # @Author  : king # @File   :test_rerun.py # @Software :PyCharm # @blog :https://blog.csdn.net/u010454117 # @WeChat Official Account: 【测试之路笔记】 """ import pytest def add(a, b): return a + b @pytest.mark.flaky(reruns=2, reruns_delay=5) def test_rerun(): assert add(1, 2) == 4 if __name__ == '__main__': pytest.main() ``` 在命令行输入: `pytest -v test_rerun.py` 失败用例重试2次,每次延时5秒 ![失败重跑](https://www.icode9.com/i/ll/?i=20210708233413692.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) ### 命令行参数和装饰器同时存在 说明:如果用例装饰器方式设置了重新运行次数,则在命令行添加--reruns对这些用例不会生效 示例: ```python # !/usr/bin/python3 # _*_coding:utf-8 _*_ """" # @Time  :2021/7/8 23:22 # @Author  : king # @File   :test_rerun.py # @Software :PyCharm # @blog :https://blog.csdn.net/u010454117 # @WeChat Official Account: 【测试之路笔记】 """ import pytest def add(a, b): return a + b @pytest.mark.flaky(reruns=1, reruns_delay=5) def test_rerun(): assert add(1, 2) == 4 if __name__ == '__main__': pytest.main() ``` 在命令行输入: `pytest -v --reruns 3 --reruns-delay 5 test_rerun.py` 失败用例重试3次,每次延时5秒 ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210708233938165.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) ## 兼容性 > 官网说明:https://pypi.org/project/pytest-rerunfailures/ > Compatibility > - This plugin may not be used with class, module, and package level fixtures. > - This plugin is not compatible with pytest-xdist’s –looponfail flag. > - This plugin is not compatible with the core –pdb flag. 翻译: - 这个插件不可以和 ` class, module, package` 级别的fixture装饰器一起使用 - 这个插件与 `pytest-xdist` 的 `--looponfail` 标志不兼容 - 这个插件与核心 `--pdb` 标志不兼容 ## 总结 - pytest-rerunfailures插件可以通过命令行参数 ` --reruns 2 --reruns-delay 5 ` 进行使用,这个对于所有用例生效 - pytest-rerunfailures插件使用装饰器装饰在用例上面,只对装饰的用例有效 - 当时同时使用装饰器和命令行参数时,装饰器参数优先级高 - 注意插件的兼容性 以上为内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处! >**如果觉得文章不错,欢迎关注微信公众号,微信公众号每天优先推送相关测试技术文章** 个人微信号:搜索 【测试之路笔记】
上一篇:判断是否有空格、判断是否有汉字


下一篇:Pytest学习笔记9-失败重跑