Как правильно сгруппировать параметризованные тесты в Pytest? - PullRequest
2 голосов
/ 08 июля 2019

В настоящее время я использую следующую комбинацию хитов Pytest для настройки идентификаторов узлов для конкретного модуля:

# In test_module.py
def pytest_generate_tests(metafunc):
    if not is_relevant_metafunc(metafunc):
        return
    args = []
    fids = []
    for test_class, test_name, test_args in collect_external_tests():
        args.append(test_args)
        fids.append("Tests.%s.%s" % (test_class, test_name))

    metafunc.parametrize(["arg1", "arg2"], args, ids=fids)

# In conftest.py
def pytest_collection_modifyitems(session, config, items):
    for item in items:
        if not is_relevant_item(item):
            continue
        item._nodeid = item.callspec.id
        item._location = tuple(list(item.location)[:-1] + [item.callspec.id])

Средняя причина этого заключается в том, что я хочу, чтобы параметризованные тесты были разбиты наразличные разделы («классы») в выходном XML-файле JUnit, который затем можно агрегировать и отображать отдельно.

По умолчанию pytest создает следующую иерархию:

root
 |_ test_module
    |_ test_module.test_func[param_a_1]
    |_ test_module.test_func[param_b_2]
    |_ ...
    |_ test_module.test_func[param_z_36]

хотелось бы иметь что-то похожее на следующую иерархию:

root
 |_ test_module
    |_ a
       |_ test_module.test_func[param_a_1]
       |_ ...
       |_ test_module.test_func[param_a_25]
    |_ b
       |_ test_module.test_func[param_b_1]
       |_ ...
       |_ test_module.test_func[param_b_12]
    |_ ...

Есть ли лучший способ сделать это?

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