Как я могу отладить мои тесты на Python в Tox с помощью PUDB? - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь отладить кодовую базу python, которая использует tox для модульных тестов.Один из провальных тестов оказывается трудным из-за выяснения, и я хотел бы использовать pudb для пошагового выполнения кода.

Сначала подумалось, что нужно просто pip install pudb, а затем в коде модульного теста добавить import pudb и pudb.settrace().Но это приводит к ModuleNotFoundError:

>       import pudb
>E       ModuleNotFoundError: No module named 'pudb'
>tests/mytest.py:130: ModuleNotFoundError
> ERROR: InvocationError for command '/Users/me/myproject/.tox/py3/bin/pytest tests' (exited with code 1)

Заметив, что папка проекта .tox приводит к пониманию, что в tox есть папка site-packages, что имеет смысл, так как суть tox состоит в том, чтобы управлять тестированием под другим virtualenv.сценарии.Это также означает, что есть файл конфигурации tox.ini с разделом deps, который может выглядеть следующим образом:

[tox]
envlist = lint, py3

[testenv]
deps =
    pytest
commands = pytest tests

добавление pudb в список deps должно разрешить ModuleNotFoundError, но приводит к другой ошибке:

self = <_pytest.capture.DontReadFromInput object at 0x103bd2b00>

    def fileno(self):
>       raise UnsupportedOperation("redirected stdin is pseudofile, "
                                   "has no fileno()")
E       io.UnsupportedOperation: redirected stdin is pseudofile, has no fileno()

.tox/py3/lib/python3.6/site-packages/_pytest/capture.py:583: UnsupportedOperation

Итак, я застрял в этой точке.Разве нельзя использовать pudb вместо pdb в Tox?

1 Ответ

0 голосов
/ 19 мая 2018

Существует пакет под названием pytest-pudb, который переопределяет точки входа pudb в автоматизированной тестовой среде, такой как tox, для успешного перехода в отладчик.

Чтобы использовать его, просто сделайте свой toxФайл .ini содержит записи pudb и pytest-pudb в своих зависимостях testenv, например:

[tox]
envlist = lint, py3

[testenv]
deps =
    pytest
    pudb
    pytest-pudb
commands = pytest tests
...