Как правильно управлять тестовыми данными с помощью pytest? - PullRequest
0 голосов
/ 23 января 2019

Мне нужно создать автоматические тесты для нескольких связанных приложений, и я столкнулся с одной проблемой, связанной с управлением данными тестов между тестами.Проблема в том, что одни и те же данные должны совместно использоваться несколькими приложениями и / или разными API.Теперь у меня есть следующая структура с pytest, которая работает хорошо для меня, но я сомневаюсь, что использование управления тестовыми данными в conftest.py является правильным подходом:

Общая структура выглядит так:

tests/
    conftest.py
    app1/
        conftest.py
        test_1.py
        test_2.py
    app2/
        conftest.py
        test_1.py
        test_2.py
test_data/
    test_data_shared.py
    test_data_app1.py
    test_data_app2.py

Вотпример тестовых данных в tests / conftest.py:

from test_data.test_data_shared import test_data_generator, default_data

@pytest.fixture
def random_email():
    email = test_data_generator.generate_random_email()
    yield email
    delete_user_by_email(email)

@pytest.fixture()
def sign_up_api_test_data(environment, random_email):
"""
environment is also fixture, capture value from pytest options
"""
    data = {"email": random_email, "other_data": default_data.get_required_data(), "hash": test_data_generator.generate_hash(environment)}
    yield data
    do_some_things_with_data(data)

Очень удобно использовать прибор для этих целей, потому что постусловия, области видимости и другие приятные вещи (обратите внимание, что приложения имеют много логики и взаимосвязи,поэтому я не могу просто жестко закодировать данные или перенести их, например, в файл json). Подобные вещи можно найти в tests / app1 / conftest.py и tests / app2 / conftest.py для данных, которые используются в app1 и app 2 соответственно.

Итак, вот две проблемы: 1. conftest.py стать монстром с большим количеством кода 2. как я знаю, использование conftest для тестовых данных - плохой подход или я ошибаюсь?

Заранее спасибо!

1 Ответ

0 голосов
/ 23 января 2019

Я использую conftest.py для тестовых данных.
Приспособления являются рекомендуемым способом предоставления тестовых данных для испытаний.
conftest.py - это рекомендуемый способ обмена данными между несколькими тестовыми файлами.

Так же как и для №2. Я думаю, что нормально использовать conftest.py для тестовых данных.

Теперь для # 1 "conftest.py становится слишком большим".

Специально для файла conftest.py верхнего уровня, в test / conftest.py, вы можете переместить этот контент в один или несколько плагинов pytest. Поскольку файлы conftest.py можно рассматривать как «локальные плагины», процесс их преобразования в плагины не слишком сложен.

См. https://docs.pytest.org/en/latest/writing_plugins.html

...