自动化学习2:pytest的高级用法(mark标记/fixture/hook)

一.mark的用法

概念:Pytest提供的mark标记,允许我们标记测试函数,测试类和整个模块。通过不同的标记实现不同的运行策略,如标记冒烟测试用例。

1.注册标记

可以在pytest.ini文件注册自定义标记

除了自己注册的标记外,pytest还内置了一些标记:跳过,预期失败,参数化,调用fixture

第三方插件,也会内置一些标记:执行顺序,执行依赖,失败重试

2.贴上标记(装饰器)

  • 使用装饰器@pytest.mark.markname标记测试函数,测试类。

  • 一个mark可以标记多个测试函数,一个测试函数可以使用多个mark可以

    import pytest

    可标记多个

    @pytest.mark.api
    @pytest.mark.ui
    def test01(): # 函数(写在类外边是函数)
    assert 1 == 1 # 测试通过

    class Test:
    @pytest.mark.e2e
    def test01(self):
    # 方法(写在类里边带有self传递的是方法)
    assert 1 == 2 # 测试失败

3.筛选标记

①仅执行api标记的用例 / 仅执行api或e2e标记的用例

②pytest --markers 可以查看所有的mark标签,包括内置标记和自定义标记

复制代码
pytest -m api  #执行单个
pytest -m 'api or ui' # 执行两个
pytest --markers # 查看所有标记

二.fixture

1.概念:自动的在用例之前,之后完成,用于测试环境的构建和销毁;使用生成器实现前置,后置的分离

2.两种实现方式:

  • 一种是xunit-style,跟unittest框架的机制非常相似,即setup/teardown系列

  • 一种是它自己的fixture机制,以@pytest.fixture装饰器来申明

3.fixture与unnitest的传统单元测试(setup/teardown)区别:

  • 有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。
  • 按模块化的方式实现,每个fixture都可以互相调用。
  • fixture的范围从简单的单元测试到复杂的功能测试,可以对fixture配置参数,或者跨函数function,类class,模块module或整个测试session范围。

4.用法:

复制代码
@pytest.fixture()
def begin():
    print('123')  # 前置代码,在用例之前自动执行

    yield

    print('456')  # 后置代码,在用例执行之后自动执行

调用

复制代码
import pytest

@pytest.mark.api
@pytest.mark.ui
def test01(begin):  # 函数(写在类外边是函数)/使用fixture
    assert 1 == 1  # 测试通过

class Test:
    @pytest.mark.e2e
    @pytest.mark.api
    def test01(self,begin):  # /使用fixture
        # 方法(写在类里边带有self传递的是方法)
        assert 1 == 2  # 测试失败

5.fixture的作用范围:

①支持5级范围

②同一个范围内的用例,共享fixture

③conftest.py创建全局范围fixture

三.hook

概念:Hook函数又称为钩子函数:当pytest在合适的时机,允许进入或退出pytest核心内部

目的:改变pytest原有的处理方式,运行模式;通过这些钩子我们可以对pytest 用例收集、用例执行、报告输出等各个阶段进行干预。

钩子函数参考:pytest合集(9)--- Hook钩子函数_pytest钩子函数-CSDN博客

相关推荐
mykj15511 小时前
英语单词APP解锁学习新方式,智能高效背单词
学习·英语单词app
知识分享小能手2 小时前
深度学习学习教程,从入门到精通,深度学习中的正则化 — 完整知识点与代码示例(7)
人工智能·深度学习·学习
~kiss~3 小时前
Agent 的 未来吗?String: An Agentic OS Where Every App Is a Markdown File
学习
HugoStudio_SWAN3 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
UIU1145 小时前
scanf与cout的误区:探究其内部的机制
c++·学习·c#·scanf
Allen_LVyingbo6 小时前
医疗AI基础2026-构建可靠智能体的编程路径(上)
大数据·数据库·人工智能·python·自动化
智购科技无人售货机工厂店8 小时前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
沫儿笙9 小时前
安川机器人氩弧焊省气装置
机器人·自动化
zyf10441610 小时前
暑期实践日志 Day48:复盘大纲与知识点对照表,系统汇总整理成果
学习·计算机网络·剪辑·暑期实践·课题任务
Wang's Blog11 小时前
Vibe Coding一人即团队系列62: Excel数据分析与可视化自动化
数据分析·自动化·excel