Комментарии 8
Вы заменили идиоматический питон (pytest более питонический чем сам питон) на птичий язык новоизобретённого DSL'я. Если ваши тесты заменить на "простой pytest" (даже без фикстур и параметризации), то:
1) Читаемость повысится
2) Вероятность что-то сломать кратно понизится.
3) Вероятность тонких багов в тестах и фикстурах значительно снизится.
Цель тестов — быть настолько простыми, чтобы баги в тестах можно было ловить глазами. Это не всегда можно, и некоторые тесты требуют отвратительно большого количества кода на подготовку, но стремиться надо к тестам вида
test_2x2_is_4():
assert mul(2, 2) == 4
Т.е. все тонкости pytest_generate_tests, параметризации фикстур и т.д. право на существование имеют, но не как best practices, а "от безысходности".
Дело в том, что на первый план, в этом случае, была выведена функциональность и вариативность тестов с большим объемом входящих тестовых данных.
Конечно, я понимаю что тестирование должно быть простым, и тесты должны быть такими, чтобы "баги ловились глазами", но в данном случае проблемы с отловкой багов могут возникнуть лишь в случае неправильного подхода к подготовке тестовых данных.
Кроме того, стоит отметить что на тесты где функционал выноса данных за рамки этот код никак не повлияет, если правильно подойти к пункту фильтрации.
В статье я задействую чистый Python
Для работы с yaml вы используете стороннюю библиотеку, стоит указать какую. Указание версий для Python и pytest, тоже будет не лишним.
Я не так давно использовал библиотеку ddt (data driven test) для решения похожей задачи
https://ddt.readthedocs.io/en/latest/
С декораторами код получается читаемый, имена тестов в отчёте генерируются на основе данных, данные в отдельном модуле в виде словарей или списков.
Параметризация из файла в py.test