pycharm - 如何导入在不同机器上执行的 Pycharm 中的代码覆盖率?

标签 pycharm coverage.py

我已经将其发布在 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.coveragecoverage.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/

相关文章:

python - Coverage.py 无法发现子目录中没有 init.py 文件的测试

python - 如何使用 coverage.py 在 Django-Python 中实现像 Ruby-Rails 这样的覆盖率报告?

python - Gitlab CI 中的覆盖率徽章,Python 覆盖率始终未知

python - 当 python 访问无值的 2d 列表时发出警告

Python Pygame 正在变慢

django - Pycharm错误: Improperly configured

python - 启用 HTML 报告时禁用向 STDOUT 报告 Nose 覆盖率?

python - 模型中 django dateTime 的正确格式是什么?

pycharm - 在 PyCharm 中切换项目和编辑器的快捷方式?

python - 在 virtualenv 中运行覆盖