2、pytest核心功能(进阶用法)

news/2025/3/26 2:23:40/

目录

1、标记(Markers):

自定义插件

内置标记

2、夹具(Fixtures):

夹具得用法

夹具作用域

3、钩子(hook):


这篇是最重要的 测试文件中需要用到的 总的来说 有以下几个点 mark、fixture、hook、参数化、各种插件

1、标记(Markers):

  • 自定义插件

自定义标记得用途是筛选用例,只执行部分用例,共分为三个步骤

  1. pytest.init注册标记
     
    [pytest]addopts = -vs   # addopts 用于指定默认的命令行选项markers =login: 登录相关db: 数据库相关upload: 上传相关
  2. 在用例中通过装饰器添加标记
     
    python">@pytest.mark.db
    def test_example():print('使用数据库')
  3. 在命令行参数中加-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     > 预期失败
     
    python">@pytest.mark.skip(reason="Not implemented yet")
    def test_skip():assert 1 + 1 == 2

2、夹具(Fixtures):

  • 夹具得用法

    python">@pytest.fixture
    def numbers():print('我是前置代码 用例运行之前执行')yieldprint('我是后置代码 用例运行之前执行')
    其实这个东西你就理解成unittest框架中的setup teardown就是测试用例执行之前 执行之后自动运行的代码
     
  • 夹具作用域

        pytest中夹具的作用域 主要有五种: 

  1. function(默认作用域,每个测试函数都会调用一次夹具。
  2. class(每个测试类调用一次夹具
  3. module(每个测试模块也就是当前的测试文件调用一次夹具。
  4. package(每个目录调用一次夹具。
  5. session(整个测试会话也就是所有的测试用例只调用一次夹具
python">import pytest# function scoped fixture
@pytest.fixture(scope="function")
def func_scope_fixture():print("Setup for each test function")yieldprint("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
python"># conftest.py
def pytest_configure(config):print("Configuring the test session.")def pytest_sessionstart(session):print("Test session starting.")


参数化和插件下篇说 写不动了hh
3、pytest实现参数化-CSDN博客

4、pytest常用插件-CSDN博客


http://www.ppmy.cn/news/1583107.html

相关文章

【论文笔记】生成对抗网络 GAN

GAN 2014 年,Ian Goodfellow 等人提出生成对抗网络(Generative Adversarial Networks),GAN 的出现是划时代的,虽然目前主流的图像/视频生成模型是扩散模型(Diffusion Models)的天下&#xff0c…

HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践

HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践 一、鸿蒙AI功能开发的生态定位与核心能力 在鸿蒙操作系统(HarmonyOS)的生态布局中,AI功能开发是提升用户体验与设备智能化的核心方…

debian12运行sql server2022(docker):导入.MDF .LDF文件到容器

过程大纲 docker run在基础配置之上增加挂载信息 修改文件权限,确保所有用户有rw权限 进入docker交互命令行 登录数据库 执行数据库EXE命令导入数据库文件数据 docker run在基础配置之上增加挂载信息 docker run -d \-v /home/ying/Downloads/StuXk:/var/opt/mssql…

关于 Redis 缓存一致

为了提升系统性能,常常会引入 Redis 作为缓存。数据通常会存储在持久化的数据源(如 MySQL 数据库)中,同时在 Redis 中保存一份副本。当数据源中的数据发生变化时,如果不能及时同步到 Redis 缓存,或者缓存中…

Netty源码—3.Reactor线程模型四

大纲 5.NioEventLoop的执行总体框架 6.Reactor线程执行一次事件轮询 7.Reactor线程处理产生IO事件的Channel 8.Reactor线程处理任务队列之添加任务 9.Reactor线程处理任务队列之执行任务 10.NioEventLoop总结 8.Reactor线程处理任务队列之添加任务 (1)Reactor线程执行一…

带你了解Java无锁并发CAS

带你了解Java无锁并发CAS 在多核处理器时代,并发编程已成为提升系统性能的核心手段。传统的同步机制(如synchronized和ReentrantLock)通过互斥锁实现线程安全,但其存在以下关键问题: 性能损耗:线程阻塞/唤…

常见中间件漏洞攻略-Tomcat篇

一、 CVE-2017-12615-Tomcat put方法任意文件写入漏洞 第一步:开启靶场 第二步:在首页抓取数据包,并发送到重放器 第三步:先上传尝试一个1.txt进行测试 第四步:上传后门程序 第五步:使用哥斯拉连接 二、后…

《Python实战进阶》No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成

No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成 摘要 持续集成(CI)和持续部署(CD)是现代软件开发中不可或缺的实践,能够显著提升开发效率、减少错误并加速交付流程。本文将探讨如何利用 GitHub Actio…