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

目录

1、标记(Markers):

自定义插件

内置标记

2、夹具(Fixtures):

夹具得用法

夹具作用域

3、钩子(hook):


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

1、标记(Markers):

  • 自定义插件

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

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

2、夹具(Fixtures):

  • 夹具得用法

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

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

  1. function(默认作用域,每个测试函数都会调用一次夹具。
  2. class(每个测试类调用一次夹具
  3. module(每个测试模块也就是当前的测试文件调用一次夹具。
  4. package(每个目录调用一次夹具。
  5. session(整个测试会话也就是所有的测试用例只调用一次夹具
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
# 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.mzph.cn/web/73228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

恒流源电路深度解析:各类架构的优缺点与应用场景

点击下面图片,为您提供全新的嵌入式学习路线 文章目录 ①. 单晶体管恒流源②. NPNPNP组合恒流源③. 双晶体管恒流源④. 镜像电流源⑤. 比例电流源⑥. 微电流源⑦. 加射极输出的镜像电流源⑧. 威尔逊电流源⑨.综合对比表⑩.选型建议 恒流源是电子电路中的基础模块&…

研究生入学前文献翻译训练

文献翻译 人工智能《Meta - Learning with Memory - Augmented Neural Networks》one-shot learning:Neural Turing Machines,NTMs《Model - Agnostic Meta - Learning for Fast Adaptation of Deep Networks》Meta - learninggradient stepsfinetune《Attention Is All You …

在IDEA中快速注释所有console.log

在IDEA中快速注释所有console.log 在前端IDEA中,快速注释所有console.log语句可以通过以下步骤实现2: 打开要修改的文件。使用快捷键CtrlF打开搜索框。点击打开使用正则搜索的开关或者通过AltR快捷键来打开。在搜索框输入[]*console.log[]*,…

#C8# UVM中的factory机制 #S8.2.1# factory 机制重载法则

factory机制最伟大的地方在于其具有重载功能。重载并不是factory机制的发明,前面已经介绍过的所有面向对象的语言都支持函数/任务重载,另外,SystemVerilog还额外支持对约束的重载。只是factory机制的重载与这些重载都不一样。 一 问题引出 以8.1.1节的代码清单8-1和代码清…

macOS 15 通过 MacPorts 安装 PHP 7 构建错误找不到符号在 dns.o 中解决方法

构建遇到的问题如下: "_res_9_dn_expand", referenced from:_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_php_parserr in dns.o_zif_dns_get_mx in dns.o..."_res_9_dn_skipname&…

MDK优化等级对浮点运算效率的影响

MDK优化等级:Default模式 和 O0模式 在支持浮点运算的MCU(如STM32的Cortex-M4或Cortex-M7系列)上,执行浮点运算的算法时,MDK编译器的优化等级配置为 default模式(通常是O1或O2)和 O0模式&#…

嵌入式学习第二十八天--栈

栈的基本代码 栈是限定仅在表尾进行插入和删除操作的线性表。 先进后出、后进先出 栈顶:允许操作的一端 栈底:不允许操作的一端 入栈,出栈。 顺序栈 链式栈 302\5 1.创建 CreateSeqStack 2.销毁 DestroySeqStack 3.判断是否为空栈 IsEmptySeqStack 4.判断是否为满…

MySQL中怎么分析性能?

MySQL中主要有4种方式可以分析数据库性能,分别是慢查询日志,profile,Com_xxx和explain。 慢查询日志 先用下面命令查询慢查询日志是否开启, show variables like slow_query_log;# 一般默认都是以下结果 ---------------------…

大模型在支气管哮喘手术全流程风险预测与治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目标与方法 1.3 研究创新点 二、支气管哮喘概述 2.1 定义与发病机制 2.2 分类与临床表现 2.3 诊断标准与方法 三、大模型技术原理与应用现状 3.1 大模型的基本原理 3.2 在医疗领域的应用案例分析 3.3 适用于支气管哮喘预…

《AI Agent智能应用从0到1定制开发》学习笔记:使用RAG技术增强大模型能力,实现与各种文档的对话

思维导图 📚 引言 大型语言模型(如ChatGPT)虽然功能强大,但它们存在一些明显的局限性。这些模型的知识库更新较慢,无法实时学习最新内容,而且对私有数据或特定领域的专业知识了解有限。例如,Ch…

Python 爬虫(4)HTTP协议

文章目录 一、HTTP协议1、HTTP特点2、HTTP工作原理3、HTTP与HTTPS的区别 前言: HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于在客户端和服务器之间传输超文本&#xf…

测试工程 常用Python库

以下是测试工程师在Python中必须掌握的常用库、框架以及提升日常工作效率的技巧总结: 一、必须掌握的Python库与框架 1. 测试框架 unittest Python内置的单元测试框架,提供测试用例、测试套件、断言等功能,适合单元测试和集成测试。核心组件…

【线程安全问题的原因和方法】【java形式】【图片详解】

在本章节中采用实例图片的方式,以一个学习者的姿态进行描述问题解决问题,更加清晰明了,以及过程中会发问的问题都会一一进行呈现 目录 线程安全演示线程不安全情况图片解释: 将上述代码进行修改【从并行转化成穿行的方式】不会出…

Infinite you:flexible photo recrafting while preserving your identity

基于DiT的id保留图像生成面临着多种挑战,缺乏定制模块设计,模型扩展的困难以及高质量数据的匮乏,因此基于flux的解决方案是相对稀缺的,pulid-flux是基于flux的id保留的初步尝试,包括instantx和xlabs-ai的flux.1-dev ip-adapters,现有方法在三个关键方面保险不足:1.身份相…

Unity 实现一个简易可拓展性的对话系统

本人能力有限,一切实现仅供参考,如有不足还请斧正 起因是我看到学校社团内有人做了对话系统的分享,我想了想之前没写过这种东西,而Fungus插件教程太老了,NodeCanvas插件学习成本又比较高,我就干脆寻找资料 加上自己迭代一下,花了一天时间完成了这个对话系统 目录 1.介绍 2.核…

linux常用指令(6)

今天我们继续学习一些linux常用指令,丰富我们linux基础知识,那么话不多说,来看. 1.cp指令 功能描述:拷贝文件到指定目录 基本语法:cp [选项] source dest 常用选项:-r:递归复制整个文件夹 拷贝文件: 拷贝文件夹&am…

Vue 3 中的路由传参详解※※※※

前言 在Vue应用中,路由传参是非常常见的需求,它允许我们在不同的组件之间传递数据。Vue Router提供了两种主要的方式来传递参数:query参数和params参数。下面我们将详细探讨这两种传参方式的使用方法和注意事项。 一、query参数 Query参数…

如何创建一个socket服务器?

1. 导入必要的库 首先,需要导入Python的socket库,它提供了创建和管理socket连接的功能。 python import socket 2. 创建服务器端socket 使用socket.socket()函数创建一个服务器端的socket对象,指定协议族(如socket.AF_INET表示…

lua垃圾回收

lua垃圾回收 lua 垃圾回收 lua 垃圾回收 collectgarbage(“count”)获取当前lua脚本占用内存字节数(单位为KB)。 collectgarbage(“collect”)执行一次垃圾回收。 xxxnil 将变量置为空,会释放内存。 lua中的机制和c#中回收机制很类似 解除羁绊(置为空)。 --垃圾回…

友思特应用 | 行业首创:基于深度学习视觉平台的AI驱动轮胎检测自动化

导读 全球领先的轮胎制造商 NEXEN TIRE 在其轮胎生产检测过程中使用了基于友思特伙伴Neurocle开发的AI深度学习视觉平台,实现缺陷检测率高达99.96%,是该行业首个使用AI平台技术推动缺陷检测自动化流程的企业。 将AI应用从轮胎开发扩展到制造过程 2024年…