pytest外掛開發
阿新 • • 發佈:2021-06-15
外掛的載入方式
- 外部外掛: 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 會處理,這樣就可以新增進命令列執行