Как избежать многократного вызова pytest_generate_testsPython

Программы на Python
Anonymous
Как избежать многократного вызова pytest_generate_tests

Сообщение Anonymous »

У меня есть набор тестов, в котором
  • Главный класс Reгрессия содержит общие тестовые функции, наследуемые дочерними классами
  • Я динамически параметризую тестовые переменные во время инициализации, используя крючок pytest_generate_tests.
  • Инициализация теста зависит от запускаемого дочернего класса
    Например. Test_window будет иметь различную инициализацию
    Test_door будет иметь различную инициализацию
Моя проблема:
  • Для обоих тестовых случаев я использую один и тот же параметр.
  • Таким образом, перехватчик pytest_generate_tests вызывается 2 раза для генерации одних и тех же тестовых данных (думаю, я не смог найти его в документации). !!!)
  • Есть ли лучший способ реализовать этот сценарий, чтобы избежать накладных расходов на вызов pytest_generate_tests 2 раза.
Родительский класс:
class Regression:
def test_work(self, data):
test_func1_call_using data(data)

def test_agg(self, data):
test_func2_call_using data(data)

Тестирование регрессии наследования класса 1:@pytest.mark.usefixtures('generic_test_setup')
class Test_window(Regression):
dummy_var=0

Тестирование регрессии наследования класса 2:@pytest.mark.usefixtures('generic_test_setup')
class Test_door(Regression):
dummy_var=0

conftest.py:
@pytest.fixture(scope="class")
def generic_test_setup(request, env):
# do setup

def pytest_generate_tests(metafunc):
class_name = metafunc.cls.__name__.split('_')[1]

logging.info(f"Collection Phase :: Initializing test_data for {class_name} !!!")

# Initialize the test data based on the calling class
test_data = # generated dictionary value with ids and test data

id_entity = [d['entity'] for d in test_data]
if "data" in metafunc.fixturenames:
metafunc.parametrize("data", test_data, ids=id_entity )

@pytest.fixture
def data(request):
return request.param


Подробнее здесь: https://stackoverflow.com/questions/692 ... iple-times

Вернуться в «Python»