对于带有 pytest-cov 的 pytest:如何为覆盖版本 >= 5 指定parallel=True

Dav*_*Tam 6 python coverage.py pytest python-3.x pytest-cov

pytest-cov 文档中它说:

请注意,此插件控制一些选项,在配置文件中设置该选项将不起作用。其中包括指定要测量的源(源选项)和所有数据文件处理(data_file 和并行选项)。

但它没有说明如何更改这些选项。有没有办法改变它(parallel=True)?我想更改此设置,因为在覆盖范围从 < 5 升级到最新 (5.1) 后,我得到了这些:

Failed to generate report: Couldn't use data file '/path/to/jenkins/workspace/pr/or/branch/.coverage': no such table: line_bits
Run Code Online (Sandbox Code Playgroud)

注意:使用覆盖率<5则没有这个问题

我还尝试添加.coveragerc与以下内容,但仍然遇到相同的问题。

[run]
parallel = True
Run Code Online (Sandbox Code Playgroud)

jenkins中的运行方式:

pytest ./tests --mpl -n 4 \
   --junitxml=pyTests.xml --log-cli-level=DEBUG -s \
   --cov=. --cov-report --cov-report html:coverage-reports
Run Code Online (Sandbox Code Playgroud)

Jul*_*ard 4

这是由于pytest-cov使用coverage combine,它结合了所有覆盖结果:并行地混合了其他运行的结果,这些运行可能完成也可能未完成,并且在任何情况下都是无关的。

我认为如果您遇到问题,可能是因为您并行运行多个测试,例如多个版本的 Python。

在这种情况下,可以通过COVERAGE_FILE为每次运行指定唯一的来轻松解决此问题,例如:

export COVERAGE_FILE=.coverage.3.7
Run Code Online (Sandbox Code Playgroud)

对于 Python 3.7 运行,等等。

请参阅:https ://github.com/nedbat/coveragepy/issues/883#issuecomment-650562896