Django中编写测试程序
开发django项目有段时间了,最近修改程序多次引入新的错误,思考原因,简单的功能测试其实能够发现的。功能多了后,回归测试确实很麻烦。
下面是一个简单的测试用例。
# -*- encoding=utf-8 -*-
import os
from django.test import TestCase, Client
from fund.models import FundProp, FundPlan
from account.models import MyUser, Department
class ListFundsTest(TestCase):
"""
Test for fund app
"""
def setUp(self):
"""
set up db and vars before every testcases run
"""
self.c = Client()
self.u1 = MyUser.objects.create_user(login_name="testuser1", worker_id='002', password='123')
u2 = MyUser.objects.create_user(login_name='testuser2', worker_id='003', password='123')
u3 = MyUser.objects.create_user(login_name='hh', worker_id='004', password='123')
d = Department.objects.create(department_name=u'财务科')
d1 = Department.objects.create(department_name=u'办公室')
d2 = Department.objects.create(department_name=u'人事科')
self.u1.departments.add(d)
self.u1.save()
u2.departments.add(d2)
u3.departments.add(d1, d)
def test_list_funds_login(self):
"""
login as testuser1 and request list funds, it will get funds list with nothing
"""
resp = self.c.post('/accounts/login/', {'username':'testuser1', 'password': '123'})
self.assertEqual(resp.status_code, 302)
resp = self.c.get('/fund/list_funds/')
self.assertEqual(resp.status_code, 200)
self.assertTrue(len(resp.context_data.get('fund_list')) == 0)
def test_list_funds_nologin(self):
"""
request list funds with no login, it would redirect to login page
"""
resp = self.c.get('/fund/list_funds/')
self.assertEqual(resp.status_code, 302)
self.assertEqual(resp.url, 'http://testserver/accounts/login/?next=/fund/list_funds/')
运行测试用例
python manage.py test fund