Использование print
Часто люди пользующие питон дебажат свои скрипты с помощью использования принтов. По умолчанияю pytest пишет весь stout и stderr. В предыдущем посте эта тема рассматривалась. Для отключения этой особенности нужно использовать параметр —capture или маску -s.
Посмотрим на небольшой (надуманный) пример:
# use_debug.py
@py.test.mark.parametrize(«v», range(1, 5))
def test_parity(v):
print(«Value: %d» % v)
assert v % 2
>>>py.test use_debug.py -s -v —tb line
============================= test session starts =============================
platform win32 — Python 2.7.5 — py-1.4.20 — pytest-2.5.2 — C:Python27python.exe
plugins: teamcity-messages, rerunfailures
collected 4 items
use_debug.py:40: test_parity[1] Value: 1
PASSED
use_debug.py:40: test_parity[2] Value: 2
FAILED
use_debug.py:40: test_parity[3] Value: 3
PASSED
use_debug.py:40: test_parity[4] Value: 4
FAILED
================================== FAILURES ===================================
c:JOB3_TestSolutionBloguse_debug.py:43: assert (2 % 2)
c:JOB3_TestSolutionBloguse_debug.py:43: assert (4 % 2)
===================== 2 failed, 2 passed in 0.03 seconds ======================
Как видим в консоли напечатались входные значения.
Автовключение дебага
Для этого предусмотрен флаг —pdb. Если тест пофелился, то py.test прогонит его на тех же данных, но уже с включенным питоновским дебагером pdb.
>>>py.test use_debug.py -s -v —tb line —pdb
platform win32 — Python 2.7.5 — py-1.4.20 — pytest-2.5.2 — C:Python27python.exe
plugins: teamcity-messages, rerunfailures
collected 4 items
use_debug.py:64: test_parity[1]
>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>
> c:job3_testsolutionbloguse_debug.py(67)test_parity()
-> assert v % 2
(Pdb)
Брейкпоинты
Из коробки py.test предоставляет возможность в коде явно указать брекпоинт.
# use_debug.py
@py.test.mark.parametrize(«v», range(1, 5))
def test_parity(v):
py.test.set_trace()
assert v % 2
При каджом вызове тестовой функции test_parity в месте устанвки брейкпоинта py.test будет запускать pdb
>>>py.test use_debug.py -s -v —tb line
use_debug.py:62: test_v[1]
>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>
> c:job3_testsolutionbloguse_debug.py(65)test_v()
-> assert v % 2
(Pdb)
Ссылки
http://pytest.org/latest/usage.html#dropping-to-pdb-python-debugger-on-failures
http://pytest.org/latest/usage.html#setting-a-breakpoint-aka-set-trace
Автор: Евгений Курочкин