Запустите тестовый файл (pytest) в качестве отладки для активного файла в VSCode

#python #debugging #visual-studio-code #pytest

Вопрос:

У меня есть библиотека python (модуль), которая содержит несколько модулей и связанных с ними тестов, следующих довольно стандартной структуре

 project_root
    library_folder
        __init__.py
        module_A
            __init__.py
            sub_module_AA
                __init__.py
                file_AAA.py
            file_AA.py
            file_AB.py
            file_AC.py
        module_B
            __init__.py
            file_BA.py
            file_BB.py
        module_C
            __init__.py
            file_CA.py
            file_CB.py
            file_CC.py
        ...
    tests
        module_A
            test_fileAA.py
            ...
        module_B
            test_fileBA.py
            ...
    pyproject.toml
    ...
 

В настоящее время я выполняю то, что я бы назвал отладкой пещерного человека, помещая a import pdb; pdb.set_trace() в файл с ошибками, а затем вызываю соответствующий тест pytest path/to/test_fileXY.py и жду точки останова. Я хотел бы перенести эту настройку в VSCode, чтобы я мог просто нажать F5 и запустить соответствующие тесты.

Моя проблема в том, что мне нужно позвонить pytest {workspaceDir}/tests/{submodule_path}/test_{filename}.py , чтобы запустить тесты. Я могу подобраться довольно близко через

 {
    "configurations": [
        {
            "name": "Python: Run Current File's Tests",
            "type": "python",
            "request": "launch",
            "module": "pytest",
            "console": "integratedTerminal",
            "args": [
                "${workspaceFolder}/tests/${relativeFileDirname}/test_${fileBasename}"
            ]
        }
    ]
}
 

Однако это приводит {workspaceDir}/tests/library_folder/{submodule_path}/test_{filename}.py к (обратите внимание на дополнительное library_folder в пути. Как это сделать правильно, т. Е. Как создать ссылку на соответствующий тест активного файла?

Ответ №1:

Расширение python имеет встроенную эту функцию:

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Я знаю об этой функции, и она также довольно близка, но не работает для меня. Этот вариант Python: Debug All Tests не работает для меня, потому что мой набор тестов слишком велик, что делает отладку нежелательно медленной. Запуск отдельных тестов с помощью CodeLense работает, но расположение над тестами означает, что мне нужно искать их и каждый раз переключать вкладки. В настоящее время я пытаюсь сделать это через боковое меню, но есть настройка, в которой я могу внести небольшое изменение и нажать «я выстрелил себе в ногу? (выполнить локальные тесты)» кнопка кажется гораздо более элегантной.