我已经开始使用
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
中的该行?
您可以尝试在您的
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
配置文件。