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过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python内置函数之filter map reduce介绍
Nov 30 Python
Python中字典和集合学习小结
Jul 07 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
python中使用np.delete()的实例方法
Feb 01 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
Python+Appium实现自动抢微信红包
May 21 Python
python ansible自动化运维工具执行流程
Jun 24 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中几个常用的魔术常量
2012/02/23 PHP
让PHP更快的提供文件下载的代码
2012/06/13 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
Vue.js实现数据响应的方法
2018/08/13 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
Python制作词云的方法
2018/01/03 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
机械制造专业个人的自我评价
2013/12/28 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
经管应届生求职信范文
2014/05/18 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
效能风暴心得体会
2014/09/04 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
2014年度个人总结范文
2015/03/09 职场文书
2015员工年度考核评语
2015/03/25 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers