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实用技巧两则
Aug 29 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
python使用正则筛选信用卡
Jan 27 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
Dec 19 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
python属于解释型语言么
Jun 15 Python
opencv 阈值分割的具体使用
Jul 08 Python
Python 添加文件注释和函数注释操作
Aug 09 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 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
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
js实现转动骰子模型
2019/10/24 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
详解Python的单元测试
2015/04/28 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
解析python实现Lasso回归
2019/09/11 Python
python实现名片管理器的示例代码
2019/12/17 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Python中的整除和取模实例
2020/06/03 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
置业顾问岗位职责
2014/03/02 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
初中学习计划书范文
2014/09/15 职场文书