我有一个正在Docker容器中运行的Python应用程序。该应用程序通常以命令/usr/local/bin/foo_service
启动,该命令是Python的入口点(因此,它只是一个Python文件)。
我想在对此应用程序进行功能测试时收集该应用程序的代码覆盖率。我发现coverage run /usr/local/bin/foo_service
可以很好地工作,并且一旦应用程序退出,就会输出一个覆盖文件,其报告看上去准确无误。
但是,这是在单进程模式下。该应用程序具有另一种模式,该模式使用multiprocessing
模块来派生两个或更多子进程。我不确定这是否与我调用coverage的方式兼容。我做了coverage run --parallel-mode /usr/local/bin/foo_service -f 4
,它没有输出[一个]覆盖率[文件]而没有忽略任何错误,但是我不知道这是正确的。我一半期望它可以按流程输出覆盖文件,但是我不知道它应该这样做。在文档中找不到该主题的报道。
这项工作有效吗?还是我需要放弃使用coverage
二进制文件,而是在派生代码中使用coverage
Python API?
$ python --version
Python 3.7.4
$ coverage --version
Coverage.py, version 4.5.3 with C extension