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

Pytest 插件介绍和开发

插件分类

插件分三种:

1.外部插件(三方开发的)

安装方式:pip install

哪里可以找到三方插件: https://pypi.org/ 

常用插件:

 pytest-ordering

作用:指定执行顺序

使用:(fixture用法类似)@pytest.mark.run(order=1) 

* 尽量不要指定用例顺序,避免发现不到问题

pytest-xdist

作用:可以让用例并行与分布式执行

使用:命令行输入 pytest -n CPU核数 xxx.py或者pytest -n auto

2.本地插件

本地插件就是fixture执行

pytest自动模块发现机制执行fixture(conftest.py存放的)

3.内置插件

内置插件是指勾子函数Hook,pytest执行其实会执行很多函数。具体执行顺序可看:https://ceshiren.com/t/topic/8807

pytest hook 介绍

  • 是个函数,在系统消息触时被系统调用
  • 自动触发机制
  • Hook 函数的名称是确定的
  • pytest有非常多的勾子函数
  • 使用时直接编写函数体

*pytest执行顺序

以下就是为Hook函数,存在 ...\Python38\Lib\site-packages\_pytest\hookspec.py

如果我们需要使用,只需要将这个函数在conftest.py里面重新改写即可

root
└── pytest_cmdline_main
├── pytest_plugin_registered
├── pytest_configure
│ └── pytest_plugin_registered
├── pytest_sessionstart
│ ├── pytest_plugin_registered
│ └── pytest_report_header
├── pytest_collection
│ ├── pytest_collectstart
│ ├── pytest_make_collect_report
│ │ ├── pytest_collect_file
│ │ │ └── pytest_pycollect_makemodule
│ │ └── pytest_pycollect_makeitem
│ │ └── pytest_generate_tests
│ │ └── pytest_make_parametrize_id
│ ├── pytest_collectreport
│ ├── pytest_itemcollected
│ ├── pytest_collection_modifyitems
│ └── pytest_collection_finish
│ └── pytest_report_collectionfinish
├── pytest_runtestloop
│ └── pytest_runtest_protocol
│ ├── pytest_runtest_logstart
│ ├── pytest_runtest_setup
│ │ └── pytest_fixture_setup
│ ├── pytest_runtest_makereport
│ ├── pytest_runtest_logreport
│ │ └── pytest_report_teststatus
│ ├── pytest_runtest_call
│ │ └── pytest_pyfunc_call
│ ├── pytest_runtest_teardown
│ │ └── pytest_fixture_post_finalizer
│ └── pytest_runtest_logfinish
├── pytest_sessionfinish
│ └── pytest_terminal_summary
└── pytest_unconfigure

以下为例子:

Pytest 编写插件 - 添加命令行参数实现切换测试环境和生产环境

重写pytest_addoption hook方法

自定义命令行参数,下面自定义了一个组为manshuo , --env的命令

conftest.py

def pytest_addoption(parser):mygroup = parser.getgroup("manshuo")  # group 将下面所有的 option都展示在这个group下。mygroup.addoption("--env",  # 注册一个命令行选项default='test',  # 参数的默认值dest='env',  # 存储的变量,为属性命令,可以使用Option对象访问到这个值,暂用不到help='set your run env'  # 帮助提示 参数的描述信息)

编写把命令行输入的参数提取出来并根据参数判断是测试环境还是生产环境的方法

conftest.py

@pytest.fixture(scope='session')
def cmdoption(request):myenv = request.config.getoption("--env") #返回命令行参数--env,取出跟在env后面的参数if myenv == 'test':datapath = "data/test/data.yml"elif myenv == 'dev':datapath = "data/dev/data.yml"with open(datapath) as f:datas = yaml.safr_load(f)return myenv,datas

编写用例并使用这个插件

test_demo.py

def test_option(cmdoption):print(cmdoption)

检验:

命令行输入pytest --env dev test_demo.py::test_option

输出:

test_demo.py::test_option hook setup
dev environment
dev
PASSED========================================= 1 passed in 0.03s =========================================

【保姆级教程】手把手教你 测试开发平台必备之高阶插件定制开发,包教包会!

http://www.dtcms.com/a/360231.html

相关文章:

  • 极客时间AI 全栈开发实战营毕业总结(2025年8月31日)
  • NCCL-TEST ib集群测试UCX代替方案
  • mit6.031软件构造 笔记 Testing
  • ROI、 binning、下采样功能区别
  • windows编译minicap.so文件
  • 由题构造 嵌入汇编(汇编)
  • NAS Docker 安装N8N
  • 计算机视觉与深度学习 | 双目立体特征提取与匹配算法综述——理论基础、OpenCV实践与MATLAB实现指南
  • 猛犸Lark max 无线麦克风录音爆音问题的解决
  • 【STC库函数】使用芯片自带的EEPROM来保存掉电不丢失的数据
  • 开发常用工具专栏
  • 赵玉平《梁山政治》读书笔记(下部)
  • wifi控制舵机
  • WinExec
  • Nginx反向代理及配置
  • c++ 线程局部存储(Thread-Local Storage,TLS)
  • Langflow Memory 技术深度分析
  • java--浅拷贝深拷贝
  • Introduction to GIS —— Chapter 3(Vector Data Model)
  • 雪花算法生成分布式ID
  • AI 智能体汇总,自动执行任务的“真 Agent”
  • 动态规划入门(三):一些经典动态规划模型
  • 赵玉平《刘备谋略》读书笔记(下部)
  • 小迪自用web笔记22
  • 01背包day35
  • 设计模式 | 常见的设计模式(单例、工厂、代理、适配器、责任链等等)
  • VisionProC#联合编程火花塞距离检测与VisionPro操作
  • libmodbus库,c++配置方法
  • 【CUDA入门·Lesson 1】Ubuntu实战:CUDA 概念、nvidia-smi 工具与 GPU 参数详解
  • 在Unity中,让子物体不随父物体移动或转动的方法!