注明
本笔记主要参考《Django应用开发实战》《Django企业开发实战》,这两本书前者详细,后者精炼。学习之后真的是感觉自己进步了很多。值得一读,如果你遇到了值得一读的书籍,欢迎推荐给我,大家共同进步。
前言
网站开发完成之后上线之前我们必须要进行功能测试,一般的测试方法无非是使用浏览器网页,但这种方式不太方便。Django 框架自带了单元测试工具Django单元测试也是使用了python自带的unittest,Django的testTestCase继承了python的unittest.TestCase。
使用步骤
1.在APP下定义test文件并创建ModelTest类,继承自django.test.TestCase测试类。
2.重写setUp()方法,此方法一般是用来做数据初始化,如为测试提供数据信息,单元测试在允许过程中会创建一个虚拟的数据库,所以可以重写setup为测试用例提供数据支持。
3.自定义测试用例:函数名必须要以test开头。
……
4.使用命令允许test运行:
python manage.py test/python manage.py test someapp
from django.test import TestCase
from .models import PersonInfo
from django.contrib.auth.models import User
from django.test import Client
class PersonInfoTest(TestCase):
# 添加数据
def setUp(self):
PersonInfo.objects.create(name='Lucy', age=10)
PersonInfo.objects.create(name='May', age=12)
# 编写测试用例
def test_personInfo_age(self):
# 编写用例
name1 = PersonInfo.objects.get(name='Lucy')
name2 = PersonInfo.objects.get(name='May')
# 判断测试用例的执行结果
self.assertEqual(name1.age, 10)
self.assertEqual(name2.age, 12)
# 编写测试用例
def test_api(self):
# 编写用例
c = Client()
response = c.get('/api/')
# 判断测试用例的执行结果
self.assertIsInstance(response.json(), dict)
# 编写测试用例
def test_html(self):
# 编写用例
c = Client()
response = c.get('/?id=2')
name = response.context['person'].name
# 判断测试用例的执行结果
self.assertEqual(name, 'May')
self.assertTemplateUsed(response, 'index.html')
class UserTest(TestCase):
# 添加数据
@classmethod
def setUpTestData(cls):
User.objects.create_user(username='test', password='test', email='1@1.com')
# 编写测试用例
def test_user(self):
# 编写用例
r = User.objects.get(username='test')
# 判断测试用例的执行结果
self.assertEquals(r.email, '123@456.com')
self.assertTrue(r.password)
# 编写测试用例
def test_login(self):
# 编写用例
c = Client()
r = c.login(username='test', password='test')
# 判断测试用例的执行结果
self.assertTrue(r)
说明:
- 判断结果是否无异常必须要使用Dajango内置断言如上面的self.assertTrue等,内置断言有许多,不此处一一列举,上面展示的已经可以满足基本需求
- setUpTestData:与setup一致