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实现在Linux系统下更改当前进程运行用户
Feb 04 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
python非递归全排列实现方法
Apr 10 Python
python基础之入门必看操作
Jul 26 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
Python print不能立即打印的解决方式
Feb 19 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
Python  word实现读取及导出代码解析
Jul 09 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
php中目录,文件操作详谈
2007/03/19 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
html读出文本文件内容
2007/01/22 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
jquery each()源代码
2011/02/14 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
Python映射拆分操作符用法实例
2015/05/19 Python
详谈python http长连接客户端
2017/06/12 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
python将时分秒转换成秒的实例
2019/12/07 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python 发送get请求接口详解
2020/11/17 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
三方合作协议书范本
2014/04/18 职场文书
物业保安岗位职责
2014/07/02 职场文书
党支部对照检查材料
2014/08/25 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
Python闭包的定义和使用方法
2022/04/11 Python