VS Code / Python / Debugging pytest Test avec le débogueur
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
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.
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.