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之print详解
Sep 28 Python
python中常用检测字符串相关函数汇总
Apr 15 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
简单实现python进度条脚本
Dec 18 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
python读取文本绘制动态速度曲线
Jun 21 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
Mar 09 Python
pandas分组聚合详解
Apr 10 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
python爬虫工具例举说明
Nov 30 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 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之autoload运行机制实例分析
2014/08/28 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
Javascript 中的类和闭包
2010/01/08 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
javascript数组去掉重复
2011/05/12 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
大学教师年终总结的自我评价
2013/10/29 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
大国崛起日本观后感
2015/06/02 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android