Я выполняю несколько тестов в пакете тестов и хочу напечатать каждое имя модуля в пакете без дублирования кода.
Итак, я хотел вставить некоторый код в __init__.py
или conftest.py
, который даст мне имя исполняемого модуля.
Допустим, мои тестовые модули называются: checker1, checker2 и т.д ...
Моя структура каталогов выглядит так:
tests_dir/
├── __init__.py
├── conftest.py
├── checker1
├── checker2
└── checker3
Итак, внутри __init__.py
Я попытался вставить:
def module_name():
return os.path.splitext(__file__)[0]
Но он все равно дает мне __init__.py
из каждого файла, когда я его вызываю.
Я также пытался использовать прибор внутри conftest.py, например:
@pytest.fixture(scope='module')
def module_name(request):
return request.node.name
Но, похоже, мне все еще нужно определить функцию внутри каждого модуля, чтобы получить module_name
в качестве параметра.
Каков наилучший способ заставить это работать?
Edit:
В конце концов, то, что я сделал, объясняется здесь:
conftest.py
@pytest.fixture(scope='module', autouse=True)
def module_name(request):
return request.node.name
пример для тестового файла с тестовой функцией. То же самое нужно добавить к каждому файлу и каждой функции:
checker1.py
from conftest import *
def test_columns(expected_res, actual_res, module_name):
expected_cols = expected_res.columns
actual_cols = actual_res.columns
val = expected_cols.difference(actual_cols) # verify all expected cols are in actual_cols
if not val.empty:
log.error('[{}]: Expected columns are missing: {}'.format(module_name, val.values))
assert val.empty
Обратите внимание на прибор module_name
, который я добавил к параметрам функции.
- Ожидаемые_рес и Фактические_рес - панды Dataframes из файла Excel.
- log - это
Logger
объект из logging
пакета