前言
场景:存在一个增删改查相关的操作功能,当增加操作用例失败时,删除、修改、查询操作不执行,这种场景该怎么来处理呢?
Pytest 框架提供了一个pytest-dependency
插件帮我们做了这件事情,我们只需要简单的使用即可。
pytest-dependency 详解 (建议掌握程度:☆☆☆☆)
安装
- 在命令行窗口输入:
pip install pytest-dependency
- 查看安装版本:
pip show pytest-dependency
使用
使用方法 : 用 @pytest.mark.dependency()
对所依赖的用例进行标记,使用@pytest.mark.dependency(depends=["测试用例名称"])
引用依赖,测试用例名称可以是多个
说明:当依赖的用例执行失败,被依赖的用例直接跳过
依赖用例失败示例:
# !/usr/bin/python3
# _*_coding:utf-8 _*_
""""
# @Time :2021/7/9 23:54
# @Author : king
# @File :test_dependency.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import pytest
@pytest.mark.dependency()
def test_add():
print("我是 test_add 用例")
assert False
@pytest.mark.dependency(depends=["test_add"])
def test_update():
print("我是 test_update 用例")
assert False
@pytest.mark.dependency(depends=["test_add"])
def test_delete():
print("我是 test_delete 用例")
assert True
@pytest.mark.dependency(depends=["test_add"])
def test_select():
print("我是 test_select 用例")
assert True
if __name__ == '__main__':
pytest.main(["-s"])
执行结果:
Testing started at 23:59 ...
F:\pytest_demo\Scripts\python.exe "D:\JetBrains\PyCharm 2019.2.5\helpers\pycharm\_jb_pytest_runner.py" --path E:/pytest_demo/class_05/test_dependency.py
Launching pytest with arguments E:/pytest_demo/class_05/test_dependency.py in E:\pytest_demo\class_05
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- F:\pytest_demo\Scripts\python.exe
cachedir: .pytest_cache
rootdir: E:\pytest_demo\class_05
plugins: assume-2.4.3, dependency-0.5.1, ordering-0.6, rerunfailures-10.1
collecting ... collected 4 items
test_dependency.py::test_add FAILED [ 25%]我是 test_add 用例
test_dependency.py:13 (test_add)
@pytest.mark.dependency()
def test_add():
print("我是 test_add 用例")
> assert False
E assert False
test_dependency.py:17: AssertionError
test_dependency.py::test_update SKIPPED (test_update depends on test...) [ 50%]
Skipped: test_update depends on test_add
test_dependency.py::test_delete SKIPPED (test_delete depends on test...) [ 75%]
Skipped: test_delete depends on test_add
test_dependency.py::test_select SKIPPED (test_select depends on test...) [100%]
Skipped: test_select depends on test_add
================================== FAILURES ===================================
__________________________________ test_add ___________________________________
@pytest.mark.dependency()
def test_add():
print("我是 test_add 用例")
> assert False
E assert False
test_dependency.py:17: AssertionError
---------------------------- Captured stdout call -----------------------------
我是 test_add 用例
=========================== short test summary info ===========================
FAILED test_dependency.py::test_add - assert False
======================== 1 failed, 3 skipped in 0.04s =========================
Process finished with exit code 0
Assertion failed
Assertion failed
依赖用例成功示例:
# !/usr/bin/python3
# _*_coding:utf-8 _*_
""""
# @Time :2021/7/9 23:54
# @Author : king
# @File :test_dependency.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import pytest
@pytest.mark.dependency()
def test_add():
print("我是 test_add 用例")
assert True
@pytest.mark.dependency(depends=["test_add"])
def test_update():
print("我是 test_update 用例")
assert False
@pytest.mark.dependency(depends=["test_add"])
def test_delete():
print("我是 test_delete 用例")
assert True
@pytest.mark.dependency(depends=["test_add"])
def test_select():
print("我是 test_select 用例")
assert True
if __name__ == '__main__':
pytest.main(["-s"])
执行结果:
多个依赖用例存在失败示例:
# !/usr/bin/python3
# _*_coding:utf-8 _*_
""""
# @Time :2021/7/9 23:54
# @Author : king
# @File :test_dependency.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import pytest
@pytest.mark.dependency()
def test_add():
print("我是 test_add 用例")
assert True
@pytest.mark.dependency()
def test_update():
print("我是 test_update 用例")
assert False
@pytest.mark.dependency(depends=["test_add", "test_update"])
def test_delete():
print("我是 test_delete 用例")
assert True
@pytest.mark.dependency(depends=["test_add"])
def test_select():
print("我是 test_select 用例")
assert True
if __name__ == '__main__':
pytest.main(["-s"])
执行结果:
总结
- 用
@pytest.mark.dependency()
对所依赖的用例进行标记,使用@pytest.mark.dependency(depends=["测试用例名称"])
引用依赖,测试用例名称可以是多个 - 用例多存在多个依赖时,只要存在一个依赖失败,被依赖用例就跳过,所有依赖成功才执行
以上为内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!
如果觉得文章不错,欢迎关注微信公众号,微信公众号每天推送相关测试技术文章