使用覆盖率时,VSCode 测试调试器不会在断点处停止

问题描述 投票:0回答:1

我已经开始使用

pytest-cov
进行覆盖率报告。使用 VSCode。

这就是我设置

pytest.ini
文件的方式,以便每次我从 VSCode 测试资源管理器运行测试时,覆盖率报告都会更新:

[pytest]
addopts = "--cov=src/ --cov-report=lcov:lcov.info --cov-report=term"
env = 
    TESTING=true
    ENV=local

但我也希望能够调试我的测试并在断点处停止。正如 VSCode 文档 say

注意如果安装了 pytest-cov 覆盖模块,VS Code 在调试时不会在断点处停止,因为 pytest-cov 使用相同的技术来访问正在运行的源代码。为了防止这种行为,请在调试测试时在 pytestArgs 中包含 --no-cov,例如通过将 "env": {"PYTEST_ADDOPTS": "--no-cov"} 添加到调试配置中。 (有关如何设置启动配置的信息,请参阅上面的调试测试。)(有关更多信息,请参阅 pytest-cov 文档中的调试器和 PyCharm。)

所以我在

launch.json
中调试测试的配置是这样的:

        {
            "name": "Python: Debug Tests",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "purpose": [
                "debug-test"
            ],
            "console": "integratedTerminal",
            "justMyCode": true,
            // "justMyCode": false,
            "env": {
                "ON_HEROKU": "0",
                "PYTEST_ADDOPTS": "--no-cov",
                "ECHO_SQL_QUERIES": "1"
            },
        },

尽管如此,在调试测试时,即使我在那里设置了 PYTEST_ADDOPTS 环境变量,它也不会在断点上停止。使其工作的唯一方法是注释

addopts
 中的 
pytest.ini

[pytest]
# addopts = "--cov=src/ --cov-report=lcov:lcov.info --cov-report=term"
env = 
    TESTING=true
    ENV=local

如何让它按照我想要的方式运行,而无需注释和取消注释

pytest.ini
中的该行?

python visual-studio-code pytest pytest-cov
1个回答
0
投票

您可以尝试在您的

launch.json
中使用以下代码:

{
    "name": "Python: Debug Tests",
    "type": "debugpy",
    "request": "launch",
    "program": "${file}",
    "purpose": [
        "debug-test"
    ],
    "console": "integratedTerminal",
    "justMyCode": true,
    "env": {
        "ON_HEROKU": "0",
        "PYTEST_ADDOPTS": "-c pytest-debug.ini",
        "ECHO_SQL_QUERIES": "1"
    },
}

pytest-debug.ini
是一个单独的配置文件,用于调试。该文件应该与您的
pytest.ini
文件类似,但没有 addopts 行:

[pytest]
env = 
    TESTING=true
    ENV=local

这样,当您调试测试时,pytest 将使用

pytest-debug.ini
配置文件。

© www.soinside.com 2019 - 2024. All rights reserved.