Fork me on GitHub

Тестирование в Python

Общие ссылки

Фреймворки тестирования

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

unittest

источник: https://devpractice.ru/unit-testing-in-python-part-2/

элементы unittest

  • Test fixture – обеспечивает подготовку окружения для выполнения тестов, а также организацию мероприятий по их корректному завершению (например очистка ресурсов).
  • Test case – это элементарная единица тестирования, в рамках которой проверяется работа компонента тестируемой программы (метод, класс, поведение и т.п.). Для реализации этой сущности используется класс TestCase.
  • Test suite – это коллекция тестов, которая может в себя включать как отдельные test case’ы так и целые коллекции (т.е. можно создавать коллекции коллекций). Коллекции используются с целью объединения тестов для совместного запуска.
  • Test runner – это компонент, которые оркестрирует (координирует взаимодействие) запуск тестов и предоставляет пользователю результат их выполнения.

интерфейс командной строки

  • запуск всех тестов
 python -m unittest test_calc.py
  • Запуск тестов из класса CalcTest.
python -m unittest utest_calc.CalcTest
  • запуск Test Discovery
python -m unittest

Работа с TestCase

При выборе имени класса наследника от TestCase можете руководствоваться следующим правилом: [ИмяТестируемойСущности]Tests. [ИмяТестируемойСущности] – это некоторая логическая единица, тесты для которой нужно написать.

имена тестов будем начинать с префикса test_. Далее, под словом тест будем понимать метод класса-наследника от TestCase, который начинается с префикса test_.

Все методы класса TestCase можно разделить на три группы: * методы, используемые при запуске тестов; * методы, используемые при непосредственном написании тестов (проверка условий, сообщение об ошибках); * методы, позволяющие собирать информацию о самом тесте.

Методы, используемые при запуске тестов.

  • setUp() - вызывается перед запуском теста, используется для подготовки окружения для теста.
  • tearDown() - вызывается после завершения работы теста/

методы setUp() и tearDown() вызываются для всех тестов в рамках класса, в котором они переопределены.

  • setUpClass() - Метод действует на уровне класса, т.е. выполняется перед запуском тестов класса.
@classmethod
def setUpClass(cls):
    ...
  • tearDownClass() - запускается после выполнения всех методов класса
@classmethod
def tearDownClass(cls):
    ...
  • fail(msg=None) - метод сигнализирует о том, что произошла ошибка в тесте.
  • countTestCases() - Возвращает количество тестов в объекте класса-наследника от TestCase.
  • id() - Возвращает строковый идентификатор теста. Как правило это полное имя метода, включающее имя модуля и имя класса.

  • TestCase класс предоставляет набор assert-методов для проверки и генерации ошибок:

    - assertEqual(a, b)          a == b
    - assertNotEqual(a, b)       a != b
    - assertTrue(x)              bool(x) is True
    - assertFalse(x)             bool(x) is False
    - assertIs(a, b)             a is b
    - assertIsNot(a, b)          a is not b
    - assertIsNone(x)            x is None
    - assertIsNotNone(x)         x is not None
    - assertIn(a, b)             a in b
    - assertNotIn(a, b)          a not in b
    - assertIsInstance(a, b)     isinstance(a, b)
    - assertNotIsInstance(a, b)  not isinstance(a, b)
    
  • Assert’ы для контроля выбрасываемых исключений и warning’ов:

    - assertRaises(exc, fun, *args, **kwds)  - Функция fun(*args, **kwds) вызывает исключение exc
    - assertRaisesRegex(exc, r, fun, *args, **kwds) - Функция fun(*args, **kwds) вызывает исключение exc, сообщение которого совпадает с регулярным выражением r
    - assertWarns(warn, fun, *args, **kwds) - Функция fun(*args, **kwds) выдает сообщение warn
    - assertWarnsRegex(warn, r, fun, *args, **kwds) - Функция fun(*args, **kwds) выдает сообщение warn и оно совпадает с регулярным выражением r
    
  • Assert’ы для проверки различных ситуаций:

    - assertAlmostEqual(a, b)   round(a-b, 7) == 0
    - assertNotAlmostEqual(a, b)    round(a-b, 7) != 0
    - assertGreater(a, b)   a > b
    - assertGreaterEqual(a, b)  a >= b
    - assertLess(a, b)  a < b
    - assertLessEqual(a, b) a <= b
    - assertRegex(s, r) r.search(s)
    - assertNotRegex(s, r)  not r.search(s)
    - assertCountEqual(a, b)    a и b имеют одинаковые элементы (порядок неважен)
    
  • ипо-зависимые assert’ы, которые используются при вызове assertEqual(). Приводятся на тот случай, если необходимо использовать конкретный метод.

    - assertMultiLineEqual(a, b)       строки (strings)
    - assertSequenceEqual(a, b)        последовательности (sequences)
    - assertListEqual(a, b)            списки (lists)
    - assertTupleEqual(a, b)           кортежи (tuplse)
    - assertSetEqual(a, b)             множества или неизменяемые множества (frozensets)
    - assertDictEqual(a, b)            словари (dicts)
    

social