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 urlopen 使用小示例
Sep 06 Python
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
Python中定时任务框架APScheduler的快速入门指南
Jul 06 Python
pyqt5简介及安装方法介绍
Jan 31 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
将python运行结果保存至本地文件中的示例讲解
Jul 11 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
详解Python中pyautogui库的最全使用方法
Apr 01 Python
Python 随机按键模拟2小时
Dec 30 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 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
php 常用的系统函数
2017/02/07 PHP
php二维码生成以及下载实现
2017/09/28 PHP
实例讲解PHP表单处理
2019/02/15 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
Document 对象的常用方法
2009/07/31 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
Node.js简单入门前传
2017/08/21 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
简明 Python 基础学习教程
2007/02/08 Python
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
Python 定义只读属性的实现方式
2020/03/05 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
市场专员岗位职责
2014/02/14 职场文书
《王二小》教学反思
2014/02/27 职场文书
《将心比心》教学反思
2014/04/08 职场文书
初一学生评语大全
2014/04/24 职场文书
团员年度个人总结
2015/02/26 职场文书