Устранение путаницы, вызванной слишком большим количеством способов запуска unittest в Python
Я пытаюсь реализовать полный и чистый способ тестирования пакетов Python, который бы соответствовал следующим требованиям:
- выполнять тесты на чистых машинах без их настройки (virtualenv)
- собрать результаты с разных платформ
- собрать результаты от нескольких интерпретаторов Python
- покрытие кода (объединение результатов многократного выполнения в один отчет)
- иметь возможность генерировать отчет о покрытии кода XML, чтобы система сборки могла отслеживать, как это изменение со временем.
- быть в состоянии включить отключить тесты на основе платформы
- перед тестами выполните несколько команд, например pep8 или autopep8
- запускать тесты параллельно.
Я использовал несколько подходов: nose + pytest
, tox + pytest
но недавно обнаружил, что pytest
должен быть в состоянии сделать большинство вещей.
Основная проблема заключается в том, что я не смог найти четкого сравнения относительно того, когда было бы лучше использовать тот или иной подход.
Может кто-то объяснить это и дать некоторые варианты использования или ограничения этих конфигураций? ... просто чтобы было ясно, когда вы выбираете тот или иной подход.
В конце концов я хочу иметь эти варианты:
quicktest
- запускать тесты локально, обязательно перед каждым коммитомfulltest
- Полные тесты, запуск их на всех доступных платформах, обязательно перед выпуском новой версии
1 ответ
py.test полностью покрывает все ваши потребности, это плюсы по сравнению с другими бегунами, такими как нос:
- светильники с инжекцией зависимостей - устраняют необходимость сложного упора для настройки теста
- простая, но мощная система плагинов с множеством полезных плагинов - плагины, такие как pytest-xdist, позволяют тестировать на всех платформах по мере необходимости, включая windows, pytest-cov выполняет покрытие, pytest-cache помогает запускать только последние неудачные тесты и т. д.
- Параметризация позволяет использовать подход с однократной записью и выполнением нескольких тестов с использованием декларативных параметров.
- использование простого оператора assert против сложного java-подобного синтаксиса.assertEquals ( http://pytest.org/latest/assert.html)
- все больше и больше