Я использую pytest для тестирования программного обеспечения в последнее время, но сталкиваюсь с проблемой при динамической параметризации тестовых приборов. При тестировании, я хотел бы быть в состоянии предоставить возможность для:Проблемы с дополнениями pytest и динамически параметризующими тестовыми приборами
A) Проверьте конкретный файл, указав его имя файла
B) Проверка всех файлов в смонтированном корневой каталог
Ниже приводится мой текущий conftest.py. Я хочу, чтобы это было, если вы выберете опцию A (--file_name), создайте параметризованное тестовое устройство, используя указанное имя файла. Если вы выберете вариант B (--all_files), укажите список всех файлов в качестве параметризованного тестового оборудования.
import os
import pytest
def pytest_addoption(parser):
parser.addoption("--file_name", action="store", default=[], help="Specify file-under-test")
parser.addoption("--all_files", action="store_true", help="Option to test all files root directory")
@pytest.fixture(scope='module')
def file_name(request):
return request.config.getoption('--file_name')
def pytest_generate_tests(metafunc):
if 'file_name' in metafunc.fixturenames:
if metafunc.config.option.all_files:
all_files = list_all_files()
else:
all_files = "?"
metafunc.parametrize("file_name", all_files)
def list_all_files():
root_directory = '/opt/'
if os.listdir(root_directory):
# files have .cool extension that need to be split out
return [name.split(".cool")[0] for name in os.listdir(root_directory)
if os.path.isdir(os.path.join(root_directory, name))]
else:
print "No .cool files found in {}".format(root_directory)
Чем больше я возиться с этим, я могу только получить один из вариантов рабочих, но не другой ... Что мне нужно сделать, чтобы получить оба варианта (и, возможно, более) динамически создавать параметризованные тестовые приборы ?
Это частично работает ... это действительно странно, но похоже, что некоторые из моих тестов проходят, а некоторые нет. Для отказов я получаю объект AttributeError: «list» не имеет атрибута «endswith». Кажется, что иногда я получаю unparametrized fixture, потому что я могу видеть в тестовом журнале вывод всего списка файлов, а не только 1 запись. – t88
@ t88 Вероятно, это потому, что 'default = []' в 'parser.addoption (" - имя_файла ", ...)' неверно. Для согласованности вы должны выполнить 'default = '''. Если это не поможет, покажите нам тест. Вы удалили функцию 'file_name'? – freakish
Вы правы! Также выясняется, что files.append (fn) возвращал список, и если бы я указал имя_файла, он вернул бы список и не использовал указанную строку в качестве параметризованного тестового прибора. Благодаря! – t88