gpt4 book ai didi

django - 在 gunicorn 中运行时如何从 django 应用程序获取覆盖率数据

转载 作者:行者123 更新时间:2023-12-03 23:42:59 24 4
gpt4 key购买 nike

如何从 Django 项目的 View 代码(以及 View 代码调用的代码)中获取代码覆盖率?
coverage gunicorn <params>不显示任何被击中的行。

最佳答案

coverage gunicorn <params>不起作用,因为 gunicorn 创建了工作进程,而 coverage模块不能跨叉工作(基本上是创建新进程)。您可以使用the 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 worker ,因为他们都会覆盖“.coverage”文件。如果您绝对需要不止一名 worker ,您可以写信至 ".coverage-%d" % os.getpid() (设置文件名 via the data_file parameter to the coverage constructor )并使用 the combine() method合并各个测量值。

这也应该适用于其他 WSGI 服务器,具体取决于它们是否允许其工作进程通过 atexit 进行清理。方法。

关于django - 在 gunicorn 中运行时如何从 django 应用程序获取覆盖率数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19025336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com