unittest简介

因Django自带的测试框架包含Unittest和Doctest,这里以Django的Unittest框架为入口开始学习。
Django Unittest要点:
1)TestCase Classes分类:
a. SimpleTestCase ,一般用于扩展为特定功能的测试函数
b. TransactionTestCase ,事务型 测试用例,一般用于测试Database
c. TestCase ,该类可用于测试 Web Sites
d. LiveServerTestCase(Django1.4以上的版本),该类在后台运行了一个 Live Django Server,并在Teardown函数中关闭Server,这样允许用户自动测试Client
比如Selenium(一个测试工具集),可在浏览器端执行一系列测试功能和模拟真实的用户行为。

2) Fixture
用于为测试用例准备数据,并在测试用例完成后恢复数据库。
从数据库中导出测试用例所需数据的Json文件,在Test Class第一行写一个Fixtures,Django将在测试过程中加载数据Json文件,并在每个TestCase运行完成后,回滚数据库到 Syncdb时的状态

3) Testing response
a. client
发启客户端请求并返回请求结果。Django.test.client中的Client函数。该函数可以在未启动Web服务的情况下,模拟Get和Post等客户端请求,并通过Unittest的其他功能验证请求的返回内容是否正确。
b. content and context
使用Get和Post模拟客户端行为,将返回一个Response Object,其包含Content和Context等多个参数。其中Content是指返回的网页源码中Body中的内容;Context是指模板Template Context,可以通过 response.context['Template中的变量'] 来检测Context中内容的正确性
c. status_code
Http状态码

#以下是一个访问网站首页的测试,包括匿名访问(test_AnonymousGetIndex)和用户登陆访问(test_loginGeIndex)2个用例
#测试类IndexTest中包含3个函数,只有函数名称以“test”开头的才会被当成用例执行
#setUp将在每个用例执行前执行,teatDown则刚好相反,将在每个用例执行之后执行
from django.test.client import Client
from django.test import TestCase

class IndexTest(TestCase):
    def setUp(self):
        self.client = Client()
        
    def test_AnonymousGetIndex(self):
        response = self.client.get('/index/')
        self.assertEqual(response.context['page_num'], 0)
        
    def test_loginGeIndex(self):
        self.client.login(username='test', password='123456')
        response = self.client.get('/index/')
        self.assertEqual(response.context['page_num'], 1)

你可能感兴趣的:(test)