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

yipeiwu_com6年前Python基础

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

为什么要测试?

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

测试的分类:

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

什么是单元测试?

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

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

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

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

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

断言方法的使用:

断言语句类似于:

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

单元测试的基本写法:

首先,定义一个类,继承自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注释 Python单行注释以#开头,单...

Python PIL读取的图像发生自动旋转的实现方法

对于手机、相机等设备拍摄的照片,由于手持方向的不同,拍出来的照片可能是旋转0°、90°、180°和270°。即使在电脑上利用软件将其转正,他们的exif信息中还是会保留方位信息。 在用P...

python编程使用selenium模拟登陆淘宝实例代码

selenium简介 selenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选selenium ,相因为它相比QTP有诸多有点: * 免费,也不用再为破解Q...

python基于ID3思想的决策树

这是一个判断海洋生物数据是否是鱼类而构建的基于ID3思想的决策树,供大家参考,具体内容如下 # coding=utf-8 import operator from math imp...

Python 删除连续出现的指定字符的实例

源起 我本想删写一小段代码用于删除一串字符串中的连续重复的指定字符,可能也是长时间不写代码,而且有的时候写代码只途快,很多基础知识都忘光了。我用Python写时一切都没有问题,就差一点,...