该模块是django的单元测试模块,测试web应用是个复杂的任务,因为web应用由很多的逻辑层组成 -- 从HTTP层面的请求处理,到表单验证和处理,到模板渲染。使用Django的测试执行框架和各种各样的工具,你可以模拟请求,插入测试数据,检查你的应用的输出,以及大体上检查你的代码是否做了它应该做的事情。
Django的单元测试依赖于Python的unittest模块。
编写测试用例
from django.test import TestCase
from myapp.models import Animal
class AnimalTestCase(TestCase):
def setUp(self):
Animal.objects.create(name="lion", sound="roar")
Animal.objects.create(name="cat", sound="meow")
def test_animals_can_speak(self):
"""Animals that can speak are correctly identified"""
lion = Animal.objects.get(name="lion")
cat = Animal.objects.get(name="cat")
self.assertEqual(lion.speak(), 'The lion says "roar"')
self.assertEqual(cat.speak(), 'The cat says "meow"')
运行测试
./manage.py test
测试客户端
测试客户端是一个Python类,作为一个虚拟的Web浏览器,允许您测试您的视图,并与您的Django供电的应用程序以编程方式交互。
你可以用测试客户端做的一些事情是:
- 模拟对URL的GET和POST请求,并观察响应 - 从低级HTTP(结果头和状态代码)到页面内容的一切。
- 查看重定向链(如果有),并在每个步骤中检查网址和状态代码。
- 测试给定的请求是否由给定的Django模板呈现,其中模板上下文包含某些值。
示例
>>> from django.test import Client
>>> c = Client()
>>> response = c.post('/login/', {'username': 'john', 'password': 'smith'})
>>> response.status_code
200
>>> response = c.get('/customer/details/')
>>> response.content
'<!DOCTYPE html...'
测试响应
get()和post()方法都会返回Response对象。此Response对象不是与Django视图返回的HttpResponse对象相同;测试响应对象具有一些对于测试代码验证有用的附加数据。
该模块的具体内容
- init.py : 模块初始化文件。
- client.py : 我们上面提到的客户端,模拟浏览器进行测试。
- html.py : 解析html。
- runner.py :运行测试用例。
- selenium.py :对selenium框架的支持。
- signals.py :信号接收器。
- testcases.py :测试用例。
- utils.py :测试工具类。
更多Django教程
学习更多Django教程