当前位置: 首页 > news >正文

Pytest本地插件定制及发布指南

前言

PyTest 是目前自动化测试领域使用非常广泛的一个测试框架,基于Python脚本的自动化,通常都会结合该框架完成测试脚本的管理和运行调度。

而Pytest之所以强大,除了前面我们介绍过它的Fixture夹具功能,还有一个很重要的方面就是它强大的生态,也就是它非常强大的插件支持。仅官方显示的插件清单已有1600多个

请添加图片描述

而实际工作中,除了通过Pytest丰富的插件生态完成增强外,对于我们的一些个性化需求,我们要自行完成插件开发其实也非常方便,当然这也是Pytest 插件生态能如此繁荣的基础。

本文我们就结合一个基本案例介绍下如何完成Pytest的本地插件开发。

Pytest 插件的实现原理

Pytest的插件机制,其实主要是通过它提供的钩子函数(hook)和命令行扩展来实现的。

钩子函数

钩子函数是 Pytest 提供的一类特殊函数,允许插件在特定的测试事件发生时执行自定义代码。常用的钩子函数包括如:

  • pytest_addoption: 用于添加命令行选项。
  • pytest_configure: 在测试运行之前进行配置。
  • pytest_runtest_setup: 在每个测试用例执行之前调用。
  • pytest_runtest_teardown: 在每个测试用例执行之后调用。
  • pytest_sessionfinish: 在测试会话结束时调用。

命令行选项

通过 pytest_addoption 钩子,插件可以定义自定义的命令行选项。这使得用户在运行测试时可以控制插件的行为。例如,可以添加一个选项来启用或禁用某些功能。

配置对象

在钩子函数中,插件可以访问 Pytest 的配置对象(config),该对象包含命令行选项、测试上下文和其他配置信息。通过配置对象,插件可以获取用户输入的选项并相应地调整其行为。

数据存储

插件可以在钩子函数中使用配置对象来存储和管理数据。例如,可以在 pytest_configure 中初始化一个列表,在每个测试用例执行后将数据存储到这个列表中,最终在 pytest_sessionfinish 中输出结果。

hookimpl 装饰器

Pytest中,钩子函数可以使用 @pytest.hookimpl 装饰器来控制钩子的执行顺序和行为。主要参数包括:

  • tryfirst: 如果设置为 True,该钩子将在其他同类钩子之前运行。通常在需要优先处理特定逻辑时使用。
  • trylast: 与 tryfirst 相反,设置为 True 则该钩子将在其他同类钩子之后运行。

通过这种方式,插件可以精确控制在测试执行过程中的各个阶段插入自定义逻辑。

实操案例

本文我们将开发一个本地的Pytest 插件,用来记录每个测试用例的执行时间,并在测试结束后提供汇总统计信息。

环境准备

创建一个新的目录用于你的插件:

mkdir pytest_timing_plugin
cd pytest_timing_plugin

插件实现代码

在插件目录中,创建一个名为 pytest_timing_plugin.py 的文件:

# pytest_timing_plugin.pyimport pytest
import timedef pytest_addoption(parser):parser.addoption("--timing", action="store_true", help="Enable timing report")@pytest.hookimpl(tryfirst=True)
def py
http://www.dtcms.com/a/330951.html

相关文章:

  • Redis7学习--十大数据类型 bitmap、Hyperloglog、GEO、Stream、bitfield
  • PAT乙级_1073 多选题常见计分法_Python_AC解法_含疑难点
  • mysql查询中的filesort是指什么
  • Linux软件编程:进程和线程
  • 火山引擎数智平台发布 Data Agent“一客一策“与 AI 数据湖“算子广场“
  • 【Python】新手入门:什么是python字符编码?python标识符?什么是pyhon保留字?
  • 【数据集介绍】多种飞机检测的YOLO数据集介绍
  • 服务器数据恢复—误删服务器卷数据的数据恢复案例
  • 配置docker pull走http代理
  • 集成电路学习:什么是Video Processing视频处理
  • 网络原理-HTTP
  • 【论文阅读】基于多变量CNN模型的可穿戴外骨骼机器人人体运动活动识别
  • Notepad++插件开发实战:从零打造效率工具
  • 边缘光效果加流光效果
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.14
  • 测试开发的社区:测试之家
  • 从根源到生态:Apache Doris 与 StarRocks 的深度对比 —— 论开源基因与长期价值的优越性
  • lib.dom.d.ts
  • 速通C++类型转换(代码+注释)
  • 【自动化测试】Web自动化测试 Selenium
  • docker rm删除容器命令入门教程
  • [论文阅读] 人工智能 + 软件工程 | 从模糊到精准:模块化LLM agents(REQINONE)如何重塑SRS生成
  • Flink CDC 实战:实时监听 MySQL Binlog 并同步到 Kafka
  • 监控插件SkyWalking(二)集成方法
  • kafka 单机部署
  • 【Android】适配器与外部事件的交互
  • Mybatis学习笔记(三)
  • [激光原理与应用-267]:理论 - 几何光学 - 胶卷相机的组成和工作原理
  • PostgreSQL 免安装
  • tomcat 定时重启