软件测试/测试开发全日制培训|Pytest跳过用例和失败重试
前言
在我们日常进行自动化测试时,经常会遇到功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了,如果我们注释掉或删除掉这些测试用例,后面可能还要进行恢复操作,这个时候pytest的跳过测试功能就能帮助我们,先跳过,等到问题解决时,恢复执行即可;同时我们还有可能会遇到需要对失败用例重新运行进行测试的情况,pytest也能满足我们的需求,本文就来给大家介绍一下Pytest跳过用例和失败重试的实现。
跳过测试用例
Pytest测试框架中存在两个跳过测试的方法:skip
和skipif
,即无条件直接跳过和满足条件跳过。
- 无条件跳过skip
skip
方法为无条件跳过测试用例,使用方法:@pytest.mark.skip
标记在需要跳过的测试用例上。
- 有条件跳过skipif
skipif
方法为有条件跳过测试用例,条件满足即跳过该用例,使用方法:@pytest.mark.skipif(condition=跳过的条件, reason=跳过的原因)
,标记在需要符合条件跳过的测试用例上。
- 参数condition:跳过的条件,为True则跳过测试,为False则继续执行测试,默认为True。
- 参数reason:标注跳过的原因,必填参数。
使用示例
# 导入pytest
import pytest
# 编写测试用例
def login_data():
return "muller", "123456"
# 无条件跳过
@pytest.mark.skip
def test_register():
"""注册用例"""
print("注册步骤")
assert False
# 当条件为真,跳过测试
@pytest.mark.skipif(login_data()[0] == "muller", reason="muller用户不存在")
def test_login():
"""不记住密码登录"""
username = login_data()[0]
password = login_data()[1]
print(f"输入用户名{username}")
print(f"输入密码{password}")
print("点击登录按钮")
assert username == "muller"
def test_shopping():
"""购物下单"""
print("购物流程")
assert True
if __name__ == '__main__':
pytest.main()python
----------------
运行结果如下:
============================= test session starts =============================
collecting ... collected 3 items
test_c.py::test_register SKIPPED (unconditional skip)
Skipped: unconditional skip
test_c.py::test_login SKIPPED (muller用户不存在)
Skipped: muller用户不存在
test_c.py::test_shopping 购物流程
PASSED
======================== 1 passed, 2 skipped in 0.02s =========================
Pytest失败重试
Pytest失败重试就是,在执行一次测试脚本时,如果一个测试用例执行结果失败了,则重新执行该测试用例。
我们要实现失败重跑,需要安装一个pytest的配套插件——pytest-rerunfailures
,安装命令如下:
pip install pytest-rerunfailures
实现方式:
- 在命令行或者
main()
函数中使用
pytest.main(['-vs','test_a.py','--reruns=2'])
或者是pytest -vs ./test_a.py --reruns 2 --reruns-delay 2
注: reruns
为重跑次数,reruns_delay
为间隔时间,单位s。
- 在
pytest.ini
配置文件中使用
在pytest.ini
配置文件中addopts
添加reruns
重试参数
[pytest]
addopts = -s --reruns 2 --reruns-delay 2
python_files = test_c.py
python_classes = Test*
python_functions = test*
示例如下:
# 1.导入pytest
import pytest
# 2.编写测试用例
@pytest.mark.run(order=2)
def test_login():
"""登录用例"""
print("登录步骤")
assert "abcd" in "abcdefg"
@pytest.mark.run(order=1)
def test_register():
"""注册用例"""
print("注册步骤")
assert False
@pytest.mark.run(order=4)
def test_shopping():
"""购物下单"""
print("购物流程")
assert True
@pytest.mark.run(order=3)
def test_cart():
"""购物车用例"""
print("购物车流程")
assert True
if __name__ == '__main__':
pytest.main(['-vs', 'test_c.py', '--reruns=2'])
----------------------
运行结果如下:
============================= test session starts =============================
collecting ... collected 4 items
test_c.py::test_login
test_c.py::test_register 登录步骤
PASSED注册步骤
RERUN
test_c.py::test_register 注册步骤
RERUN
test_c.py::test_register 注册步骤
FAILED
testcase2\test_c.py:110 (test_register)
@pytest.mark.run(order=1)
def test_register():
"""注册用例"""
print("注册步骤")
> assert False
E assert False
test_c.py:115: AssertionError
购物流程
PASSED购物车流程
PASSED
test_c.py::test_shopping
test_c.py::test_cart
============== 1 failed, 3 passed, 4 warnings, 2 rerun in 4.10s ===============
注:如果在达到我们设置的重跑次数前,用例运行成功,则后续次数不会跑完。
总结
Pytest 提供了灵活的机制来跳过不符合条件的测试用例,并在失败时自动重试,这些功能有助于优化测试流程并提高测试的鲁棒性。通过合理地利用这些功能,您可以更有效地管理测试用例,确保测试的稳定性和可靠性。希望本文能够帮到大家!
推荐
Python全栈开发与自动化测试开发班
由浅入深实战进阶,从小白到高手
以Python全栈开发为基础,深入教授自动化测试技能,为学员打造全面的技术能力。通过系统学习和实际项目实战,学员将具备在职场中脱颖而出的竞争力。不仅能够灵活运用Python进行开发,还能够保障项目质量通过自动化测试手段。这是一个全面提升职业竞争力的机会。
课程详情
Python开发必备基础技能与项目实战
Pvthon 编程语言/算法和数据结构/面向对象编程Web后端开发/前端开发/测试管理平台项目实战
人工智能ChatGPT实战
人工智能辅助学习各种开发和测试技能/Pytorch深度学框架/平台开发实战
数据分析与自动化办公
数据采集/Pandas与数据处理技术/ECharts与数据可视化技术/爬虫实战/自动化办公/批量文件处理
UI自动化测试与高级项目实战
Web自动化测试/App自动化测试/ PageObject设计模式
接口自动化测试
接口协议分析/Mock实战/服务端接口测试
性能测试
性能测试流程与方法/JMeter 脚本参数化/Grafana监控系统搭建
简历指导与模拟面试
1V1简历指导/模拟真实面试/测试开发岗面试全攻略名企私教服务
名企专家1v1辅导/行业专家技术指导/针对性解决工作难题/绩效提升辅导与晋升复盘
课程亮点
名企私教服务 先学习后付费 高额奖学金
专属社群+晚自习在线答疑
5V1全方位辅导作业+考试强化学习效果
简历修改 模拟面试 就业内推 面试复盘