Django/Python中获取最佳测试覆盖率的最佳实践是什么?
3 个回答
我假设你已经完成了对 测试Django应用程序的学习。只要有合适的辅助工具,你应该可以顺利使用Django测试框架的默认单元测试。
如果你想开始测量代码覆盖率,可以看看 coverage 这个独立工具,来了解你测试了哪些内容。
安装完成后,你可以这样做:
$ coverage run manage.py test *yourapp*
这会为你创建一个 .coverage
文件。你可以用这个文件里的数据进行格式化,
$ coverage report
这样就能得到一个完整的测试覆盖率列表(包括其他Python库的代码)。你可以轻松使用 coverage report --omit path
来排除特定路径开头的模块。此外,你还可以用 -m
选项查看在测试运行中没有被执行的代码行。
另外,我觉得有一个叫 django_coverage
的Django应用,它可以把 coverage
集成到Django项目的测试中。这样你就能生成漂亮的HTML格式的覆盖率报告。
现在还有其他工具,比如twill等,可以满足特定需求(比如JavaScript测试)。
如果你想详细了解如何在Django下设置基础测试,可以看看“Django 1.1 Testing and Debugging”(可以在亚马逊上查找)。
先别写代码。
先为你的应用程序应该完成的功能写测试。
首先,使用Django自带的测试工具。在你的models.py文件里,写模型测试,作为TestCase类。
现在就去做。在继续阅读之前,立即添加django.test.TestCase
类,来创建、修改和获取模型对象。确保你为每个属性、特性或额外的方法都写了一个测试方法。
我会等你完成这个。
模型测试完成了吗?很好。
现在在每个应用里创建一个tests.py文件。每个应用都要有。可以先留空。
在每个tests.py文件里,为每个表单创建django.test.TestCase
类。
现在就去做。创建有效的和无效的表单。为每个字段的验证问题创建表单。
不用创建所有可能的错误数据组合。只需为每个单独的验证规则写一个测试案例。
现在就去做。在继续阅读之前,给每个表单的tests.py添加django.test.TestCase
类。
我会等你完成这个。
现在,你需要测试每个视图函数。这些也放在tests.py文件里。每个视图函数至少要有两个测试案例,可能更多,具体取决于你使用的装饰器。
如果一个视图函数需要登录,你就有两个情况:已登录和未登录。
如果一个视图函数需要权限,你至少有三个情况:未登录、以错误用户登录、以正确用户登录。
现在,你只需要确保视图函数确实做了某件事,并返回正确的HTML模板和一些正确的数据。别想太多。你只想确认所有视图函数都能返回预期的页面。就这样。
现在就去做。在继续阅读之前,为每个视图函数的tests.py添加django.test.TestCase
类。
我会等你完成这个。
这些是你应该首先写的测试,先于任何应用代码。
这样可以给你一个测试基础,确认你的应用程序至少能正常运行。
一旦完成这些,你就可以开始考虑反映你应用程序真实目的和价值的单元测试。
此外,这一系列文章到目前为止对测试Django应用程序有一些很好的建议:
http://toastdriven.com/blog/2011/apr/10/guide-to-testing-in-django/
我对这个回答唯一的建议是,不要把所有东西都放在tests.py
文件里,而是按照文章的建议来做。创建一个tests
目录,并通过添加一个__init__.py
文件将其变成一个模块,然后把所有的测试用例都导入到那里。例如:from myapp.tests.views import *
。这绝对是个好建议。要先学会走路,才能跑得快……tests
!你看我说的对吧?