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计数排序和基数排序算法实例
Apr 25 Python
Python实现文件复制删除
Apr 19 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
Python实现多进程共享数据的方法分析
Dec 04 Python
遗传算法python版
Mar 19 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
python如何输出反斜杠
Jun 18 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 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实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
PHP Session机制简介及用法
2014/08/19 PHP
php查询whois信息的方法
2015/06/08 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
JavaScript 实现??打印?理
2007/04/28 Javascript
Javascript 陷阱 window全局对象
2008/11/26 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
js实现导航跟随效果
2018/11/17 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
基于python实现操作git过程代码解析
2020/07/27 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
会计顶岗实习心得
2014/01/25 职场文书
房产协议书范本
2014/10/18 职场文书
社区工作者个人总结
2015/02/28 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android