Отладка pytest¶
Остановиться внутри теста на Python.
Предпосылки¶
debugpy, установленный в тот интерпретатор, который выполняет ваши тесты:
pytestв том же окружении
Короткий путь: тест под курсором¶
или
Bugsaur запускает выбранный pytest-узел через debugpy. Адаптер, окружение и
рабочий каталог приходят из профиля.
Буфер должен быть сохранён, а сохранённые точки останова не подхватываются: запуск теста использует только точки текущего запроса.
Длинный путь: профиль pytest¶
Для запуска под отладчиком целого набора или каталога:
[profiles.tests]
adapter = "debugpy"
adapter_command = "${root}/.venv/bin/python"
program = "."
args = ["-x", "tests/"]
[profiles.tests.launch_arguments]
module = "pytest"
python = "${root}/.venv/bin/python"
module = "pytest" — это аварийный выход: debugpy принимает ключ module, а
в схеме профиля отдельного поля для него нет.
-x останавливает на первом падении, а под отладчиком обычно именно это и нужно.
Полезные аргументы pytest¶
| Аргумент | Что делает |
|---|---|
-x |
остановиться после первого падения |
-s |
не перехватывать вывод, чтобы print доходил до панели Logs |
-k выражение |
только тесты с подходящим именем |
tests/test_orders.py::test_create |
один конкретный тест |
Два интерпретатора¶
adapter_command выбирает интерпретатор, который запускает адаптер;
launch_arguments.python — тот, который выполняет ваш код. Обычно это один и тот
же venv, и No module named debugpy почти всегда означает, что один из них
указывает в другое место.
Если не работает¶
| Симптом | Что делать |
|---|---|
No module named debugpy |
поставьте его в интерпретатор из adapter_command |
No module named pytest |
поставьте pytest в то же окружение |
| Точки останова в фикстуре не срабатывают | фикстура закэширована с прошлого теста — проверьте её scope |
ImportError для вашего пакета |
рабочий каталог — Рабочий каталог |
Не видно вывода print |
добавьте -s |