Модульные тесты — тесты, предназначенные для тестирования отдельного небольшого модуля(unit) нашего приложения. Не стоит путать модуль в тестировании — unit и модуля python — module. В качестве модуля может выступать функция, метод класса, небольшой класс.
Интеграционные тесты — тесты, предназначенные для тестирования взаимодействия нескольких модулей.
Базовые понятия в тестах:
- Test fixture — подготовка данных, необходимых для выполнения одного или нескольких тестов, а также очистка «мусора» после выполнения тестов.
- Test case(тестовый случай) — объект, позволяющий протестировать одну определенную операцию (последовательность шагов, условий и параметров, необходимых для проверки тестируемой функции).
- Test suite(тестовый набор) — набор тестов, позволяющих всесторонне протестировать определенный функционал. Кроме тестов, может содержать общие для набора правила подготовки данных для тестирования.
- Test runner — компонент, организующий запускающий наши тесты и предоставляющий результаты.
Структура теста:
def test_case(self, *params):
# prepare test
# perform action
# assert results
Структура тестов unittest
import unittest
class TestSuite(unittest.TestCase):
# Выполняется перед запускомтестов, содержащихся в классе
def setUpClass(self):
pass
# Выполняется перед запуском каждого теста в классе
def setUp(self):
pass
# Выполняется после выполнения каждого теста в классе
def tearDown(self):
pass
# Выполняется после выполнения всех тестов в классе
def tearDownClass(self):
pass
def test_my_test(self):
# Test Case
pass
Вспомогательные библиотеки
DDT
DDT (Data-Driven Tests) — фреймворк, предназначенный для параметризацией тестов.
Часто нам необходимо выполнить одни и те же шаги для различных данных. В таком случае мы можем использовать ddt. (https://ddt.readthedocs.io/en/latest/).
@ddt.ddt # Декорирует класс для дальнейшего использования DDT
@ddt.data(*values) # Позволяет параметризовать тест
@ddt.unpack # Распаковывает параметры для параметризации
Nose
Для запуска тестов, написанных в unittest
, в качестве раннера часто используют nose.
nosetests -s tests # запуск всех тестов в заданной папке.
nosetests -s tests/test_simple.py # Запуск всех тестов в модуле.
nosetests -s tests/test_simple.py:TestSimple # запуск всех тестов в классе
nosetests -s tests/test_simple.py:TestSimple.test_bad_nums # запуск конкретного теста.
nosetests -s tests --with-coverage --cover-erase # запуск с подсчетом покрытия.
# Позволяет исключить из подсчета покрытия библиотеки
nosetests -s tests --with-coverage --cover-erase --cover-package=./data-src # запуск с подсчетом покрытия только модулей в заданном 'package'
Подпишитесь на рассылку