Статья подготовлена для студентов курса «Python QA Engineer» в образовательном проекте OTUS.
Test Runner – это приложение, используемое для запуска тестов, проверки выходных данных, а также предоставления инструментов, необходимых для диагностики и отладки тестов. В Python доступно много тест-раннеров. Вот тройка наиболее популярных:
— unittest;
— nose или nose2;
— pytest.
Unittest
Unittest встроен в стандартную библиотеку Python. Он содержит и тестовую среду, и Test Runner. У unittest есть ряд требований для написания и выполнения тестов:
— вы помещаете тесты в методы класса unittest.TestCase;
— вы используете специальные методы утверждения класса unittest.TestCase, а не встроенный оператор assert.
Пример кода с unittest:
Запустив файл в командной строке, мы увидим один успешный тест (обозначен точкой) и один сбой (обозначен буквой F):
Примечание: будьте внимательны, если пишете тесты для выполнения и в 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:
Nose2 предоставляет много флагов командной строки для фильтрации выполняемых тестов. Документация здесь.
Pytest
Pytest тоже поддерживает тесты, созданные с unittest. Его плюс заключается в особенностях написания TestCase. TestCase в pytest — это серия функций в файле Python, которые начинаются с имени test_.
Есть и другие возможности:
— поддержка встроенного оператора assert (не нужно использовать специальные методы self.assert);
— поддержка фильтрации;
— возможность перезапуска, начиная с последнего неудачного теста;
— экосистема из сотен плагинов, расширяющих функциональность.
Написание теста TestSum в pytest выглядит так:
Здесь удалены базовый класс TestCase и любое использование классов в принципе, а также точка входа с командной строки. Как обычно, дополнительная информация представлена на сайте Pytest.
Материал взят из статьи Anthony Shaw «Getting Started With Testing in Python».