flask框架单元测试原理与用法实例分析


Posted in Python onJuly 23, 2019

本文实例讲述了flask框架单元测试原理与用法。分享给大家供大家参考,具体如下:

为什么要测试?

Web程序开发过程一般包括以下几个阶段:[需求分析,设计阶段,实现阶段,测试阶段]。其中测试阶段通过人工或自动来运行测试某个系统的功能。目的是检验其是否满足需求,并得出特定的结果,以达到弄清楚预期结果和实际结果之间的差别的最终目的。

测试的分类:

测试从软件开发过程可以分为:单元测试、集成测试、系统测试等。在众多的测试中,与程序开发人员最密切的就是单元测试,因为单元测试是由开发人员进行的,而其他测试都由专业的测试人员来完成。所以我们主要学习单元测试。

什么是单元测试?

程序开发过程中,写代码是为了实现需求。当我们的代码通过了编译,只是说明它的语法正确,功能能否实现则不能保证。 因此,当我们的某些功能代码完成后,为了检验其是否满足程序的需求。可以通过编写测试代码,模拟程序运行的过程,检验功能代码是否符合预期。

单元测试就是开发者编写一小段代码,检验目标代码的功能是否符合预期。通常情况下,单元测试主要面向一些功能单一的模块进行。

举个例子:一部手机有许多零部件组成,在正式组装一部手机前,手机内部的各个零部件,CPU、内存、电池、摄像头等,都要进行测试,这就是单元测试。

在Web开发过程中,单元测试实际上就是一些“断言”(assert)代码。

断言就是判断一个函数或对象的一个方法所产生的结果是否符合你期望的那个结果。 python中assert断言是声明布尔值为真的判定,如果表达式为假会发生异常。单元测试中,一般使用assert来断言结果。

断言方法的使用:

flask框架单元测试原理与用法实例分析

断言语句类似于:

if not expression:
  raise AssertionError

常用的断言方法:

assertEqual     如果两个值相等,则pass
assertNotEqual  如果两个值不相等,则pass
assertTrue      判断bool值为True,则pass
assertFalse     判断bool值为False,则pass
assertIsNone    不存在,则pass
assertIsNotNone 存在,则pass

如何测试?

简单的测试用例:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,

def fibo(x):
  if x == 0:
    resp = 0
  elif x == 1:
    resp = 1
  else:
    return fibo(x-1) + fibo(x-2)
  return resp
assert fibo(5) == 5

flask框架单元测试原理与用法实例分析

单元测试的基本写法:

首先,定义一个类,继承自unittest.TestCase

import unittest
class TestClass(unitest.TestCase):
  pass

其次,在测试类中,定义两个测试方法

import unittest
class TestClass(unittest.TestCase):
  #该方法会首先执行,方法名为固定写法
  def setUp(self):
    pass
  #该方法会在测试代码执行完后执行,方法名为固定写法
  def tearDown(self):
    pass

最后,在测试类中,编写测试代码

import unittest
class TestClass(unittest.TestCase):
  #该方法会首先执行,相当于做测试前的准备工作
  def setUp(self):
    pass
  #该方法会在测试代码执行完后执行,相当于做测试后的扫尾工作
  def tearDown(self):
    pass
  #测试代码
  def test_app_exists(self):
    pass

发送邮件测试:

#coding=utf-8
import unittest
from Flask_day04 import app
class TestCase(unittest.TestCase):
  # 创建测试环境,在测试代码执行前执行
  def setUp(self):
    self.app = app
    # 激活测试标志
    app.config['TESTING'] = True
    self.client = self.app.test_client()
  # 在测试代码执行完成后执行
  def tearDown(self):
    pass
  # 测试代码
  def test_email(self):
    resp = self.client.get('/')
    print resp.data
    self.assertEqual(resp.data,'Sent Succeed')

数据库测试:

#coding=utf-8
import unittest
from author_book import *
#自定义测试类,setUp方法和tearDown方法会分别在测试前后执行。以test_开头的函数就是具体的测试代码。
class DatabaseTest(unittest.TestCase):
  def setUp(self):
    app.config['TESTING'] = True
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@localhost/test0'
    self.app = app
    db.create_all()
  def tearDown(self):
    db.session.remove()
    db.drop_all()
  #测试代码
  def test_append_data(self):
    au = Author(name='itcast')
    bk = Book(info='python')
    db.session.add_all([au,bk])
    db.session.commit()
    author = Author.query.filter_by(name='itcast').first()
    book = Book.query.filter_by(info='python').first()
    #断言数据存在
    self.assertIsNotNone(author)
    self.assertIsNotNone(book)

希望本文所述对大家基于flask框架的Python程序设计有所帮助。

Python 相关文章推荐
在Python的Django框架中用流响应生成CSV文件的教程
May 02 Python
收藏整理的一些Python常用方法和技巧
May 18 Python
Python zip()函数用法实例分析
Mar 17 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 Python
Flask框架WTForm表单用法示例
Jul 20 Python
Python比较配置文件的方法实例详解
Jun 06 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
django数据库自动重连的方法实例
Jul 21 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
使用Pytorch来拟合函数方式
Jan 14 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 #Python
python实现socket+threading处理多连接的方法
Jul 23 #Python
简单了解Django ContentType内置组件
Jul 23 #Python
50行Python代码获取高考志愿信息的实现方法
Jul 23 #Python
python设计tcp数据包协议类的例子
Jul 23 #Python
Django 缓存配置Redis使用详解
Jul 23 #Python
Flask框架中request、请求钩子、上下文用法分析
Jul 23 #Python
You might like
php error_log 函数的使用
2009/04/13 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
jQuery功能函数详解
2015/02/01 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
Python基于execjs运行js过程解析
2020/11/27 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
数控技术学生的自我评价
2014/02/15 职场文书
村党支部书记承诺书
2014/05/29 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
学籍证明模板
2014/11/21 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS