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

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • Python flask框架post接口调用示例

    本文实例讲述了Python flask框架post接口调用.分享给大家供大家参考,具体如下: from flask import Flask,render_template,request app = Flask(__name__) @app.route("/login",methods = ['POST','GET']) def login(): if request.method == "POST": username = request.form.get('u

  • Flask框架模板继承实现方法分析

    本文实例讲述了Flask框架模板继承实现方法.分享给大家供大家参考,具体如下: 在模板中,可能会遇到以下情况: 多个模板具有完全相同的顶部和底部内容 多个模板中具有相同的模板代码内容,但是内容中部分值不一样 多个模板中具有完全相同的 html 代码块内容 像遇到这种情况,可以使用 JinJa2 模板中的 继承 来进行实现 模板继承是为了重用模板中的公共内容.一般Web开发中,继承主要使用在网站的顶部菜单.底部.这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写. 标签定义的内容 {%

  • flask框架路由常用定义方式总结

    本文实例讲述了flask框架路由常用定义方式.分享给大家供大家参考,具体如下: 路由的各种定义方式 请求方式限定 使用 methods 参数指定可接受的请求方式,可以是多种 @app.route('/',methods=['GET']) def hello(): return '<h1>hello world</h1>' 路由查找方式 同一路由指向两个不同的函数,在匹配过程中,至上而下依次匹配 @app.route('/') def hello(): return '<h1&

  • Flask框架模板渲染操作简单示例

    本文实例讲述了Flask框架模板渲染操作.分享给大家供大家参考,具体如下: from flask import render_template from flask import Flask from flask import Markup from flask import abort, redirect app = Flask(__name__) @app.route('/') def hello_site(): return "welcome my site!!!!!" #返回给

  • Vue+Flask实现简单的登录验证跳转的示例代码

    本文介绍了Vue+Flask实现简单的登录验证跳转,分享给大家,具体如下: 文件位置: login.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> <script type="text/javascript" src="../sta

  • python flask框架实现重定向功能示例

    本文实例讲述了python flask框架实现重定向功能.分享给大家供大家参考,具体如下: flask 重定向: from flask import * app = Flask(__name__) @app.route('/') def index(): return redirect(url_for('login')) @app.route('/login') def login(): return render_template('login.html') if __name__ == '_

  • Flask框架单例模式实现方法详解

    本文实例讲述了Flask框架单例模式实现方法.分享给大家供大家参考,具体如下: 单例模式: 程序运行时只能生成一个实例,避免对同一资源产生冲突的访问请求. Django   admin.py下的admin.site.register() ,  site就是使用文件导入方式的单例模式 创建到单例模式4种方式: 1.文件导入 2. 类方式 3.基于__new__方式实现 4.基于metaclass方式实现 1.文件导入: in  single.py class Singleton(): def __

  • Flask教程之重定向与错误处理实例分析

    本文实例讲述了Flask教程之重定向与错误处理.分享给大家供大家参考,具体如下: Flask类有一个redirect()方法. 当我们调用它时, 它会返回一个响应对象并且按指定的状态码将用户重定向到另一个位置. redirect()方法的原型如下: Flask.redirect(location, statuscode, response) 在上面的函数中, location 我们要重定向的URL位置 statuscode 状态码会在http头中发送给浏览器, 默认为302 response 用

  • flask框架jinja2模板与模板继承实例分析

    本文实例讲述了flask框架jinja2模板与模板继承.分享给大家供大家参考,具体如下: jinja2模板 from werkzeug.contrib.cache import SimpleCache from flask import Flask, request, render_template,redirect,abort, url_for CACHE_TIME = 300 cache = SimpleCache() cache.timeout = CACHE_TIME app = Fla

  • Flask框架中request、请求钩子、上下文用法分析

    本文实例讲述了Flask框架中request.请求钩子.上下文用法.分享给大家供大家参考,具体如下: request 就是flask中代表当前请求的request对象: 常用的属性如下: 属性 说明 类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict args 记录请求中的查询参数 MultiDict cookies 记录请求中的cookie信息 Dict headers 记录请求中的报文头 EnvironHeaders method 记录请求

随机推荐