2

我在 python 中有一个多处理应用程序。我正在尝试在运行测试后获取覆盖率报告。我正在尝试合并覆盖率报告,但我无法一次性完成。

以下是我面临的问题。我的两个测试生成了 4 个覆盖文件。当我运行命令“coverage combine”时,出现以下错误:

Can't combine line data with arc data

要合并覆盖文件,我需要运行“coverage combine”命令 4 次。但我计划添加更多测试,这将使合并报告变得更加困难。

那么如何一次合并所有的覆盖率报告呢?

PS:我已经设置了配置文件如下:

[run]
branch = True
parallel = True
concurrency = multiprocessing

[report]
# Regexes for lines to exclude from consideration
exclude_lines =
    # Have to re-enable the standard pragma
    pragma: no cover

而且我能够正确获得线路覆盖率的组合报告。

编辑:

这就是我运行我的应用程序以获得覆盖率的方式

coverage --rcfile=coverage_rc_file tester_script.py test1 test2

上面的命令运行我的应用程序两次并生成 4 个覆盖文件。

然后我运行以下命令来合并结果:

coverage combine
4

3 回答 3

2

我遇到了同样的错误。该问题是由先前运行的陈旧文件引起的。删除.coverage.*文件有帮助。

于 2019-06-06T13:47:08.383 回答
1

如果您使用命令行配置覆盖率,您看到的错误将会发生,如下所示:

coverage run --branch --concurrency=multiprocessing myprogram.py

问题是命令行参数没有传达给子进程,因此主进程测量分支覆盖率,子进程测量行覆盖率。然后合并步骤无法合并文件。

解决方法是使用 .coveragerc 配置文件。但是您说您正在使用它,所以我不确定出了什么问题,除非您只是从命令行参数开始。

于 2016-07-09T11:24:55.187 回答
1

当我的单元测试在多个目录中运行代码时,我遇到了这个问题。我必须在每个目录中添加 .coveragerc 文件以使它们全部生成分支(又名弧)数据。我通过符号链接到我的主 .coveragerc 文件来做到这一点。

于 2016-10-04T21:29:56.057 回答