Программно создавать приспособления Pytest - PullRequest
0 голосов
/ 25 октября 2018

У меня есть каталог, полный файлов данных для подачи в тесты, и я загружаю их, используя что-то вроде

@pytest.fixture(scope="function")
def test_image_one():
     return load_image("test_image_one.png")

По мере роста набора тестов это становится невозможным.Есть ли способ программно создавать светильники?В идеале это будет что-то вроде:

for fname in ["test_image_one", "test_image_two", ...]:
    def pytest_fixutre_function():
        return load_image("{}.png".format(fname))
    pytest.magic_create_fixture_function(fname, pytest_fixutre_function)

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Напишите прибор, который считывает файл изображения и возвращает содержимое файла и использует косвенную параметризацию для его вызова.Пример:

import pathlib
import pytest


files = [p for p in pathlib.Path('images').iterdir() if p.is_file()]


@pytest.fixture
def image(request):
    path = request.param
    with path.open('rb') as fileobj:
        yield fileobj.read()


@pytest.mark.parametrize('image', files, indirect=True, ids=str)
def test_with_file_contents(image):
    assert image is not None

Тестовый запуск даст:

test_spam.py::test_with_file_contents[images/spam.png] PASSED
test_spam.py::test_with_file_contents[images/eggs.png] PASSED
test_spam.py::test_with_file_contents[images/bacon.png] PASSED
0 голосов
/ 25 октября 2018

Примерно так:

@pytest.mark.parametrize('pic', ['f1', 'f2', 'f3'])
def test_pics(pic):
    load_image(pic)

Подробнее смотрите в документации https://docs.pytest.org/en/latest/parametrize.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...