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实现360的字符显示界面
Feb 21 Python
python图像处理之反色实现方法
May 30 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
对Python中的@classmethod用法详解
Apr 21 Python
python+flask实现API的方法
Nov 21 Python
python提取包含关键字的整行数据方法
Dec 11 Python
详解Python3中ceil()函数用法
Feb 19 Python
django foreignkey(外键)的实现
Jul 29 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 Python
Python数据分析入门之教你怎么搭建环境
May 13 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实现WEB动态网页静态
2006/10/09 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
Jquery 绑定时间实现代码
2011/05/03 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
javascript操作数组详解
2014/12/17 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
市场安全管理制度
2014/01/26 职场文书
房地产促销活动方案
2014/03/01 职场文书
ktv筹备计划书
2014/05/03 职场文书
敬老模范事迹
2014/05/21 职场文书
学生安全责任书模板
2014/07/25 职场文书
公司授权委托书样本
2014/09/15 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
Java存储没有重复元素的数组
2022/04/29 Java/Android