pycharm - 如何在不同机器上执行的 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 ,我还能尝试什么?
谢谢你的帮助!
解决方案
在过去的几个小时里,我一直遇到类似的问题,现在终于让它工作了。
就我而言,我试图让在 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.coverage
和coverage.xml
作为输出文件。在Run > Show Coverage Data对话框中选择coverage.coverage
文件应该可以得到一个有效的覆盖输出。
请注意,--cov
and--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)
推荐阅读
- python - (Python)ModuleNotFoundError:没有名为“pip._vendor.progress”的模块
- c# - 如何使用 C# 按组策略检查 PowerShell 禁用
- html - 如何用 ng-class 实现 if-else 条件?
- c# - Cosmos DB DocumentClient 的 DateTime 处理中的错误
- vue.js - Vue Router 使用 router-link 在两个组件之间传递数据
- javascript - 如何超时运行node.js?
- python - 如何有效地将条件应用于 numpy 数组的索引?
- shopware - Shopware 从 6.2.2 更新到 6.2.3 后出错
- django - django.db.utils.ProgrammingError:关系“django_site”不存在
- express - Paypal 集成,是否可以通过单笔交易获得多个商店和多个员工的付款?