【pytest】重复执行用例(pytest-repeat)
-
前言:平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来。
自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,或者针对某个模块的用例重复执行多次 -
1、环境搭建
- pip install pytest-repeat
-
2、使用
- 2.1:添加参数 --count=num
- 代码参考
- 2.1:添加参数 --count=num
import pytest,sys
class Test_class:
def test_001(self):
a = 'hello'
b = 'hello world'
assert a != b
print('测试用例--001')
def test_002(self):
a = 1
b = 2
assert a+b == 3
print('测试用例--002')
def test_003():
a = 'hello'
b = 'hello world'
assert a in b
print('测试用例--003')
- 重复执行两次:pytest case/demo/test_demo.py --count=2 -s
- 从运行的用例结果看,是先重复2次test_001,再重复2次test_002,test_003。有时候我们希望执行的顺序是test_01,test_02按这样顺序重复2次,再执行test_003
- 接下来就用到一个参数--repeat-scope
- --repeat-scope
- --repeat-scope类似于pytest fixture的scope参数,--repeat-scope也可以设置参数: session , module,class或者function(默认值)
- function(默认)范围针对每个用例重复执行,再执行下一个用例
- class 以class为用例集合单位,重复执行class里面的用例,再执行下一个
- module 以模块为单位,重复执行模块里面的用例,再执行下一个
- session 重复整个测试会话,即所有收集的测试执行一次,然后所有这些测试再次执行等等
-
- 运行结果可知:以class为用例集合单位,重复执行class里面的用例,再执行下一个。
-:2.2:在需要重复执行的用例上使用装饰器 @pytest.mark.repeat(num)
- 类与函数都可以使用该装饰器
-
- 2.3:重复测试直到失败(重要)
- 测试过程中有些偶发性故障,需要一遍又一遍地运行相同的测试直到失败。您可以将pytest的-x选项与pytest-repeat结合使用,以强制测试运行器在第一次失败时停止。例如:pytest case/demo/test_demo.py::test_003 -s --count=100 -x
- 这将尝试运行test_file.py 100次,但一旦发生故障就会停止