前言
笔者在执行自动化测试用例时,会发现有时候用例失败并非代码问题,而是由于服务正在发版,导致请求失败,从而降低了自动化用例的稳定性,最后还要花时间定位到底是自身case
的原因还是业务逻辑问题,还是其他原因,增加了定位成本。增加容错机制,失败重试,会解决大部分由于网络原因、服务重启等原因造成的case
失败问题。那该如何增加失败重试机制呢?带着问题我们一起探索。
pytest-rerunfailures 插件
先给出答案,我们将使用pytest-rerunfailures
插件来实现失败重试功能。
什么是pytest-rerunfailures
?
pytest-rerunfailures
是一个基于 pytest 框架的插件,它允许我们对测试用例进行失败重试。当一个测试用例失败时,插件会自动重新运行失败的测试用例,直到达到预定的重试次数或测试用例通过为止。这样可以增加用例的稳定性,并减少因为偶发性问题导致的测试失败。
如何使用pytest-rerunfailures
?
方式一
首先,确保已经安装了 pytest-rerunfailures 插件。可以使用以下命令进行安装:
pip install pytest-rerunfailures
安装完成后,在项目中使用 pytest 运行测试用例时,pytest-rerunfailures 插件会自动生效。
接下来,在编写测试用例时,可以通过添加 @pytest.mark.flaky
装饰器将需要重试的测试用例标记起来。例如:
test_demo.py
import pytest
@pytest.mark.flaky(reruns=3, reruns_delay=2)
def test_case():
assert 1 == 2
在上述示例中,我们使用了 @pytest.mark.flaky
装饰器来标记测试用例 test_case
为可重试的。参数 reruns
指定了重试次数,而 reruns_delay
则指定了每次重试之间的延迟时间(以秒为单位)。
我们来运行case
,看一下执行结果:
执行命令:pytest -s -v test_demo.py::test_case
,会看到如下结果:
RERUN
test_dir/test_demo.py::test_case RERUN
test_dir/test_demo.py::test_case RERUN
test_dir/test_demo.py::test_case FAILED
可以看到,重试了3次,最终结果为失败。
注意:如果你是在pycharm中点击绿色三角形直接运行是不生效的
总结一下:
当运行测试时,如果测试用例失败,pytest-rerunfailures 插件会根据我们配置的重试次数和延迟时间自动重新运行该测试用例,直到达到最大重试次数或测试通过为止。
方式二
除了使用装饰器来标记测试用例外,pytest-rerunfailures 还支持使用命令行选项和配置文件的方式进行配置。
命令行执行的话,可以这样写:
pytest -s -v --reruns 3