Django使用unittest模块进行单元测试过程解析


Posted in Python onAugust 02, 2019

Django测试框架非常简单,首选方法是使用python标准库中的unittest模块。

Writing tests

Django的单元测试使用python的unittest模块,这个模块使用基于类的方法来定义测试。类名为django.test.TestCase,继承于python的unittest.TestCase。

from django.test import TestCase
from myapp.models import Animal
 
class AnimalTestCase(TestCase):
  def setUp(self):
    Animal.objects.create(name="lion", sound="roar")
    Animal.objects.create(name="cat", sound="meow")
 
  def test_animals_can_speak(self):
    """Animals that can speak are correctly identified"""
    lion = Animal.objects.get(name="lion")
    cat = Animal.objects.get(name="cat")
    self.assertEqual(lion.speak(), 'The lion says "roar"')
    self.assertEqual(cat.speak(), 'The cat says "meow"')

运行测试的时候,测试程序会在所有以test开头的文件中查找所有的test cases(inittest.TestCase的子类),自动建立测试集然后运行测试。

注意:如果测试是基于数据库访问的(读取、查询Model),一定要用django.test.TestCase建立测试类,而不要用unittest.TestCase。

Runing tests

执行目录下所有的测试(所有的test*.py文件):

$ python manage.py test

执行animals项目下tests包里的测试:

$ python manage.py test animals.tests

执行animals项目里的test测试:

$ python manage.py test animals

单独执行某个test case:

$ python manage.py test animals.tests.AnimalTestCase

单独执行某个测试方法:

$ python manage.py test animals.tests.AnimalTestCase.test_animals_can_speak

为测试文件提供路径:

$ python manage.py test animals/

通配测试文件名:

$ python manage.py test --pattern="tests_*.py"

启用warnings提醒:

$ python -Wall manage.py test

数据库

测试是需要数据库的,django会为测试单独生成数据库。不管你的测试是否通过,当你所有的测试都执行过后,这个测试数据库就会被销毁。

默认情况下,测试数据库的名字是test_DATABASE_NAME,DATABASE_NAME是你在settings.py里配置的数据库名.如果 你需要给测试数据库一个其他的名字,在settings.py中指定TEST_DATABASE_NAME的值。使用sqlite3时,数据库是在内存中创建的。

除了数据库是单独创建的以外,测试工具会使用相同的数据库配置--DATABASE_ENGINE, DATABASE_USER, DATABASE_HOST等等.创建测试数据库的用户DATABASE_USER(settings中)指定,所以你需要确认 DATABASE_USER有足够的权限去创建数据库。

测试执行顺序

为了保证所有的测试都从干净的数据库开始,执行顺序如下:

1.所有的TestCase子类首先运行。

2.所有其他的单元测试(unittest.TestCase,SimpleTestCase,TransactionTestCase)。

3.其它的测试(例如doctests等)

加速测试

可以将PASSWORD_HASHERS设置为更快的算法:

PASSWORD_HASHERS = (
  'django.contrib.auth.hashers.MD5PasswordHasher',
)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python列表去重的二种方法
Feb 14 Python
Python的时间模块datetime详解
Apr 17 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
Jan 29 Python
python Django里CSRF 对应策略详解
Aug 05 Python
Python发送邮件的实例代码讲解
Oct 16 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
如何将PySpark导入Python的放实现(2种)
Apr 26 Python
Python批量处理csv并保存过程解析
May 16 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
pip安装python库的方法总结
Aug 02 #Python
python twilio模块实现发送手机短信功能
Aug 02 #Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 #Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 #Python
Python CVXOPT模块安装及使用解析
Aug 01 #Python
Python Selenium 之数据驱动测试的实现
Aug 01 #Python
Python 一键获取百度网盘提取码的方法
Aug 01 #Python
You might like
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
php日期操作技巧小结
2016/06/25 PHP
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
python 中的列表解析和生成表达式
2011/03/10 Python
Python中的列表知识点汇总
2015/04/14 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
临床医学专业个人的自我评价
2013/09/27 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
公民代理授权委托书
2014/09/24 职场文书
机械专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年残联工作总结
2014/11/21 职场文书
学校端午节活动总结
2015/02/11 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
利用Python实时获取steam特惠游戏数据
2022/06/25 Python