我正在努力让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()
但是唉......报道报道似乎并没有合并
注意:在调用combine之前,如果我ls -alt
目录,我会看到如此的列表...
-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
会喜欢正确的方向 - 谢谢!
答案 0 :(得分:1)
让它工作 - 感谢@NedBat的一些指导。
问题在于枪炮正在产生额外的子过程 - 以及那些没有被监控的子过程。
要解决此问题,我需要利用网站模块的sitepackage.py功能。记录了总体公平性http://nedbatchelder.com/code/coverage/subprocess.html - 但我做错了。
您需要创建该sitepackage.py
文件并将其放在site-packages
文件夹中。然后,在环境中运行的任何进程(或子进程)都将在启动进程之前执行该文件。
答案 1 :(得分:0)
如果您使用 nose 进行测试,那么它非常简单。跑吧:
nosetests --with-coverage --cover-package=yourpackagename--cover-html --cover-erase