Django测试用例

Django默认Python的标准库unittest编写测试用例。Django的单元测试类django.test.TestCase 从unittest.TestCase继承而来。在创建Django应用时,默认已经生成了tests.py测试文件。

setUp()初始化方法创建了2条数据,通过下面的测试方法,查询插入的数据,断言数据是否正确。注意:setUp()初始化方法并不会真正向数据库插入数据,所以不用清理测试数据。

千万不能单独运行tests.py文件。Django执行测试文件的命令为:python manage.py test   

  1. from django.test import TestCase
  2.  
  3. # Create your tests here.
  4. from .models import Event,Guest
  5.  
  6. class ModelsTest(TestCase):
  7.  
  8. def setUp(self):
  9. Event.objects.create(id = 1,name = 'oneplus 3 event',status = True,limit = 2000,
  10. address = 'shenzhen',start_time = '2016-08-31 02:18:22')
  11. Guest.objects.create(id = 1,event_id = 1,realname = 'alen',phone = '',
  12. email = 'alen@mail.com',sign=False)
  13.  
  14. def test_event_models(self):
  15. result = Event.objects.get(id=1)
  16. self.assertEqual(result.address,'shenzhen')
  17. self.assertTrue(result.status,True)
  18.  
  19. def test_guest_models(self):
  20. result = Guest.objects.get(realname = 'alen')
  21. self.assertEqual(result.phone, '')
  22. self.assertFalse(result.sign, False)

运行测试用例:

运行sign应用下的所有用例:python manage.py test sign

运行sign应用下的tests.py测试文件:python manage.py test sign.tests

运行sign应用下的tests.py测试文件下的ModelTest测试类:python manage.py test sign.tests.ModelTest

使用-p参数模糊匹配测试文件:python manage.py test -p test*.py

客户端测试

django.test.client类充当一个虚拟的网络浏览器。可以测试视图views与django的程序来通过脚本交互。

django.test.client可以模拟GET、POST请求,从HTTP到页面内容。可以检查重定向,再检查每一步的URL和status_code,测试一个reuqest被django模板渲染。

  1. class IndexPageTest(TestCase):
  2. '''测试index登录首页'''
  3.  
  4. def test_index_page_renders_index_teplate(self):
  5. '''测试index视图'''
  6. response = self.client.get('/index/') #通过client.get()方法请求/index/路径。
  7. self.assertEqual(response.status_code,200)
  8. # assertTemplateUsed 断言服务器是否给定的是index.html的相应。
  9. self.assertTemplateUsed(response,'index.html')
  1. from django.test import TestCase
  2. from django.contrib.auth.models import User
  3.  
  4. class LoginActionTest(TestCase):
  5. '''测试登录动作'''
  6. def setUp(self):
  7. User.objects.create_user('admintest','admintest@mail.com','admintest123456')
  8.  
  9. def test_add_admintest(self):
  10. '''测试添加用户'''
  11. user = User.objects.get(username = 'admintest')
  12. self.assertEqual(user.username,'admintest')
  13. self.assertEqual(user.email, 'admintest@mail.com')
  14.  
  15. def test_login_action_username_password_null(self):
  16. '''用户名密码为空'''
  17. test_data = {'username':'','password':''}
  18. response = self.client.post('/login_action/',data=test_data)
  19. self.assertEqual(response.status_code,200)
  20. self.assertIn(b'username or password error',response.content)
  21.  
  22. def test_login_action_username_password_error(self):
  23. '''用户名密码错误'''
  24. test_data = {'username':'','password':'abc'}
  25. response = self.client.post('/login_action/',data=test_data)
  26. self.assertEqual(response.status_code,200)
  27. self.assertIn(b'username or password error',response.content)
  28.  
  29. def test_login_action_success(self):
  30. '''登录成功'''
  31. test_data = {'username':'admintest','password':'admintest123456'}
  32. response = self.client.post('/login_action/',data=test_data)
  33. self.assertEqual(response.status_code,302)

上面的代码登录成功会自动跳转到特定页面,所以状态码是302重定向而不是200成功。

下面的代码中测试管理页面和搜索页面必须先登录。

  1. class EventMangeTest(TestCase):
  2. '''发布会管理'''
  3. def setUp(self):
  4. User.objects.create_user('admintest','admintest@mail.com','admintest123456')
  5. Event.objects.create(id=1, name='xiaomiplus', status=True, limit=2000,
  6. address='beijing', start_time='2016-08-31 02:18:22')
  7. self.login_user = {'username':'admintest','password':'admintest123456'}
  8.  
  9. def test_event_manage_success(self):
  10. '''测试发布会:xiaomi i5'''
  11. response = self.client.post('/login_action/',data=self.login_user)
  12. response = self.client.post('/event_manage/')
  13. self.assertEqual(response.status_code,200)
  14. self.assertIn(b'xiaomiplus',response.content)
  15. self.assertIn(b'beijing',response.content)
  16.  
  17. def test_event_manage_search_success(self):
  18. '''测试发布会搜索'''
  19. response = self.client.post('/login_action/',data=self.login_user)
  20. response = self.client.post('/search_name/',{'name':'xiaomiplus'})
  21. self.assertEqual(response.status_code,200)
  22. self.assertIn(b'xiaomiplus',response.content)
  23. self.assertIn(b'beijing',response.content)

嘉宾页面由于需要有发布会和嘉宾的信息,所以不仅要构造和嘉宾的数据而且还需要有发布会的数据。一样要先登录构造登录数据。

  1. class GuestMangeTest(TestCase):
  2. '''嘉宾管理'''
  3. def setUp(self):
  4. User.objects.create_user('admintest','admintest@mail.com','admintest123456')
  5. Event.objects.create(id=1, name='oneplus 3 event', status=True, limit=2000,
  6. address='shenzhen', start_time='2016-08-31 02:18:22')
  7. Guest.objects.create(id=1, event_id=1, realname='alen', phone='',
  8. email='alen@mail.com', sign=False)
  9. self.login_user = {'username':'admintest','password':'admintest123456'}
  10.  
  11. def test_guest_manage_success(self):
  12. '''测试发布会:xiaomi i5'''
  13. response = self.client.post('/login_action/',data=self.login_user)
  14. response = self.client.post('/guest_manage/')
  15. self.assertEqual(response.status_code,200)
  16. self.assertIn(b'alen',response.content)
  17. self.assertIn(b'',response.content)
  18.  
  19. def test_guest_manage_search_success(self):
  20. '''测试发布会搜索'''
  21. response = self.client.post('/login_action/',data=self.login_user)
  22. response = self.client.post('/search_phone/',{'phone':''})
  23. self.assertEqual(response.status_code,200)
  24. self.assertIn(b'alen',response.content)
  25. self.assertIn(b'',response.content)
  1. class SignIndexActionTest(TestCase):
  2. '''发布会签到'''
  3. def setUp(self):
  4. User.objects.create_user('admintest','admintest@mail.com','admintest123456')
  5. Event.objects.create(id=1, name='oneplus 3 event', status=True, limit=2000,
  6. address='shenzhen', start_time='2016-08-31 02:18:22')
  7. Event.objects.create(id=2, name='xiaomi plus', status=True, limit=2000,
  8. address='beijing', start_time='2016-08-31 02:18:22')
  9. Guest.objects.create(id=1, event_id=1, realname='alen', phone='',
  10. email='alen@mail.com', sign=1)
  11. Guest.objects.create(id=2, event_id=2, realname='judywang', phone='',
  12. email='judywang@mail.com', sign=0)
  13. self.login_user = {'username':'admintest','password':'admintest123456'}
  14.  
  15. def test_sign_action_phone_null(self):
  16. '''手机号为空'''
  17. response = self.client.post('/login_action/',data=self.login_user)
  18. response = self.client.post('/sign_index_action/1/',{'phone':''})
  19. self.assertEqual(response.status_code,200)
  20. self.assertIn(b'phone error',response.content)
  21.  
  22. def test_sign_action_phone_or_event_id_error(self):
  23. '''手机号或者发布会id错误'''
  24. response = self.client.post('/login_action/', data=self.login_user)
  25. response = self.client.post('/sign_index_action/2/', {'phone':''})
  26. self.assertEqual(response.status_code, 200)
  27. self.assertIn(b'phone or event_id error', response.content)
  28.  
  29. def test_sign_action_user_sign_has(self):
  30. '''用户已签到'''
  31. response = self.client.post('/login_action/', data=self.login_user)
  32. response = self.client.post('/sign_index_action/1/', {'phone':''})
  33. self.assertEqual(response.status_code, 200)
  34. self.assertIn(b'user has sign in.', response.content)
  35.  
  36. def test_sign_action_sign_success(self):
  37. '''签到成功'''
  38. response = self.client.post('/login_action/', data=self.login_user)
  39. response = self.client.post('/sign_index_action/2/',{'phone':''})
  40. self.assertEqual(response.status_code, 200)
  41. self.assertIn(b'sign in success.', response.content)

Django 测试开发5 unittest测试用例的更多相关文章

  1. django测试开发-1.开始Hello django!

    用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,本篇写一个简单的“hello django! ...

  2. Django 测试开发4 Django 模板和分页器

    Django结合前端框架Bootstrap来开发web页面.pip install django-bootstrap3 在setting.py添加‘bootstrap3’. 继承模板. 在base页面 ...

  3. Django 测试开发2

    1.get方法和post方法 get方法  post方法 直接把method修改成post,报错如下,Django针对CSRF的保护措施是在生成的每个表单放置一个自动生成的令牌,通过这个令牌判断POS ...

  4. Django 测试开发1

    笔者用的版本的是django==1.8.2,这个版本的学习资料最多,文档最完整.首先创建项目:django-admin startproject 项目名. guest/__init__.py 一个空的 ...

  5. Django 测试开发3 数据模型models和admin管理工具

    参考:https://blog.csdn.net/weixin_44510615/article/details/89425412 1.Django模型字段常用类型: IntegerField : 整 ...

  6. python3的unittest中使用test suite(测试套件)执行指定测试用例

    示例代码 module.py class baidumodule(): def __init__(self,driver,): self.dr = driver #不能在类中再次导入webdriver ...

  7. 测试开发:Python+Django实现接口测试工具

    Python+Django接口自动化 引言: 最近被几个公司实习生整自闭了,没有基础,想学自动化又不知道怎么去学,没有方向没有头绪,说白了其实就是学习过程中没有成就感,所以学不下去.出于各种花里胡哨的 ...

  8. 测试开发中Django和Flask框架

    Python测试开发中Django和Flask框架 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后 ...

  9. 《自动化平台测试开发-Python测试开发实战》新书出版了

    首先 第一本书,当初在百度阅读初步写了个电子版,刚一上线不久即收到了数百位读者朋友阅读收藏购买,于是顺利成章就出版了纸质书. <软件自动化测试开发>认真看过的读者应该都知道,介绍的主要是自 ...

随机推荐

  1. python网络爬虫之爬取图片

    今天使用requests和BeautifulSoup爬取了一些图片,还是很有成就感的,注释可能有误,希望大家多提意见: 方法一:requests import requests from bs4 im ...

  2. 华为SDN:解决传统网络3大问题

    转:http://mp.ofweek.com/tele/a145613326756 科技潮人 2013-08-05 14:20 传统网络之困 互联网爆炸式增长,除了规模和发展速度远超之前所有曾出现的数 ...

  3. spark coalesce和repartition的区别和使用场景

    区别: repartition底层调用的是coalesce方法,默认shuffle def repartition(numPartitions: Int)(implicit ord: Ordering ...

  4. IPTables 和 Netfilter 框架

    前言 防火墙是保护服务器的重要工具. Linux中最常用的基本防火墙软件是iptables.iptables通过与Linux内核网络堆栈(networking stack)中的包过滤钩子(packet ...

  5. Elasticsearch 最佳运维实践 - 总结(一)

    对于Elasticsearch的学习,需要清楚的明白它的每个核心概念,由浅入深的了解,才能更好的掌握这门技术.下面先简单罗列下Elasticsearch的核心概念: 一.Elasticsearch数据 ...

  6. ui自动化测试 SeleniumBase

    ui自动化 SeleniumBase SeleniumBase是一个自动化web测试框架,它的设计pyse相似,基于selenium和unittest封装的框架,api多,支持命令行多参数执行 文档地 ...

  7. eclipse等编辑器选中列快编辑的方法

    一.eclipse 1.首先按alt+shift+a,开启块选择模式 2.使用鼠标进行块选择 3.再次按Alt+Shift+a即可关闭块选择模式 二.EditPlus 1.菜单:编辑 -> 选择 ...

  8. java中的深拷贝与浅拷贝

    Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那 ...

  9. jquery点击显示或隐藏

    点击第一个dd,给第一li添加class,点击第二个dd,给第二个li添加class,以此类推 $(function(){     $("dd > a").click(fun ...

  10. jquery头部高亮显示方法

    做网站都有头部导航栏,但导航栏的高亮显示一般都是后台技术人员做传参判断来显示高亮样式,今天来教大家一个用jquery来显示 废话不多说,直接上代码 第一步,在需要的页面中写入 <input ty ...