使用Django/Python获得最多测试覆盖率的最佳实践?

Lia*_*iam 16 python testing django unit-testing code-coverage

我的测试严重缺乏,我对它们没有太多的信心.使用Django/Python获得最多测试覆盖率的最佳实践有哪些?我一直在看FreshenLettuce,看起来非常有前途,但我不能用它们做什么,可以吗?我正在寻找有关如何通过测试构建我的工作流/项目的建议,这样我在生产环境中部署新代码时会感到自信.

S.L*_*ott 34

  1. 停止编码.

  2. 为应用程序应该执行的操作编写测试.

首先,使用内置的Django测试.在model.py中将模型测试写为TestCase类.

现在就这样做.在进一步阅读之前.立即添加django.test.TestCase创建,修改和检索模型对象的类.确保您为每个属性,属性或您定义的额外方法都有一个测试方法.

我会等到你完成那件事.


模型测试完成?好.

现在在每个应用程序中创建一个tests.py文件.每一个.全是空的.

在每个tests.py文件中django.test.TestCase为每个Form 创建类.

现在做.创造好的和坏的形式.使用每个单独的字段验证问题创建表单.

不要创建所有可能的错误数据排列.每个验证规则只有一个测试用例.

现在就这样做.在进一步阅读之前.django.test.TestCase为每个Form 添加类到tests.py.

我会等到你完成那件事.


现在,您必须测试每个视图功能.它们也进入tests.py文件.每个视图函数至少有两个测试用例,可能更多,具体取决于您使用的各种装饰器.

如果视图功能需要登录,则有两种情况:登录但未登录.

如果视图功能需要权限,则至少有三种情况:未登录,以错误用户身份登录,以正确用户身份登录.

现在,您只需要确保视图函数执行某些操作并使用任何正确的数据返回正确的HTML模板.别发疯了.您只是想确保所有视图函数实际返回预期的页面.而已.

现在就这样做.在进一步阅读之前.django.test.TestCase为每个视图函数向tests.py 添加类.

我会等到你完成那件事.


这些是您在编写任何应用程序代码之前应首先编写的测试.

这将为您提供一个测试基线,确认您的应用程序将最小化运行.

完成后,您可以开始考虑反映应用程序背后的真实目的和价值的单元测试.

  • @LaundroMat:模型不是Django中的重用单元.应用程序 - 作为一个整体 - 是重用的单位. (3认同)
  • @ S.Lott当你说在`models.py`中编写测试时,我找不到任何消息来源说测试应该在测试文件夹或`tests.py`中的任何地方.你会在`models.py`而不是在测试目录中说它更好吗?我指的是你的第一步/指示. (2认同)

Der*_*lds 10

此外,到目前为止,这一系列文章对测试django应用程序有一些很好的建议:

http://toastdriven.com/blog/2011/apr/10/guide-to-testing-in-django/

我对答案的唯一批评是不将所有内容存储在tests.py文件中,而是按照文章的建议进行操作.创建一个tests目录并通过添加__init__.py文件并将所有测试用例导入模块将其转换为模块.例如from myapp.tests.views import *.但绝对是合理的建议.在你跑步之前要走路...... tests!看看我在那里做了什么?


Ole*_*siy 7

我假设你已经完成了测试Django应用程序.使用正确的帮助工具集,您应该可以使用Django测试框架进行默认的单元测试.

为了让您开始测量覆盖率,您可能需要独立研究覆盖范围,以确定您测试的内容.

安装完成后,您可以执行以下操作:

$ coverage run manage.py test *yourapp*
Run Code Online (Sandbox Code Playgroud)

它会.coverage为您创建文件.您可以使用此格式格式化此文件中的数据

$ coverage report
Run Code Online (Sandbox Code Playgroud)

获得测试覆盖率的完整列表(包括来自其他python库的代码).您可以轻松地coverage report --omit path以特定路径开头的模块.此外,您还可以使用-m选项查看在测试运行期间未执行的行.

此外,我认为有一个django_coverageDjango应用程序集成coverage到Django项目的测试中.它为您提供了很好的HTML覆盖率报告.

现在还有其他工具,如斜纹等,以满足特定需求(如javascript测试).

此外,如果您想要详细了解在Django下设置vanilla测试的详细步骤,您可能需要阅读"Django 1.1测试和调试"(在亚马逊上查找).