如何知道Django应用的覆盖率?
我有一个简单的 Django 项目,里面包含了一些应用程序。一切运行得很好。现在我想检查一下我的项目的代码覆盖率。我安装了 coverge-3.5 工具,并尝试在终端输入“coverage report”来查看覆盖率。结果显示了一些内容,比如:
名称 -----> (我项目中的某个文件)
语句数 -----> (某个数字)
遗漏 -----> (某个数字)
覆盖率 -----> (某个百分比)
在我的情况下,它只显示了我项目中某些文件的结果,并没有显示所有文件的覆盖率。我该怎么做才能让它显示我所有的文件名呢???
如果你知道更好用的覆盖率工具,请推荐一下!
3 个回答
我通过使用 django_coverage 和 django_nose 解决了这个问题。
我在 INSTALLED_APPS 中添加了 'django_coverage' 和 'django_nose'。
在 settings.py 文件中这样设置:
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
# Tell nose to measure coverage on the 'foo' and 'bar' apps
NOSE_ARGS = [
'--with-coverage',
'--cover-package=schedule',
]
要安装它,
可以用这个命令:
pip install django_coverage
那我该怎么用呢?
作为一个 Django 应用安装,把整个:
django_coverage 应用放到你的第三方应用目录里。
更新你的 settings.INSTALLED_APPS,加入 django_coverage。
在你自己的设置文件中加入测试覆盖率的相关设置。
更多细节请查看 settings.py。一旦你完成了所有步骤,你就可以通过 manage.py test_coverage 使用一个新的自定义命令了。
它的工作方式和 manage.py test 一样。
作为测试运行器使用
如果你不想把 django_coverage 安装为一个应用,也没关系。你可以直接使用测试运行器。
更新 settings.TEST_RUNNER = 'django_coverage.coverage_runner.CoverageRunner',在你自己的设置文件中加入测试覆盖率的相关设置。更多细节请查看 settings.py。像平常一样运行 manage.py test。
首先,确保你使用的是最新版本的覆盖率工具。然后你可以这样做:
假设你的Django项目在项目的父文件夹下,比如在project_parent/project这个路径下,从project_parent这个文件夹运行:
coverage html --include=project/*.*
这样你就能得到你项目的覆盖率报告了(也就是说,它不会输出第三方库的覆盖率)
我刚刚这样把它搞定了:
coverage run --source=app1,app2 ./manage.py test --settings=path.to.test_settings app1,app2
我觉得这不是正确的做法,因为我们根本没有用到 ./manage.py test_coverage 这个命令,但我找不到其他的方法。