Преимущества pytest
- он простой
- он функциональный, в коробке идет большое количество киллер фич
- он логичный
- он расширяемый
- он умный, можно запускать тесты на unittest, doctest
- код тестов меньше и проще
Ставим
pip install -U pytest
Или через easy_install
easy_install -U pytest
Или из пакета
Качаем пакет http://pypi.python.org/pypi/pytest
python pytest/setup.py install
Единственно при оффлайн установке стоит учесть что для работы pytest нужно еще 2 пакета - colorama и py
Пробуем
Забегая в перед скажу что все тестовые функции должны начинаться с префикса test_*.
# tests.py
def test_first_our_passed():
assert True
def test_first_our_failed():
assert False
Запустим тест в консоли py.test test.py
============================= test session starts =============================
platform win32 -- Python 2.7.5 -- py-1.4.20 -- pytest-2.5.2
collected 2 items
tests_first.py .F
================================== FAILURES ===================================
____________________________ test_first_our_failed ____________________________
def test_first_our_failed():
> assert False
E assert False
tests_first.py:6: AssertionError
===================== 1 failed, 1 passed in 0.13 seconds ======================
Из коробки получаем довольно информативный вывод
Структура проекта
Есть два устоявшихся принципа по организации тестового проекта
Все тесты находятся в папке test рядом с пакетами проекта
/myproj
__init__.py
project.py
/test
test_func_1.py
test_func_2.py
Второй вариант - папка с тестами находится в самом пакете проекта
/myproj
__init__.py
project.py
/test
test_func_1.py
test_func_2.py
Разница не большая, а скорее дело вкуса.
Структура тестов
В принципа здесь все банально. Для рассмотрения будем использовать простой тестовый проект.
/myproj
__init__.py
project.py
# project.py
def pp(val):
return val + 1
Первый принцип - все тесты описаны в виде тестовых функциях
def test_positive():
assert pp(1) == 2
def test_negative():
assert pp(1) == 1
Второй принцип - все тесты описаны в виде методов тестового класса
class TestProject:
def test_positive(self):
assert pp(1) == 2
def test_negative(self):
assert pp(1) == 1
На тестах данные принцип практически не сказывается.
Варианты запуска
Из коробки в pytest предусмотрено несколько вариантов запуска тестов.Через специальную утилиту py.test.exe
py.test.exe test_project.py
В консоли через питон
python -m "pytest.main('test directory')"
Вызов pytest в коде
if __name__ == '__main__':
pytest.main('test_project.py')
+ никто не отменял сабпроцесс;)
Комментариев нет:
Отправить комментарий