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 相关文章推荐
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
Python 查看文件的编码格式方法
Dec 21 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
PYcharm 激活方法(推荐)
Mar 23 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 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简介
2006/10/09 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
Python随手笔记之标准类型内建函数
2015/12/02 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
Python模块 _winreg操作注册表
2020/02/05 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
建筑总经理岗位职责
2014/02/02 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL