终于在第六章见到测试的东西了,之前的几章节,让我了解了用python做后端的一些基础东西吧算,也做了一个简单的发布会签到系统,其实看书不算快,很多时候都在磨蹭,不过最近反正就是强制自己不玩游戏吧,毕竟玩游戏有时候也真的不如看书有趣,最近也想很多,反正先把虫师的书看完,然后会为了新公司看金融类的书,有时候真的不知道自己的兴趣所向,或者之前在找工作的时候别人问会问这个公司如何适应,问是不是我所感兴趣的,其实我内心想的是,职业的做法不就是应该干一行爱一行吗?既然我选择了金融行业,当然会为了这个行业作出更多的了解,其他行业我也会的。
废话不多说了,讲讲内容吧,第六章在一开始讲了unittest单元测试框架,从一个简单的例子介绍unittest工作的内容,
module.py的代码
'''
Author:zyh
Date:2017-7-22
Describe:+ - * /
'''
class Calculator:
'''
to make two numbers add sub mul div
'''
def __init__(self,a,b):
self.a = int(a)
self.b = int(b)
#add
def add(self):
return self.a + self.b
def sub(self):
return self.a - self.b
def mul(self):
return self.a * self.b
def div(self):
return self.a / self.b
test.py的代码
#!/usr/bin/python3
'''
Author:zyh
Date:2017-7-22
Describe:+ - * /
'''
import unittest
from module import Calculator
class ModuleTest(unittest.TestCase):
def setUp(self):
self.cal = Calculator(8,4)
def tearDown(self):
pass
def test_add(self):
result = self.cal.add()
self.assertEqual(result,12)
def test_sub(self):
result = self.cal.sub()
self.assertEqual(result,4)
def test_mul(self):
result = self.cal.mul()
self.assertEqual(result,32)
def test_div(self):
result = self.cal.div()
self.assertEqual(result,2)
if __name__ == '__main__':
#main()
#make test
suite = unittest.TestSuite()
suite.addTest(ModuleTest("test_add"))
suite.addTest(ModuleTest("test_sub"))
suite.addTest(ModuleTest("test_mul"))
suite.addTest(ModuleTest("test_div"))
#run
runner = unittest.TextTestRunner()
runner.run(suite)
下面就是结合前五章的内容做了例子了,就放一个吧,因为之前没有做过,也测不了。
#!/usr/bin/python3
'''
Author:zyh
Date:2017-7-22
Describe:django test
'''
import os,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "guest.settings")# project_name 项目名称
django.setup()
#os.environ['DJANGO_SETTINGS_MODULE'] = 'guest.settings' # myTest是项目名称
from django.test import TestCase
from sign.models import Event,Guest
from django.contrib.auth.models import User
#Create your tests here
class IndexPageTest(TestCase):
''' test index.html'''
def test_index_page_renders_index_template(self):
''' test index shitu'''
response = self.client.get('/index/')
self.assertEqual(response.status_code,200)
self.assertTemplateUsed(response,'index.html')
class LoginActionTest(TestCase):
'''test denglu action'''
def setUp(self):
User.objects.create_user('admin','admin@mail.com','xx5595480')
def test_add_admin(self):
'''test add user'''
user = User.objects.get(username="admin")
self.assertEqual(user.username,"admin")
self.assertEqual(user.email,"admin@mail.com")
def test_login_action_username_password_null(self):
'''user password=null'''
test_data = {'username':'','password':''}
response = self.client.post('/login_action/',data=test_data)
self.assertEqual(response.status_code,200)
self.assertIn(b'username or password error!',response.content)
def test_login_action_username_password_error(self):
'''user passoword=error!'''
test_data = {'username':'abc','password':'123'}
response = self.client.post('/login_action/',data=test_data)
self.assertEqual(response.status_code,200)
self.assertIn(b'username or password error!',response.content)
def test_login_action_success(self):
''' denglu success'''
test_data = {'username':'admin','password':'xx5595480'}
response = self.client.post('/login_action/',data=test_data)
self.assertEqual(response.status_code,302)
class EventMangeTest(TestCase):
'''fabuhui manage'''
def setUp(self):
User.objects.create_user('admin','admin@mail.com','xx5595480')
Event.objects.create(name="xiaomi5",limit=2000,address='beijing',status=1,start_time='2017-8-10 12:30')
self.login_user = {'username':'admin','password':'xx5595480'}
def test_event_manage_success(self):
'''test fabuhi:xiaomi5'''
response = self.client.post('/login_action/',data=self.login_user)
response = self.client.post('/event_manage/')
self.assertEqual(response.status_code,200)
self.assertIn(b"xiaomi5",response.content)
self.assertIn(b"beijing",response.content)
def test_event_mangae_search_success(self):
'''test fabuhui search'''
response = self.client.post('/login_action/',data=self.login_user)
response = self.client.post('/search_name/',{"name":"xiaomi5"})
self.assertEqual(response.status_code,200)
self.assertIn(b"xiaomi5",response.content)
self.assertIn(b"beijing",response.content)
然后说我遇到的几个问题吧
1. 因为没有直接登录django的shell,导致出现 Requested setting EMAIL_BACKEND, 问题,网上也找不到答案,想想其实还是自己没有按书操作
2.遇到这个问题,call settings.configure() before accessing settings.我用网上的方法可解,应该就是没有设置默认库,
import os,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "guest.settings")#project_name 项目名称
django.setup()
3.还有个问题 AssertionError: b' 'not found in django 暂时没解出来。。。
4.这个不是BUG,在解bug的时候,找到一些还不错的文章,讲django的源码解析,还有一个讲的是python 下的mock操作,大家有兴趣也可以找找。