为什么coverage.py没有正确测量Flask的runserver命令?

时间:2013-10-24 22:31:09

标签: python flask coverage.py

我正在试图找出正在运行Flask应用程序的哪些行。我像这样开始烧瓶:

coverage run manage.py runserver

输出如下:

 * Running on http://127.0.0.1:5000/
 * Restarting with reloader

manage.py看起来像这样:

#!/usr/bin/env python
from flask.ext.script import Manager

from my_flask_app import app

manager = Manager(app)

if __name__ == '__main__':
    manager.run()

然后我通过HTTP访问应用程序的各个部分。

当我查看覆盖率HTML报告时,它表示只涵盖方法定义,而不是方法的实际主体。

我怀疑是因为这些方法是由一个子进程执行的,而这个子进程没有被coverage.py覆盖。

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

事实证明,问题与上面的“重新加载器”消息有关。当我像这样启动Flask时,覆盖率报告是正确的:

coverage run manage.py runserver -R

输出只包含这个:

* Running on http://127.0.0.1:5000/

这样它就不会在单独的进程中启动服务器,并且覆盖范围很有效。

由于这个相关的Django问题,我找到了这个解决方案:

Why doesn't coverage.py properly measure Django's runserver command?