Kim*_*ais 13 django coverage.py gunicorn
如何从Django项目的视图代码(以及视图代码调用的代码)中获取代码覆盖率?
coverage gunicorn <params> 没有显示任何线被击中.
sk1*_*k1p 15
coverage gunicorn <params>不起作用,因为gunicorn创建了工作进程,并且coverage模块无法跨叉工作(基本上,创建新进程).但是,您可以使用coverage API,例如在包含WSGI应用程序的python模块中:
# wsgi_with_coverage.py
import atexit
import sys
import coverage
cov = coverage.coverage()
cov.start()
from wsgi import application # adjust to python module containing your wsgi application
def save_coverage():
print >> sys.stderr, "saving coverage"
cov.stop()
cov.save()
atexit.register(save_coverage)
Run Code Online (Sandbox Code Playgroud)
然后跑gunicorn -w 1 wsgi_with_coverage:application <other params>.
问题是,atexit如果你杀死了gunicorn进程,例如通过CTRL + C,则不会调用这些函数.但是它们被调用SIGHUP,所以如果你这样做kill -HUP $(cat <gunicorn_pidfile_here>),应该保存覆盖率数据(默认情况下为当前目录中的".coverage").
一个可能的警告是,这不适用于多个gunicorn工作者,因为他们都会覆盖".coverage"文件.如果您绝对需要多个worker,则可以写入".coverage-%d" % os.getpid()(通过data_file参数coverage将文件名设置为构造函数)并使用该combine()方法合并各个度量.
这也适用于其他WSGI服务器,具体取决于它们是否允许通过该atexit方法清理其工作进程.
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |