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 实现堆排序算法代码
Jun 05 Python
python+pyqt实现右下角弹出框
Oct 26 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
使用pandas读取文件的实现
Jul 31 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
Python基础之常用库常用方法整理
Apr 30 Python
使用Pytorch训练two-head网络的操作
May 28 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数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
javascript 解析url的search方法
2010/02/09 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
详解在Python程序中使用Cookie的教程
2015/04/30 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
windows下python和pip安装教程
2018/05/25 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
centos7之Python3.74安装教程
2019/08/15 Python
python默认参数调用方法解析
2020/02/09 Python
python实现连连看游戏
2020/02/14 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
结婚主持人致辞
2015/07/28 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
党员理论学习心得体会
2016/01/21 职场文书