Pull to refresh

Comments 8

Вы заменили идиоматический питон (pytest более питонический чем сам питон) на птичий язык новоизобретённого DSL'я. Если ваши тесты заменить на "простой pytest" (даже без фикстур и параметризации), то:


1) Читаемость повысится
2) Вероятность что-то сломать кратно понизится.
3) Вероятность тонких багов в тестах и фикстурах значительно снизится.


Цель тестов — быть настолько простыми, чтобы баги в тестах можно было ловить глазами. Это не всегда можно, и некоторые тесты требуют отвратительно большого количества кода на подготовку, но стремиться надо к тестам вида


test_2x2_is_4():
   assert mul(2, 2) == 4

Т.е. все тонкости pytest_generate_tests, параметризации фикстур и т.д. право на существование имеют, но не как best practices, а "от безысходности".

Дело в том, что на первый план, в этом случае, была выведена функциональность и вариативность тестов с большим объемом входящих тестовых данных.


Конечно, я понимаю что тестирование должно быть простым, и тесты должны быть такими, чтобы "баги ловились глазами", но в данном случае проблемы с отловкой багов могут возникнуть лишь в случае неправильного подхода к подготовке тестовых данных.


Кроме того, стоит отметить что на тесты где функционал выноса данных за рамки этот код никак не повлияет, если правильно подойти к пункту фильтрации.

Голосовать не могу, поддержу amarao комментарием. О metafunc напомнили — спасибо, но лучше в реальности такой огород не городить. У меня очень хороший критерий полезности «наворотов» был: коллега мануальный тестировщик, которого я обучал. Если он понял как работает, то можно использовать.

Если большие наборы данных и они как-то генерируются, то, скорее всего, лучше будет использовать pickle.

Ну, и раз есть приглашение к дискуссии: «как лучше писать YAML файл?». У вас в примере (да и у меня в практике) тестовые данные это обычно плоские таблицы, поэтому ответ такой — YAML не нужен. Мне проще использовать старый добрый CSV с названиями колонок. Конфигурации — другое дело, там вполне оправдано.
В статье я задействую чистый Python

Для работы с yaml вы используете стороннюю библиотеку, стоит указать какую. Указание версий для Python и pytest, тоже будет не лишним.
Согласен, действительно. Поправил этот момент.

Я не так давно использовал библиотеку ddt (data driven test) для решения похожей задачи
https://ddt.readthedocs.io/en/latest/
С декораторами код получается читаемый, имена тестов в отчёте генерируются на основе данных, данные в отдельном модуле в виде словарей или списков.

Sign up to leave a comment.

Articles