3. Pytest - 常用插件
插件列表网址:https://plugincompat.herokuapp.com 包含很多插件包,大家可依据工作的需求选择使用。
3.1 测试报告
- 应用场景
自动化测试脚本最终执行是通过还是不通过,需要通过测试报告进行体现。 - 安装
$ pip3 install pytest-html
- 使用
在配置文件中的命令行参数中增加 --html=用户路径/report.html - 示例
pytest.ini
addopts = -s --html=report/report.html
- 结果
在项目目录下会对一个 report 文件夹,里面有个 report.html 即为测试报告
3.2 控制函数执行顺序
- 应用场景
现实生活中,如果想下订单,必须先登录,我们可以通过插件的形式来控制函数执行的顺序。 - 安装
$ pip3 install pytest-ordering
- 使用
- 标记于被测试函数,@pytest.mark.run(order=x)
- 根据order传入的参数来解决运行顺序
- order值全为正数或全为负数时,运行顺序:值越小,优先级越高
- 正数和负数同时存在:正数优先级高
- 示例
import pytest
class TestLogin:
def test_hello_001(self):
print("test_hello_001")
@pytest.mark.run(order=1)
def test_hello_002(self):
print("test_hello_002")
@pytest.mark.run(order=2)
def test_hello_003(self):
print("test_hello_003")
- 结果
scripts/test_login.py test_hello_002 # 先运行2
.test_hello_003 # 再运行3
.test_hello_001
3.3 失败重试
- 应用场景
自动化测试脚本可能会使用到网络,如果网络不好可能最终会使脚本不通过。像这种情况可能并不是脚本本身的问题,仅仅是因为网络忽快忽慢,那么我们可以使用失败重试的插件,当失败后尝试再次运行。一般情况最终成功可以视为成功,但最好进行进行排查时候是脚本问题。 - 安装
pip3 install pytest-rerunfailures
- 使用
在配置文件中的命令行参数中增加 --reruns n - 示例
pytest.ini
addopts = -s --reruns 3
test_login.py
class TestLogin:
def test_a(self): # test开头的测试函数
print("------->test_a")
assert 1 # 断言成功
def test_b(self):
print("------->test_b")
assert 0 # 断言失败
- 结果
scripts/test_login.py ------->test_a
.------->test_b
R------->test_b
R------->test_b
R------->test_b
F
R 表示重试
- 注意点
重试时,如果脚本通过,那么后续不再重试
.test_hello_003 # 再运行3
.test_hello_001
如果你期望加上出错重试的等待时间,请使用如下命令(reruns-delay是等待时间):
pytest --reruns 5 --reruns-delay 1
如果你只想对某几个测试用例应用重试策略,你可以使用装饰器:
@pytest.mark.flaky(reruns=5, reruns_delay=2)
例如:
@pytest.mark.flaky(reruns=5, reruns_delay=2)
def test_example():
import random
assert random.choice([True, False])
其它参数
pytest --maxfail=10 #失败超过10次则停止运行
pytest -x test_demo.py #出现失败则停止