小编典典

Python代码覆盖率和多处理

python

我将工作服coverage.py结合使用,以跟踪测试脚本的python代码覆盖率。我使用以下命令:

coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose

除了多重处理外,这很好地工作。不会跟踪工作池或子进程执行的代码。

是否可以跟踪多处理代码?我缺少任何特别的选择吗?也许在每次生成新进程时将包装器添加到多处理库中以开始覆盖?

编辑

我(还有jonrsharpe,也:-)发现了一个用于多处理猴子补丁

但是,这对我不起作用,我的Tracis-CI构建几乎在开始后就被杀死了。我在本地计算机上检查了该问题,显然将补丁添加到多处理过程中破坏了我的内存。使用此修复程序,占用少于1GB内存的测试需要超过16GB。

编辑2

进行少量修改后,猴子补丁确实可以工作:删除config_file解析(config_file=os.environ['COVERAGE_PROCESS_START'])就可以了。这解决了内存过大的问题。因此,相应的行就变成:

cov = coverage(data_suffix=True)

阅读 212

收藏
2021-01-20

共1个答案

小编典典

Coverage 4.0包含一个命令行选项--concurrency=multiprocessing来处理此问题。coverage combine之后必须使用。例如,如果您的测试在中regression_tests.py,则只需在命令行中执行此操作:

coverage run --concurrency=multiprocessing regression_tests.py
coverage combine
2021-01-20