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中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
详解Python发送邮件实例
Jan 10 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
Python中Proxypool库的安装与配置
Oct 19 Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 Python
提升Python程序性能的7个习惯
Apr 14 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
Python 给下载文件显示进度条和下载时间的实现
Apr 02 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
Python 多线程处理任务实例
Nov 07 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
smarty获得当前url的方法分享
2014/02/14 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
python实现多进程通信实例分析
2019/09/01 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
教师四风对照检查材料思想汇报
2014/09/17 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
Redis 常见使用场景
2021/08/30 Redis
SQLServer常见数学函数梳理总结
2022/08/05 MySQL