我用pytest提出了an issue,他们提出了一个可行的建议。将此添加到您的conftest.py
:
import os
import pytest
if os.getenv('_PYTEST_RAISE',"0") != "0":
@pytest.hookimpl(tryfirst=True)
def pytest_exception_interact(call):
raise call.excinfo.value
@pytest.hookimpl(tryfirst=True)
def pytest_internalerror(excinfo):
raise excinfo.value
然后在您的"request": "test"
launch.json文件中,您可以切换该环境变量:
{
"name": "Debug Tests","type": "python","request": "test","console": "integratedTerminal","justMyCode": true,"env": {
"_PYTEST_RAISE": "1"
},}
如果设置了_PYTEST_RAISE
,并且仅选中了未捕获的异常框,则会在未引发异常的地方断行。
我还用debugpy
打开了an issue,他们有一些想法,但是今天没有解决方案。 _PYTEST_RAISE
技巧可以100%为我解决。
,
行为不同,但是测试运行程序在未捕获的异常处停止。
将文件conftest.py
与测试一起添加到目录中。
# conftest.py
def pytest_exception_interact(node,call,report):
print( call.excinfo.traceback[0] )
pass
这为任何未捕获的异常添加了一个钩子。
在与pass
的行处放置一个断点。
然后Debug
测试。
在“调试”控制台中查看,您会看到发生异常的文件和行号。
test_example.py F File 'path\\test_example.py':4 in test_example
assert False
调试器在pass
行停止。
您可以根据自己的喜好使此挂钩起作用。
,
我注意到一些可能相关的事情。即使我现在还没有准备好深入挖掘,我还是会把它们贴在这里,以防它们对某人有用。
解决方法:
我使用的一个简单技巧是(暂时)直接调用相关测试用例并“运行和调试”文件,而不是使用“调试测试用例”按钮: >
Error: object 'output_4' not found
结果:
注意事项:
- 行为的重要区别与在
def test_example():
assert False
test_example()
配置中指定 "request": "test"
与指定 "request": "launch"
相关。 (在 launch.json
选项是否从全局启动配置中应用(如 here 所述)方面,这两种类型之间也存在差异。
- 如果您指定了 python
justMyCode
,那么 VSCode 似乎不会让您像上面那样在启动模式下调试文件。
- 在我的场景中,我的测试失败了,因为我在第三方库中引发了异常(当然是我的错)。第三方代码中的断点显然只有在添加
"request": "test"
选项时才会触发。
launch.json:
"justMyCode": false
本文链接:https://www.f2er.com/2117883.html