pytest插件开发

插件的加载方式

  • 外部插件: 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 会处理,这样就可以添加进命令行执行

posted @ 2021-06-14 20:04  陈科科  阅读(251)  评论(0编辑  收藏  举报