1. 程式人生 > 其它 >pytest外掛開發

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 會處理,這樣就可以新增進命令列執行