首页 > 解决方案 > 如何在不同机器上执行的 Pycharm 中导入代码覆盖率?

问题描述

我已经在PyCharm 论坛上发布了这个,但几天后没有得到任何回复。所以我想我会在这里问。

我的目标是将coverage.py在非 PyCharm 进程中运行的结果导入 PyCharm,以便使用 PyCharm 附带的所有覆盖编辑器功能。

我正在使用 PyCharm 专业版,所以我可以访问覆盖功能。

我有无法直接在 PyCharm 中运行的 python 代码,因为它需要从数据库服务器进程中运行(PL/Python如果有人好奇,可以在 Postgres 中运行)。

我正在使用数据库进程中的覆盖率包来生成 json 报告,但我也可以以任何coverage.py支持的方式导出格式。

根据 Pycharm 的管理代码覆盖套件的文档,应该有一种方法可以

“上传……一个覆盖套件。”

指示说为了做到这一点,你可以

“单击添加按钮并.es在打开的对话框中选择必要的文件。”

文件是什么类型的格式.es?可以coverage.py直接导出成那种格式吗?还是这与“构建服务器”有关?我在 google 上找不到任何与.es文件 +coverage.py相关的内容,搜索 PyCharm 文档的唯一相关结果.es是“管理代码覆盖率套件”页面本身。

我尝试导入 json 报告和生成的 xml 报告,coverage.py但 PyCharm 不允许我选择它(甚至显示它和“添加套件”对话框)。

coverage.py为了将结果导入 PyCharm ,我还能尝试什么?

谢谢你的帮助!

标签: pycharmcoverage.py

解决方案


在过去的几个小时里,我一直遇到类似的问题,现在终于让它工作了。

就我而言,我试图让在 docker 容器内生成的代码覆盖率报告显示在我的 PyCharm 编辑器上。就我个人而言,我使用pytest&pytest-cov来生成报告,它在幕后使用 coverage.py,就像 PyCharm 一样。

我一开始就面临同样的问题;导入生成的 coverage.xml 只会将所有内容显示为 0% 覆盖。在通过 PyCharm 的集成测试运行器工具运行项目并设法生成工作覆盖率报告后,我能够追踪两个生成的代码覆盖率报告之间的差异。

事实证明,代码覆盖率报告需要两个文件:coverage.py 生成的包含所有覆盖率信息的 SQLite 数据库,以及 XML 格式的覆盖率报告。这两者也需要具有相同的文件名,注意扩展名。

示例工作文件

  • 覆盖率.coverage
  • 覆盖率.xml

显然,coverage.xml 应该包含与 sqlite db 相同的覆盖率数据。您必须使用 pycharm 打开 SQLite 数据库,而不是 XML 报告。如果打开 XML 报告,它将不起作用。如果 SQLite 数据库旁边没有 XML 报告,则会收到错误消息。

我的测试命令:

pytest . --cov --cov-report xml

我的 .coveragerc:

[run]
branch = True
data_file = coverage.coverage

使用上面的 pytest 配置,你应该得到coverage.coveragecoverage.xml作为输出文件。在Run > Show Coverage Data对话框中选择coverage.coverage文件应该可以得到一个有效的覆盖输出。

请注意,--covand--cov-report选项来自pytest-covpython 包

使用以下 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)

推荐阅读