Найти тему

Выбираем Test Runner

Оглавление
Статья подготовлена для студентов курса «Python QA Engineer» в образовательном проекте OTUS.

Test Runner – это приложение, используемое для запуска тестов, проверки выходных данных, а также предоставления инструментов, необходимых для диагностики и отладки тестов. В Python доступно много тест-раннеров. Вот тройка наиболее популярных:

— unittest;

— nose или nose2;

— pytest.

Unittest

Unittest встроен в стандартную библиотеку Python. Он содержит и тестовую среду, и Test Runner. У unittest есть ряд требований для написания и выполнения тестов:

— вы помещаете тесты в методы класса unittest.TestCase;

— вы используете специальные методы утверждения класса unittest.TestCase, а не встроенный оператор assert.

Пример кода с unittest:

-2

Запустив файл в командной строке, мы увидим один успешный тест (обозначен точкой) и один сбой (обозначен буквой F):

-3

Примечание: будьте внимательны, если пишете тесты для выполнения и в Python 2, и в Python 3. Например, в Python 2.7 и ниже unittest обозначается unittest2.

Для получения дополнительной информации о unittest, смотрите официальную документацию.

Nose

Написав сотни или тысячи тестов для приложения, вам станет всё труднее использовать результаты unittest. И вот здесь на помощь приходит nose. Он совместим с любыми тестами, написанными для среды unittest, и может стать неплохой заменой. Правда, развитие nose в качестве приложения с открытым исходным кодом немного поотстало, поэтому появился форк nose2. Если начинаете только изучать автоматизированное тестирование, используйте nose2 вместо nose.

Итак, для начала работы с nose2 выполните его установку из PyPI. Nose2 обнаружит все тестовые сценарии с именами test_*.py, которые унаследованы от unittest.

Пример TestCase:

-4

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

Pytest

Pytest тоже поддерживает тесты, созданные с unittest. Его плюс заключается в особенностях написания TestCase. TestCase в pytest — это серия функций в файле Python, которые начинаются с имени test_.

Есть и другие возможности:

— поддержка встроенного оператора assert (не нужно использовать специальные методы self.assert);

— поддержка фильтрации;

— возможность перезапуска, начиная с последнего неудачного теста;

— экосистема из сотен плагинов, расширяющих функциональность.

Написание теста TestSum в pytest выглядит так:

-5

Здесь удалены базовый класс TestCase и любое использование классов в принципе, а также точка входа с командной строки. Как обычно, дополнительная информация представлена на сайте Pytest.

Материал взят из статьи Anthony Shaw «Getting Started With Testing in Python».