Mik*_*ail 29 python django unit-testing code-coverage django-nose
我已经成功地安装和配置django-nose
与coverage
问题是如果我只是运行覆盖./manage.py shell
并退出该shell - 它显示我37%的代码覆盖率.我完全理解执行代码并不意味着测试代码.我唯一的问题是 - 现在怎么样?
我想象的是能够导入所有python模块并在执行任何测试之前"安顿下来",并直接与coverage
"Ok,在这里开始计算到达代码"进行通信.
理想情况下,这可以通过nose
在执行每个测试套件之前基本上重置"触摸"代码行来完成.
我不知道从哪里开始寻找/发展.我在网上搜索过,没有发现任何有成效的东西.任何帮助/指导将不胜感激.
PS
我尝试执行这样的事情:
DJANGO_SETTINGS_MODULE=app.settings_dev coverage run app/tests/gme_test.py
Run Code Online (Sandbox Code Playgroud)
它工作(显示1%的覆盖率)但我无法弄清楚如何为整个应用程序执行此操作
编辑:这是我的覆盖配置:
[run]
source = .
branch = False
timid = True
[report]
show_missing = False
include = *.py
omit =
tests.py
*_test.py
*_tests.py
*/site-packages/*
*/migrations/*
[html]
title = Code Coverage
directory = local_coverage_report
Run Code Online (Sandbox Code Playgroud)
ppe*_*rid 33
因为你使用django-nose,你有两种选择如何运行覆盖.第一个是DaveB已经指出的:
coverage run ./manage.py test myapp
Run Code Online (Sandbox Code Playgroud)
以上实际上运行覆盖,然后监视测试命令执行的所有代码.
但是,django-nose软件包中默认包含一个鼻子覆盖插件(http://nose.readthedocs.org/en/latest/plugins/cover.html).你可以像这样使用它:
./manage.py test myapp --with-coverage
Run Code Online (Sandbox Code Playgroud)
(还有一些其他选项,比如应该涵盖哪些模块,是否包含html报告等.这些都记录在上面的链接中 - 您也可以输入./manage.py test --help
一些快速信息).
运行nose coverage插件将导致在执行django引导代码后运行覆盖范围,因此相应的代码将不会报告为覆盖.
在原始方式运行coverage时,您看到的大多数代码都是覆盖的,包括导入语句,类定义,类成员等.当python在导入时评估它们时,覆盖率自然会将它们标记为覆盖.但是,运行nose插件不会报告引导代码,因为在加载django环境后测试运行器启动.当然,这样做的副作用是你永远无法实现100%覆盖率(...或关闭:)),因为你的全局范围陈述永远不会被覆盖.
在来回切换并使用覆盖选项后,我现在最终使用了这样的覆盖:
coverage run --source=myapp,anotherapp ---omit=*/migrations/* ./manage.py test
Run Code Online (Sandbox Code Playgroud)
这样a)覆盖范围将报告所涵盖的导入语句,类成员定义等(这实际上是事实 - 这个代码被成功导入和解释)和b)它只会覆盖我的代码而不是django代码,或任何其他第三代码 -我用的派对app; 覆盖率将反映我的项目的覆盖范围.希望这可以帮助!
我对你在这里想要实现的目标有点困惑。
这里很好地介绍了 Django 中的测试:https ://docs.djangoproject.com/en/dev/topics/testing/overview/
您在应用程序中将测试编写为 test.py - 我认为不需要鼻子,因为标准 django 方式非常简单。
然后运行它们coverage run ./manage.py test main
- 其中“main”是您的应用程序
按照此处记录的方式指定代码的源文件:http://nedbatchelder.com/code/coverage/cmd.html,以便仅计算您的代码
例如覆盖率运行 --source=main ./manage.py test main
您仍然会得到一定比例的标记为覆盖了作为示例提供的简单测试。这是因为执行部分代码是为了启动服务器,例如模块中的定义等。
归档时间: |
|
查看次数: |
11889 次 |
最近记录: |