pytest常用用法
先走在跑起飞
pytest特点是可以
文件夹的方式执行
so
pytest 文件夹名
文件夹内,只有test_或者_test的文件,才会执行,其他的不执行(当然你可以一个个的执行单个文件不受这个约束)
pytest 提供转测试打回
(如果用例大规模的出现错误,自动化用例就不用执行了)
refu
pytest 执行过滤用例(关键字)
pytest.ini
pytest.ini:pytest的主配置文件,可以改变pytest的默认行为
addopts 命令添加
addopts = -v -s
norecursedirs 简化用例搜索
norecursedirs = .* build dist CVS _darcs {arch} *.egg venv src resources log report util
xfail_strict 有时间在研究
log_cli 日志
@pytest.mark.标签名
1.在ini结尾的文件,创建标签
2.加标记
3.执行写个main.py
或者:用命令的方式执行
多线程执行
安装 pytest-xdist
pytest 文件夹名称 -n 线程数
重试运行
接口有时候会出现网络问题,这个适合可以设置多次跑用例,保障测试的准确性
pytest 文件夹名称 --reruns 次数
@pytest.mark.flaky(reruns=5, reruns_delay=2)
reruns=5重试次数 reruns_delay=2 间隔时间
注意事项
如果指定了用例的重新运行次数,则在命令行添加–reruns对这些用例是不会生效的
同时还有兼容性问题,跟pytest-xdist
skip 跳过执行
@pytest.mark.skip()
@pytest.mark.skip
@pytest.mark.skipif(sys.version_info < (3, 9), reason="需要Python3.9版本以上")
在方法中加,就是方法不执行,在类中加,就是类中不执行(比如用例没写完,或者开发这个接口还有问题)
看自己写的小demo,首先定义一个布尔类型,然后传给skipif 在skipif里面做判断,通过上一个函数的传值,影响结果的走向
@pytest.mark.skipif()
def a():
print(True)
return True
#这里判断a是不会为false的,所以继续执行
@pytest.mark.skipif(a() == False, reason="给一个方法传过来,然后用方法来判断")
def test_hehe():
print(11111)
@pytest.mark.xfail(raises=ZeroDivisionError)
这种跳过,是错我也要他对
# 断言装饰器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():
1 / 0
这里不是符合预期的异常
重复执行,直到错误才停止(找偶现bug专用)
这个是重复1000次,以强制测试运行程序在第一次失败时停止
pytest --count=1000 -x test_file.py
@pytest.mark.repeat(count)
@pytest.mark.repeat(5)
def test_repeat():
print("测试用例执行")
import random
flag = random.choice([True, False])
print(flag)
assert flag
运行需要打印print 或者日志
pytest 文件名.py -s
ini文件,看清楚ini文件,不是init.py
ini文件加入这个内容