插件的加载方式

  • 外部插件: pip install 安装的插件
  • 本地插件: pytest 自动模块发现机制(conftest.py存放)
  • 内置插件: 代码内部的_pytest目录加载

什么是hook

就是钩子函数

Pytest 有哪些hook函数

pytest 编写自己的插件--添加命令行参数

# 添加一个命令行参数
def pytest_addoption(parser):
mygroup = parser.getgroup("hogwarts") #group 将下面所有的 option都展示在这个group下。
mygroup.addoption("--env", #注册一个命令行选项
default='test', # 参数的默认值
dest='env', # 存储的变量
help='set your run env' # 帮助提示 参数的描述信息
)

demo / 新建一个文件夹

然后新建一个文件conftest.py

from typing import List
import pytest
# import yaml def pytest_collection_modifyitems(session, config, items: List):
for item in items:
print(item) # 添加一个命令行参数
def pytest_addoption(parser):
mygroup = parser.getgroup("hogwarts") # group 将下面所有的 option都展示在这个group下。
mygroup.addoption("--env", # 注册一个命令行选项
default='test', # 参数的默认值
dest='env', # 存储的变量
help='set your run env' # 帮助提示 参数的描述信息
) @pytest.fixture(scope='session')
def cmdoption(request):
env = request.config.getoption("--env", default='test')
# return env
# print(env, '=====')
if env == 'test':
print("test 环境")
datapath = "datas/test/datas.yml"
elif env == 'dev':
print("开发 环境")
datapath = "datas/dev/datas.yml"
return {'host': '127.0.0.1', 'port': '200'}
# with open(datapath) as f:
# datas = yaml.safe_load(f)
# print(datas)
# return env, datas

新建一个文件 test_mm.py

import pytest

@pytest.mark.parametrize("name", ['ha', '23'])
def test_mm(name):
print(name) def test_login():
print('login') def test_login_fail():
print('login')
assert False def test_search():
print('search') def test_env(cmdoption):
print('112')
print(cmdoption)

执行脚本

pytest -s -v --env dev .\test_mm.py::test_env

dev 就会作为参数 传到 cmdoption 中,cmdoption 会处理,这样就可以添加进命令行执行

pytest插件开发的更多相关文章

  1. pytest文档82 - 用例收集钩子 pytest_collect_file 的使用

    前言 pytest 提供了一个收集用例的钩子,在用例收集阶段,默认会查找test_*.py 文件或者 *_test.py文件. 如果我们想运行一个非python的文件,比如用yaml 文件写用例,那么 ...

  2. pytest文档55-plugins插件开发

    前言 前面一篇已经学会了使用hook函数改变pytest运行的结果,代码写在conftest.py文件,实际上就是本地的插件了. 当有一天你公司的小伙伴觉得你写的还不错,或者更多的小伙伴想要你这个功能 ...

  3. python测试框架-pytest

    一.pytest 介绍.运行.参数化和数据驱动.Fixture pytest安装与介绍 官网 : pip install -U pytest 查看版本号:pytest --version 为何选择py ...

  4. Pytest进阶使用

    fixture 特点: 命令灵活:对于setup,teardown可以省略 数据共享:在conftest.py配置里写方法可以实现数据共享,不需要import导入,可以跨文件共享 scope的层次及神 ...

  5. JavaScript学习笔记(四)——jQuery插件开发与发布

    jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...

  6. jira的插件开发流程实践

    怎么开头呢,由于自己比较懒,博客一直不怎么弄,以后克己一点,多传点自己遇到的问题和经历上来,供自己以后记忆,也供需要的小伙伴少走点弯路吧 最近公司项目需要竞标一个运维项目,甲方给予了既定的几种比较常用 ...

  7. Vue插件开发入门

    相对组件来说,Vue 的插件开发受到的关注要少一点.但是插件的功能是十分强大的,能够完成许多 Vue 框架本身不具备的功能. 大家一般习惯直接调用现成的插件,比如官方推荐的 vue-router.vu ...

  8. 【原创】记一次Project插件开发

    一.开发背景 最近在使用微软的Office Project 2010 进行项目管理,看到排的满满的计划任务,一个个地被执行完毕,还是很有成就感的.其实,不光是在工作中可以使用Project进行项目进度 ...

  9. JavaScript学习总结(四)——jQuery插件开发与发布

    jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...

  10. [Tool] Open Live Writer插件开发

    一 前言 Windows Live Writer(简称 WLW)开源之后变成 Open Live Writer(简称 OLW),原先 WLW 的插件在 OLW 下都不能用了,原因很简单,WLW 插件开 ...

随机推荐

  1. 转贴:阿里云ESC-centos7服务器小白搭建FTP教程

    1. 安装vsftpd yum -y install vsftpd 2. 检查vsftpd是否安装成功 rpm -q vsftpd vsftpd-3.0.2-29.el7_9.x86_64 # 检查方 ...

  2. Oracle-展示的时候出现????乱码

    Oracle-展示的时候出现????乱码 配置环境变量: NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16GBK

  3. c#调用键盘输入

    [code]csharpcode: /// <summary> /// 键盘输入模拟 /// </summary> [DllImport("user32.dll&qu ...

  4. NewStarCTF 公开赛 2022 RE WP

    Week 2 Re 前可见古人,后得见来者 chipher = [0x51, 0x5B, 0x4C, 0x56, 0x59, 0x4D, 0x50, 0x56, 0x54, 0x43, 0x7D, 0 ...

  5. 53.cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    1.cin 用法1:最基本,也是最常用的用法,输入一个数字: #pragma warning(disable:4996) #define _CRT_SECURE_NO_WARNINGS 1 #incl ...

  6. Oracle 服务器概念梳理

    Oracle 公司是世界上最大的信息管理软件及服务提供商,因其复杂的关系数据库产品而闻名.Oracle 的关系数据库是世界上第一个支持 SQL 语言的数据库.支持服务器/客户机等部署.Oracle 数 ...

  7. HashMap和ConcurrentHashMap扩容过程

    HashMap 存储结构 HashMap是数组+链表+红黑树(1.8)实现的. (1)Node[] table,即哈希桶数组.Node是内部类,实现了Map.Entry接口,本质是键值对. 下图链表中 ...

  8. urllib.request发送get请求

    发送请求 urllib.request库 模拟浏览器发起一个HTTP请求,并获取请求响应结果 urllib.request.urlopen的语法格式 urllib(url.data = None,[t ...

  9. Unity实现3D物体遮挡血条

    Unity 实现3D物体遮挡血条 前言:在游戏开发中,我们经常会遇到UI和3D物体的层级遮挡问题,最常见的比如血条跟随敌人的时候,多个敌人的血条会遮挡住玩家或者3D物体,去网上查了一下也没有很好的解决 ...

  10. C++/Qt网络通讯模块设计与实现(五)

    在C++/Qt网络通讯模块设计与实现(四)中具体分析了Qt的信号槽.线程相关的知识,即从 Qt::ConnectionType,示例源码,结果论证,归纳总结等四个方面进行了全方面讲解,深刻阐述了代码设 ...