Учебники

UnitTest Framework – модуль Py.test

В 2004 году Хольгер Крекел переименовал свой пакет std , имя которого часто путали с именем Стандартной библиотеки, поставляемой с Python, на имя (только немного менее запутанное) имя «py». Хотя пакет содержит несколько подпакетов, теперь он почти полностью известен своей структурой py.test.

Платформа py.test установила новый стандарт для тестирования Python и стала очень популярной среди многих разработчиков сегодня. Изящные и Pythonic идиомы, которые он ввел для написания тестов, позволили писать наборы тестов в гораздо более компактном стиле.

py.test – неоригинальная альтернатива стандартному модулю unittest Python. Несмотря на то, что это полнофункциональный и расширяемый инструмент тестирования, он имеет простой синтаксис. Создать набор тестов так же просто, как написать модуль с парой функций.

py.test работает во всех операционных системах POSIX и WINDOWS (XP / 7/8) с Python версий 2.6 и выше.

Монтаж

Используйте следующий код для загрузки модуля pytest в текущем дистрибутиве Python, а также утилиты py.test.exe. Тесты могут быть запущены с использованием обоих.

pip install pytest

использование

Вы можете просто использовать оператор assert для подтверждения ожиданий теста. Интроспекция astest в pytest будет разумно сообщать о промежуточных значениях выражения assert, освобождая вас от необходимости изучать многие имена унаследованных методов JUnit .

# content of test_sample.py
def func(x):
   return x + 1
   
def test_answer():
   assert func(3) == 5

Используйте следующую командную строку для запуска вышеуказанного теста. После запуска теста на консоли отображается следующий результат:

C:\Python27>scripts\py.test -v test_sample.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyth
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 1 items
test_sample.py::test_answer FAILED
================================== FAILURES =====================
_________________________________ test_answer _________________________________
   def test_answer():
>  assert func(3) == 5
E     assert 4 == 5
E     + where 4 = func(3)
test_sample.py:7: AssertionError
========================== 1 failed in 0.05 seconds ====================

Тест также можно запустить из командной строки, включив модуль pytest с помощью ключа -m.

python -m pytest test_sample.py

Группировка нескольких тестов в классе

Когда вы начинаете проводить более нескольких тестов, часто имеет смысл группировать тесты логически, по классам и модулям. Давайте напишем класс, содержащий два теста –

class TestClass:
   def test_one(self):
      x = "this"
      assert 'h' in x
   def test_two(self):
      x = "hello"
      assert hasattr(x, 'check')

Следующий результат теста будет отображаться –