Я начал работать над довольно большим (многопоточным) проектом Python с множеством (модульных) тестов. Самая важная проблема заключается в том, что для запуска приложения требуется заранее заданная среда, которая реализуется диспетчером контекста. До сих пор мы использовали исправленную версию средства запуска модульных тестов, которая запускала бы тесты внутри этого менеджера, но не позволяла переключать контекст между различными тестовыми модулями.
И нос, и pytest поддерживают такую вещь, потому что они поддерживают приспособления на многих уровнях детализации, поэтому мы планируем переключиться на нос или pytest. Обе эти библиотеки также будут поддерживать тесты «тегирования» и запускать только эти помеченные подмножества, что мы также хотели бы сделать.
Я немного просмотрел документацию и по носу, и по pytest, и, насколько я могу судить, большая часть этих библиотек по существу поддерживает одни и те же функции, за исключением того, что они могут называться по-другому или требовать немного другого синтаксиса. Кроме того, я заметил некоторые небольшие различия в доступных плагинах (в носу есть поддержка многопроцессорности, например, в pytest нет).
Кажется, дьявол кроется в деталях, что означает (по крайней мере, часто) в личном вкусе, и нам лучше выбрать библиотеку, которая лучше всего соответствует нашему личному вкусу.
Так что я бы попросил субъективного аргументации, почему я должен использовать нос или pytest, чтобы выбрать комбинацию библиотеки / сообщества, которая наилучшим образом соответствует нашим потребностям.
pytest
поддерживает многопроцессорную поддержку через плагин pytest-xdist .manager.__enter__()
в своемTestCase.setUp()
, так иmanager.__exit__()
в своемtearDown()
.Ответы:
Раньше я использовал Nose, потому что он использовался по умолчанию в Pylons. Мне это совсем не понравилось. У него были заусеницы конфигурации в нескольких местах, практически все, казалось, было сделано с помощью недокументированного плагина, что сделало все еще более косвенным и запутанным, и поскольку он по умолчанию выполнял тесты unittest, он регулярно прерывал трассировку Unicode, скрывая источники ошибок.
Я был очень доволен py.test последние пару лет. Будучи в состоянии просто написать тест с
assert
из коробки заставляет меня терпеть не писать тесты пути меньше, и взлом , что мне нужно на вершину ядра было довольно легко. Вместо фиксированного интерфейса плагина у него просто куча крючков и довольно понятный исходный код, если вам нужно будет копать дальше. Я даже написал адаптер для запуска тестов Testify под py.test, и у меня было больше проблем с Testify, чем с py.test.Тем не менее, я слышал, что в Носе есть плагины для бесклассовых тестов и самоанализа в настоящее время, так что вы, вероятно, справитесь с любым из них. Я все еще чувствую, что могу взяться за дело с py.test, и я могу понять, что происходит, когда он ломается.
источник