Устранение путаницы, вызванной слишком большим количеством способов запуска 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)
  • все больше и больше
Другие вопросы по тегам