В 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')
Следующий результат теста будет отображаться —