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 =========================================

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

相关推荐
PhotonixBay5 小时前
共聚焦成像核心原理:针孔、PSF与三维形貌测量技术
人工智能·测试工具·算法
程序员小远5 小时前
接口测试之文件上传
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
kft13148 小时前
Playwright + 本地 AI,从录制到自愈闭环的一站式自动化测试平台。
人工智能·测试工具
想你依然心痛11 小时前
AtomCode Skills 开发实战:从零编写自定义斜杠命令
rxjava·插件开发·自定义命令·扩展能力·skill.md·skills 开发
蒲公英内测分发1 天前
Typeoff:当 AI 开始参与工作,我们可能需要重新思考“输入”这件事
人工智能·测试工具·项目管理·语音输入·ai语音输入
LT10157974441 天前
2026年手机机型兼容性测试选型指南:安卓机型碎片化、APP闪退UI错乱如何解决
android·测试工具·ui·智能手机
Luminbox紫创测控2 天前
GB/T 5137.3 2020标准:汽车安全玻璃耐辐照与耐模拟气候试验方法
人工智能·测试工具·汽车·安全性测试·uv·测试标准
Alan_6912 天前
聊聊 Swagger/Postman/Apifox 的真实选型与 Python 项目实战
python·测试工具·postman