5

我正在努力让coverage.py与我的 Flask 应用程序一起工作。

我正在尝试通过子流程说明进行设置:http: //nedbatchelder.com/code/coverage/subprocess.html

在我的create_app()函数(这是一个应用程序工厂)中,我有以下内容:

if settings.FLASK_ENV == 'TEST':
    coverage.process_startup()

在我的测试套件中,我有以下内容:

# Need to add the 'COVERAGE_PROCESS_START' environment variable for subprocesses
if os.getenv('COVERAGE'):
    test_env['COVERAGE_PROCESS_START'] = 'tests/.coveragerc'

test_env['FLASK_ENV'] = 'TEST'

test_process = subprocess.Popen(["gunicorn", "run_server:app", '--log-level=warning', '-w 1', '-b {host}:{port}'.format(host='127.0.0.1',port=port())],
                                env=test_env)

在我的测试结束时,我做...

    coverage.save()
    coverage.combine()
    percent_covered = coverage.html_report(directory='covhtml')
    print "Percent Covered: {}".format(percent_covered)
    coverage.stop()

但唉..报道似乎没有合并

ls -alt注意:如果我在目录中看到这样的列表,则在调用 combine 之前...

-rw-r--r-- .coverage.Jonathans-MacBook-Pro-3.local.49352.501916 -rw-r--r-- .coverage.Jonathans-MacBook-Pro-3.local.49352.931352

为了完整起见,我的 .coveragerc 很简单: [run] parallel = True

希望能指出正确的方向——谢谢!

4

2 回答 2

2

得到它的工作 - 感谢@NedBat 的一些指导。

问题是独角兽产生了额外的子进程——以及那些没有被监控的子进程。

为了解决这个问题,我需要利用站点模块的 sitepackage.py 功能。完全公平地记录在http://nedbatchelder.com/code/coverage/subprocess.html - 但我只是做错了。

您需要创建该sitepackage.py文件并将其放在您的site-packages文件夹中。然后在环境中运行的任何进程(或子进程)将在启动进程之前执行该文件。

于 2014-05-20T13:53:07.987 回答
0

如果您使用鼻子进行测试,那么它非常微不足道。赶紧跑:

nosetests --with-coverage --cover-package=yourpackagename--cover-html --cover-erase
于 2014-05-20T06:39:08.743 回答