VS Code / Python / Hata Ayıklama pytest Testi Hata Ayıklayıcı ile
Pytest ile testleri çalıştırırken hata noktasında beni hata ayıklayıcıya koyması için VS Code'u nasıl edinebilirim?
Pytest, tüm hataları ve iddiaları yakalar ve VS kodu, hata ayıklayıcıyı yalnızca yakalanmamış hatalarda çağırır (bunu, yükseltilmiş istisna olarak değiştirebilirim, ancak daha sonra bir denemede ortaya çıkan her şeyde durur).
--pdbPytest argümanı olarak ayarlamaya çalıştım , ancak bu hatalara yol açar:
============================= 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 ==============================
Bunu test etmek için çok basit bir projem var:
.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
ve test.py:
def test_with_assert():
assert 42==2.71828
Mı --pdbBunu yapmanın doğru yolu? Veya bir iddia veya hata durumunda hata ayıklayıcıya nasıl girebilirim?
Yanıtlar
VSCode'da pytest çalıştırırken hata ayıklamaya girmek ve bir kod satırında kalmak istiyorsanız Debug Test, ekran görüntüsünde gösterildiği gibi, pytest testini seçtikten sonra yöntemin üstündeki ' ' seçeneğine tıklayabilirsiniz :
Buna ek olarak, "python.testing.pytestArgs": [],içinde .vscode\settings.jsontest edilen dosyanın klasör yoludur, örneğin, benim test dosyası içindedir Test_ccaltında aklasöründe.
> "python.testing.pytestArgs": [
> "a/Test_cc"
> ],
İstediğiniz bu değilse, lütfen bana bildirin ve ihtiyaçlarınızın ayrıntılarını açıklayın.
Referans: Hata ayıklama testleri .
Güncelleme:
Genellikle, VSCode'da testin hatalarını ayıkladığımızda, bunun için bir kesme noktası belirlemeden, yalnızca test sonucunu görüntüler. (başarı veya başarısızlık). Yalnızca konsol ÇIKIŞI'nda ilgili test bilgilerini görüntüler.
Uzantıyı kullandığımda ' Python Test Explorer for Visual Studio code', konsolda hata ayıklama testi bilgilerini göstererek sorunu soracak.
Bu Cevap aslında sorunu çözer. Keşke Visual Studio raiseCode'dan veya pytest'ten basit bir bayrak gibi daha basit bir yol olsaydı.