VS Code / Python / Debugging pytest Test avec le débogueur

Aug 27 2020

Comment puis-je obtenir VS Code pour me mettre dans le débogueur au point de défaillance lors de l'exécution de tests avec pytest?

Pytest intercepte toutes les erreurs et assertions, et le code VS appelle le débogueur uniquement en cas d'erreurs non interceptées (je peux changer cela en exception soulevée, mais ensuite il s'arrête sur tout ce qui est déclenché lors d'un essai).

J'ai essayé de définir --pdbcomme argument pytest, mais cela conduit à des erreurs:

============================= test session starts =============================
platform win32 -- Python 3.8.1, pytest-5.3.2, py-1.8.1, pluggy-0.13.1
rootdir: c:\Projects\debugtest, inifile: pytest.ini
collected 1 item

test.py F
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> traceback >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Traceback (most recent call last):
  File "C:\Projects\debugtest\test.py", line 4, in test_with_assert
    assert 42==2.71828
AssertionError: assert 42 == 2.71828
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> entering PDB >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>>>>>>>>>>>>>>>>>> PDB post_mortem (IO-capturing turned off) >>>>>>>>>>>>>>>>>>
> c:\projects\debugtest\test.py(4)test_with_assert()
-> assert 42==2.71828
(Pdb)

PYDEV DEBUGGER WARNING:
sys.settrace() should not be used when the debugger is being used.
This may cause the debugger to stop working correctly.
If this is needed, please check: 
http://pydev.blogspot.com/2007/06/why-cant-pydev-debugger-work-with.html
to see how to restore the debug tracing back correctly.
Call Location:
  File "C:\Program Files\Python38\lib\bdb.py", line 359, in set_quit
    sys.settrace(None)


- generated xml file: C:\Users\tzhgfma1\AppData\Local\Temp\tmp-24044mEWMyB1nPYAu.xml -
!!!!!!!!!!!!!!!!!! _pytest.outcomes.Exit: Quitting debugger !!!!!!!!!!!!!!!!!!!
============================== 1 failed in 0.43s ==============================

J'ai un projet très simple pour tester ceci:

.vscode \ settings.json

{
    "python.testing.pytestArgs": [
        "--pdb"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.pytestEnabled": true,
    "git.ignoreLimitWarning": false
}

.vscode \ launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}", "console": "internalConsole", "justMyCode":false }, { "name": "Python: Attach using Process Id", "type": "python", "request": "attach", "processId": "${command:pickProcess}",
            "justMyCode": false
        },
        {
            "name": "Debug Tests",
            "type": "python",
            "request": "test",
            "console": "internalConsole",
            "justMyCode": false
        }
    ]
}

pytest.ini

[pytest]

python_files = test*.py
python_classes = Test
python_functions = test
addopts = --tb=native
console_output_style = classic
junit_duration_report = call
filterwarnings =
    ignore::RuntimeWarning

et test.py:

def test_with_assert():
    assert 42==2.71828

Est-ce --pdbla bonne façon de procéder? Ou comment puis-je entrer dans le débogueur lors d'une assertion ou d'une erreur?

Réponses

2 JillCheng Aug 31 2020 at 07:54

Si vous souhaitez entrer le débogage lors de l'exécution de pytest dans VSCode et rester sur une ligne de code, vous pouvez cliquer sur ` Debug Test` en haut de la méthode après avoir sélectionné le test pytest, comme indiqué dans la capture d'écran:

En outre, "python.testing.pytestArgs": [],dans .vscode\settings.jsonle chemin du dossier du fichier testé, par exemple, mon fichier de test se trouve Test_ccsous le adossier.

>      "python.testing.pytestArgs": [
>             "a/Test_cc"
>         ],

Si ce n'est pas ce que vous souhaitez, veuillez me le faire savoir et décrire les détails de vos besoins.

Référence: tests de débogage .

Mettre à jour:

Habituellement, lorsque nous déboguons le test dans VSCode, sans définir de point d'arrêt pour celui-ci, il affichera uniquement le résultat du test. (succès ou échec). Il affichera uniquement les informations de test pertinentes dans la sortie de la console.

Lorsque j'utilise l'extension ' Python Test Explorer for Visual Studio code', les informations de test de débogage s'affichent sur la console, ce qui provoque le problème.

mgf Sep 05 2020 at 07:53

Cette réponse résout réellement le problème. J'aurais aimé qu'il y ait un moyen plus simple, soit à partir de Visual Studio Code ou d'un simple raisedrapeau de pytest.