Я вот сказал, что лучше, чем в pytest, параметризацию вряд ли получится сделать. Давайте немного расскажу, почему она хороша:
- Pytest на этапе импорта тестов знает, сколько будет кейсов. Это помогает оценивать время работы, лучше распараллеливать тесты с pytest-xdist и всё такое. Со всякими менеджерами контекста и циклами такого не добиться.
- Это не добавляет вложенности. В питоне код часто пытается убежать вправо, и если есть возможность не добавлять отступов, стоит этим воспользоваться.
- Туда можно передать переменную с кейсами, которая создаётся где-то ещё. Причём у меня даже был интересный случай, когда в
parametrize
передавалась переменная со списком правил валидации чего-то там, а сам тест проверял, что каждое правило покрыто отдельным тестом. Тест для тестов 🙃
Так что если прям сильно не нравится, что выходит какой-то страшный длинный декоратор, просто создайте отдельную переменную, и всё будет отлично:
...,
...,
)
@pytest.mark.parametrize('given, expected', USER_CASES)
def test_user(given, expected):
...```