目录
这篇是最重要的 测试文件中需要用到的 总的来说 有以下几个点 mark、fixture、hook、参数化、各种插件
1、标记(Markers):
自定义插件
自定义标记得用途是筛选用例,只执行部分用例,共分为三个步骤
- 在pytest.init注册标记
[pytest] addopts = -vs # addopts 用于指定默认的命令行选项 markers = login: 登录相关 db: 数据库相关 upload: 上传相关
- 在用例中通过装饰器添加标记
@pytest.mark.db def test_example(): print('使用数据库')
- 在命令行参数中加-m使用标记
[pytest] addopts = -vs -m 'db or login' # -v(verbose 模式)用于显示详细的测试执行信息(包括每个测试用例的名称和状态) # -s(关闭输出捕获)允许测试中的 print 或日志输出直接显示在控制台(默认情况下 pytest 会捕获这些输出)。 # -m(标记筛选)只运行被标记为 @pytest.mark.db 或 @pytest.mark.login 的测试用例。
内置标记
内置标记由pytest注册的,目的不是为了筛选用例,而是对用例进行特殊处理,这种方法不需要注册可以直接使用
- @pytest.mark.skip > 无条件跳过用例
- @pytest.mark.skipif > 有条件跳过用例
- @pytest.mark.xfail > 预期失败
@pytest.mark.skip(reason="Not implemented yet") def test_skip(): assert 1 + 1 == 2
2、夹具(Fixtures):
夹具得用法
其实这个东西你就理解成unittest框架中的setup teardown就是测试用例执行之前 执行之后自动运行的代码@pytest.fixture def numbers(): print('我是前置代码 用例运行之前执行') yield print('我是后置代码 用例运行之前执行')
夹具作用域
pytest中夹具的作用域 主要有五种:
- function(默认作用域,每个测试函数都会调用一次夹具。
- class(每个测试类调用一次夹具
- module(每个测试模块也就是当前的测试文件调用一次夹具。
- package(每个目录调用一次夹具。
- session(整个测试会话也就是所有的测试用例只调用一次夹具
import pytest
# function scoped fixture
@pytest.fixture(scope="function")
def func_scope_fixture():
print("Setup for each test function")
yield
print("Teardown for each test function")
附:
这个实际运用中,例如在接口自动化测试中, 可以通过fixture提供全局的session
实现TCP复用,参数共享,cookies关联,日志记录,BaseURL
3、钩子(hook):
钩子:被pytest自动调用的函数,在 pytest
中,钩子(hook)是特殊的插件机制,可以让你在测试运行的不同阶段插入自定义行为。
通过使用钩子,你可以扩展或修改
pytest
的默认行为。例如,你可以在每个测试开始或结束时执行特定的操作,或在测试收集阶段修改发现的测试项。
为了让pytest
使用这些钩子,你需要将这些代码放在项目中的conftest.py
文件中。pytest
会自动发现并应用conftest.py
中定义的钩子。
- 写在confest文件中
- 符合hook规范定义import _pytest.hookspec
# conftest.py
def pytest_configure(config):
print("Configuring the test session.")
def pytest_sessionstart(session):
print("Test session starting.")
参数化和插件下篇说 写不动了hh
3、pytest实现参数化-CSDN博客