如何从 Django 项目的视图代码(以及视图代码调用的代码)中获取代码覆盖率?
coverage gunicorn <params>
不显示任何被击中的行。
如何从 Django 项目的视图代码(以及视图代码调用的代码)中获取代码覆盖率?
coverage gunicorn <params>
不显示任何被击中的行。
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)
然后运行gunicorn -w 1 wsgi_with_coverage:application <other params>
。
问题是,atexit
如果您杀死 gunicorn 进程(例如通过 CTRL+C),则不会调用这些函数。但是它们被调用SIGHUP
,所以如果你这样做kill -HUP $(cat <gunicorn_pidfile_here>)
,覆盖数据应该被保存(默认为当前目录中的“.coverage”)。
一个可能的警告是,这不适用于一个以上的 gunicorn 工人,因为他们都会覆盖“.coverage”文件。如果您绝对需要多个工人,您可以写入(通过参数".coverage-%d" % os.getpid()
设置文件名到构造函数)并使用该方法合并各个测量值。data_file
coverage
combine()
这也应该适用于其他 WSGI 服务器,具体取决于它们是否允许其工作进程通过该atexit
方法进行清理。