我已经将其发布在 PyCharm forums 中但几天后没有得到任何回复。所以我想我应该在这里问。
我的目标是将非 PyCharm 进程中运行的 coverage.py
结果导入 PyCharm,以便使用 PyCharm 附带的所有覆盖编辑器功能。
我使用的是 PyCharm Professional Edition,因此我可以使用覆盖功能。
我的 python 代码无法直接在 PyCharm 中运行,因为它需要在数据库服务器进程中运行(如果有人好奇的话,在 Postgres 中运行 PL/Python
)。
我在数据库进程中使用覆盖率包来生成 json 报告,但我也可以以 coverage.py
支持的任何方式导出格式。
根据Pycharm的文档Managing сode сoverage suites应该有办法
"Upload... a coverage suite."
说明中说您可以这样做
"Click the Add button and select the necessary
.es
file in the dialog that opens."
.es
文件是什么类型的格式? coverage.py
可以直接导出为该格式吗?或者这与“构建服务器”有关?我在 google 上找不到与 .es
文件 + coverage.py
相关的任何内容,以及在 PyCharm 文档中搜索 .es
的唯一相关结果是“管理代码覆盖率套件”页面本身。
我尝试导入 json 报告和由 coverage.py
生成的 xml 报告,但 PyCharm 不允许我选择它(甚至不允许显示它和“添加套件”对话框)。
为了将我的 coverage.py
结果导入 PyCharm,我还可以尝试什么?
感谢您的帮助!
最佳答案
过去几个小时我一直被类似的问题困扰,现在终于解决了。
就我而言,我试图让 Docker 容器内生成的代码覆盖率报告显示在我的 PyCharm 编辑器上。就我个人而言,我使用 pytest 和 pytest-cov 来生成报告,该报告在幕后使用coverage.py,就像 PyCharm 一样。
我一开始就遇到了同样的问题;导入生成的coverage.xml 只会将所有内容显示为0% 覆盖。在通过 PyCharm 的集成测试运行器工具运行项目并设法生成工作覆盖率报告后,我能够追踪两个生成的代码覆盖率报告之间的差异。
事实证明,代码覆盖率报告需要两个文件:由coverage.py 生成的SQLite 数据库,其中包含所有覆盖率信息,以及XML 格式的覆盖率报告。它们还需要具有相同的文件名,注意扩展名。
工作文件示例
- 覆盖率.覆盖率
- 覆盖率.xml
显然,coverage.xml 应该包含与 sqlite 数据库相同的覆盖率数据。您必须使用 pycharm 打开 SQLite 数据库,而不是 XML 报告。如果您打开 XML 报告,它将不起作用。如果 SQLite 数据库旁边没有 XML 报告,则会出现错误。
我的测试命令:
pytest . --cov --cov-report xml
我的.coveragerc:
[run]
branch = True
data_file = coverage.coverage
使用上述 pytest 配置,您应该获得 coverage.coverage
和 coverage.xml
作为输出文件。在运行 > 显示覆盖率数据对话框中选择coverage.coverage
文件应该会为您提供有效的覆盖率输出。
请注意,--cov
和 --cov-report
选项来自 pytest-cov
python 包
使用以下 PyCharm 版本进行测试:
PyCharm 2021.1.2 (Professional Edition)
Build #PY-211.7442.45, built on June 1, 2021
Runtime version: 11.0.11+9-b1341.57 amd64
VM: Dynamic Code Evolution 64-Bit Server VM by JetBrains s.r.o.
Windows 10 10.0
GC: ParNew, ConcurrentMarkSweep
Memory: 1979M
Cores: 24
Registry: external.system.auto.import.disabled=true
Non-Bundled Plugins: com.andrey4623.rainbowcsv (2.0), net.seesharpsoft.intellij.plugins.csv (2.17.0), org.jetbrains.plugins.go-template (211.6693.44), name.kropp.intellij.makefile (211.6693.108), com.intellij.kubernetes (211.7442.27), org.toml.lang (0.2.149.3939-211), com.deadlock.scsyntax (211.6693.111), intellij.prettierJS (211.7142.13), org.jetbrains.plugins.vue (211.7142.13), com.intellij.lang.jsgraphql (2.9.1), com.koxudaxi.pydantic (0.3.3), com.leinardi.pycharm.mypy (0.11.2), org.rust.lang (0.4.149.3939-211), org.intellij.plugins.hcl (0.7.10)
关于pycharm - 如何导入在不同机器上执行的 Pycharm 中的代码覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60994981/