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读取环境变量的方法和自定义类分享
Nov 22 Python
Python设计模式之代理模式简单示例
Jan 09 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
Python常见的pandas用法demo示例
Mar 16 Python
python腾讯语音合成实现过程解析
Aug 01 Python
python制作朋友圈九宫格图片
Nov 03 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
Apr 30 Python
Python安装并操作redis实现流程详解
Oct 13 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
python matlab库简单用法讲解
Dec 31 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实现限制IP访问的方法
2017/04/20 PHP
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
vue实现pdf文档在线预览功能
2019/11/26 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python3.2中的字符串函数学习总结
2015/04/23 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
简述python Scrapy框架
2020/08/17 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
财务部岗位职责
2013/11/19 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
学校课外活动总结
2014/05/08 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
上班迟到检讨书
2014/09/15 职场文书
初中学生操行评语
2014/12/26 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫