- Главный класс 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