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 相关文章推荐
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
快速了解Python相对导入
Jan 12 Python
浅析Python函数式编程
Oct 06 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
Python如何使用input函数获取输入
Aug 06 Python
python输入中文的实例方法
Sep 14 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 Python
python游戏开发之pygame实现接球小游戏
Apr 22 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导航下拉菜单的实现如此简单
2013/09/22 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
JS之小练习代码
2008/10/12 Javascript
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
vue--vuex详解
2019/04/15 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
Python使用gRPC传输协议教程
2018/10/16 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
Django celery异步任务实现代码示例
2020/11/26 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
.NET是怎么支持多种语言的
2015/02/24 面试题
《山谷中的谜底》教学反思
2014/04/26 职场文书
大学生赌博检讨书
2014/09/22 职场文书
美容院员工规章制度
2015/08/05 职场文书
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL