Python代码覆盖和多处理

SmC*_*lar 17 python code-coverage multiprocessing coverage.py coveralls

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

coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose
Run Code Online (Sandbox Code Playgroud)

除了多处理之外,这非常有效.不跟踪工作池或子进程执行的代码.

是否有可能跟踪多处理代码?我遗失的任何特定选项?可能会在多处理库中添加包装器,以便在每次生成新进程时开始覆盖?

编辑:

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

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

编辑2:

猴子补丁在经过一些小修改后确实有效:删除config_file解析(config_file=os.environ['COVERAGE_PROCESS_START'])就可以了.这解决了臃肿记忆的问题.因此,相应的行简单地变为:

cov = coverage(data_suffix=True)
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 14

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

--concurrency=multiprocessing

  • 感谢您指出之后使用`coverage combine`的要求.我一直在旋转我的车轮一段时间试图弄清楚为什么我在`.coveragerc`文件中的`concurrency = multiprocessing`无效. (2认同)