Выбираем Test Runner | OTUS

Выбираем Test Runner

QA_Deep_16.7_site-5020-0a51c5.png

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

Unittest

Unittest встроен в стандартную библиотеку Python. Он содержит и тестовую среду, и Test Runner. У unittest есть ряд требований для написания и выполнения тестов: — вы помещаете тесты в методы класса unittest.TestCase; — вы используете специальные методы утверждения класса unittest.TestCase, а не встроенный оператор assert.

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

import unittest

class TestSum(unittest.TestCase):

def test_sum(self):
self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

def test_sum_tuple(self):
self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")

if __name__ == '__main__':
unittest.main()

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

$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_sum_unittest.py", line 9, in test_sum_tuple
self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

Примечание: будьте внимательны, если пишете тесты для выполнения и в 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:

$ pip install nose2
$ python -m nose2
.F
===============================================================
FAIL: test_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_sum_unittest.py", line 9, in test_sum_tuple
self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

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

Pytest

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

Есть и другие возможности: — поддержка встроенного оператора assert (не нужно использовать специальные методы self.assert); — поддержка фильтрации; — возможность перезапуска, начиная с последнего неудачного теста; — экосистема из сотен плагинов, расширяющих функциональность.

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

def test_sum():
assert sum([1, 2, 3]) == 6, "Should be 6"

def test_sum_tuple():
assert sum((1, 2, 2)) == 6, "Should be 6"

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

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

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто