Skip to content
武祥晋 edited this page Nov 24, 2013 · 4 revisions

以下内容来自Django 1.5文档的topics/testing部分:

testing

主要是在 tests.py 中定义 django.test.TestCase 的子类进行unit test,可以不用doctest。

testing/overview

使用 from django.utils import unittest 而不是 import unittest 。一般直接使用 from django.test import TestCase 而不要使用 unittest.TestCase ,除非你对此很了解。即 unittest 要用Django的不用Python自带的, TestCase 要用test包的不用unittest包的。

使用 python manage.py test 运行测试,一次Ctrl-C安全退出,第二次强制退出。具体指令格式另行整理。运行测试时无需用 python manage.py runserver 启动一个服务器。

It is a bad idea to have such import-time database queries in your code anyway - rewrite your code so that it doesn’t do this.

test client

django.test.client.Client

用于检查正确的模版是否被渲染,以及是否从view得到正确的变量。不能取代 Selenium 。后者用于模拟浏览器检查HTML是否正确以及JavaScript功能是否正确。后者的使用需要配合 LiveServerTestCase

django.test 包中的 django.utils.unittest.TestCase 的子类

  • SimpleTestCase
  • TransactionTestCase
  • TestCase
  • LiveServerTestCase

特性

TestCase 的子类可直接使用 self.client 而无需自己构造 Client

fixture加载。

自定义测试用的urlconf。相当于测试中的URL Reverse。

临时自定义设置。

各种Assertion。

testing/advanced

The request factory

独立测试view函数用的。

自定义测试框架

与 coverage.py 集成

在开启 coverage 的情况下运行测试: coverage run --source='.' manage.py test myapp

显示报告: coverage reportcoverage html

Other Tools

Selenium -> Capybara -> Cucumber Capybara = Pycabara Rspec = should-dsl, PySpec

SpecLoud uses nose with beautiful syntax and highlight with green & red ludibrio provides mocks & stubs

Gherkin syntax: Pyccuracy, lettuce, freshen, behave pycuke is dead, use freshen instead; freshen is dead, uses nose, complex! behave > lettuce: pythonic, use test database, but poor with django