前言
-
日常业务测试过程中,经常会遇到偶现的bug,需要重复操作来复现bug -
自动化测试同样如此,也会需要重复执行用例,来确定用例的稳定性、成功性和复现偶现的bug -
pytest-repeat 是 pytest 的一个插件,可以重复的执行单个测试或多个测试,也可以自定义重复执行的次数 -
官方文档:https://pypi.org/project/pytest-repeat/
前提条件
- Python 2.7、3.5+ 或 PyPy
- pytest 3.6 或更高版本
插件安装
pip3 install pytest-repeat -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
参数介绍
使用详解
举个🌰
"""
__File__ = test_case1.py
__Project__= _JAuto-Interface
__Time__ = 2022-03-02 16:57:54
__Author__ = 黎晟
"""
def test_1():
print("测试用例1")
def test_2():
print("测试用例2")
执行命令
pytest -vs --count 3
查看结果
重复执行测试用例直到失败(重点)
- 当我们验证偶现的问题时,需要不停的重复执行用例,直到用例失败、
- 可以将pytest的 -x 选项与pytest-repeat结合使用,以强制测试运行程序在第一次失败时停
- 命令:
pytest --count=n -x test_file.py
举个🌰
"""
__File__ = test_count_x.py
__Project__= _JAuto-Interface
__Time__ = 2022-03-02 17:08:37
__Author__ = 黎晟
"""
def test_count_x():
import random
n = random.randint(1, 11)
assert n != 10
执行命令
pytest --count 11 -x test_count_x.py
查看结果
可以看到,在执行了8次后,用例执行失败停止
@pytest.mark.repeat(count) 装饰器
如果你想在你的代码中标记一个测试重复多次,你可以使用@pytest.mark.repeat(count) 装饰器
举个🌰
"""
__File__ = test_repeat_decorator.py
__Project__= _JAuto-Interface
__Time__ = 2022-03-02 17:18:01
__Author__ = 黎晟
"""
import pytest
@pytest.mark.repeat(3)
def test_repeat_decorator():
pass
执行命令
pytest test_repeat_decorator.py
查看结果
可以看到,测试用例执行了3次
–repeat-scope
**作用:**可以覆盖默认的测试用例执行顺序,类似fixture的scope参数
- function:默认,范围针对每个用例重复执行,再执行下一个用例
- class:以class为用例集合单位,重复执行class里面的用例,再执行下一个
- module:以模块为单位,重复执行模块里面的用例,再执行下一个
- session:重复整个测试会话,即所有测试用例的执行一次,然后再执行第二次
代码
"""
__File__ = test_repeat_scope.py
__Project__= _JAuto-Interface
__Time__ = 2022-03-02 17:23:16
__Author__ = 黎晟
"""
class TestScope1:
def test_repeat_scope1(self):
print("测试用例执行1")
class TestTestScope2:
def test_repeat_scope2(self):
print("测试用例执行2")
def test_outside1():
print("执行class外用例1")
def test_outside2():
print("执行class外用例2")
执行命令
pytest -s --count=2 --repeat-scope=class test_repeat_scope.py
pytest -s --count=2 --repeat-scope=class test_repeat_scope.py
对比结果
可以看到,使用--repeat-scope=class ,class下的用例先执行了两次,然后才继续执行class外的用例
可以看到,使用`–repeat-scope=module,同一文件下的用例按顺序执行了两次
兼容性(UnitTest)
不幸的是 pytest-repeat 不能使用 unittest.TestCase 测试类。这些测试将始终运行一次,无论–count,并显示警告
|