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 pass 语句使用示例
Mar 11 Python
python实现巡检系统(solaris)示例
Apr 02 Python
python通过线程实现定时器timer的方法
Mar 16 Python
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
Python导入txt数据到mysql的方法
Apr 08 Python
Python中encode()方法的使用简介
May 18 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
基于python进行桶排序与基数排序的总结
May 29 Python
PyQt5实现简易电子词典
Jun 25 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 Python
python blinker 信号库
May 04 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微信公众平台示例代码分析(二)
2016/12/06 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
python str与repr的区别
2013/03/23 Python
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
简单了解Python write writelines区别
2020/02/27 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
医学实习生自我鉴定
2013/12/12 职场文书
简历里的自我评价范文
2014/02/24 职场文书
美术专业自荐信
2014/07/07 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
先进事迹演讲稿
2014/09/01 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
python如何为list实现find方法
2022/05/30 Python