如何让PyCharm显示使用多个进程的程序的代码覆盖率?

2024-10-03 11:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我创建了这个简单的模块并调用它我的模块.py以下内容:

import threading
import multiprocessing
import time

def workerThreaded():
    print 'thread working...'
    time.sleep(2)
    print 'thread complete'

def workerProcessed():
    print 'process working...'
    time.sleep(2)
    print 'process complete'

def main():
    workerThread = threading.Thread(target=workerThreaded)
    workerThread.start()
    workerProcess = multiprocessing.Process(target=workerProcessed)
    workerProcess.start()
    workerThread.join()
    workerProcess.join()

if __name__ == '__main__':
    main()

然后我把这个放在一起进行单元测试:

^{pr2}$

(我知道这不是一个好的单元测试,因为它并不真正测试它,它只是运行它,但这与我的问题无关)

如果我在PyCharm中使用代码覆盖率运行这个单元测试,那么它只显示workerThreaded()和{}函数中的代码,即使它也清楚地覆盖了workerProcessed()函数。在

如何让PyCharm在代码覆盖率中包含在新进程进程中启动的代码?另外,如何让它也包括if __name__ == '__main__':块?在

我运行的是PyCharm 2.7.3和python2.7.3。在


Tags: 模块代码importtimemaindef单元测试multiprocessing
2条回答

在覆盖率.py可以度量子进程中的代码运行,详细信息在http://nedbatchelder.com/code/coverage/subprocess.html

我设法使它能与子进程一起工作,但不确定这是否适用于线程或python2。在

在项目根目录中创建.covergerc文件

[run]
concurrency=multiprocessing

创建网站自定义.py项目根目录中的文件 在

^{pr2}$

这基本上检测代码是否在PyCharm覆盖范围内运行,并收集新生成的覆盖文件。有多个文件,一个用于主进程,一个用于每个子进程。因此,我们需要将它们与“coverage combine”结合起来,然后用“coverage xml”将它们转换为xml,并将结果文件复制到PyCharm生成的xml文件上。在

请注意,如果您在测试中杀死子进程覆盖率.py不会写入数据文件。在

它不需要其他任何东西,只需点击PyCharm中的“rununittests with Coverage”按钮。在

就这样。在

相关问题 更多 >