程序开发过程中,代码是为了完成需求,当代码编译通过后,能不能保证功能的正常实现,需要我们编写测试代码,模拟程序运行过程,检验功能是否符合预期。

单元测试主要面向一些功能单一的模块进行。

单元测试,实际上就是一些“断言”的代码,用于判断函数或对象的一个方法所产生的结果是否符合预期

python中,断言是申明结果为真的判定,如果表达式为假,程序会发生异常。

常用的断言有:

  assertTrue()  条件为True,则pass

  assertFalse()  条件为False,则pass

  assertEqual()  两个值相等,则pass

  assertNotEqual()  两个值不相等,则pass

  assertIsNone()  不存在,则pass

  assertIsNotNone  存在,则pass

Flask单元测试中用的是python自带的测试框架unittest

(flask,django等都可以直接使用这个框架,不过django对它进行了封装,具体可以看源代码django.test.TestCase)

基本的结构是:

  import unittest

  class Test(unittest.TestCase):

    def setUp(self):

      pass

    def tearDown(self):

      pass

    def test_something1(self):

      pass

    def test_something2(self):

      pass

  if __name__=="__main__":

    unittest.main()

上面代码执行顺序是:setUp()---->test_something1()---->tearDown()

          setUp()---->test_something2()----->tearDown()

setUp():

  用于初始化app,db等

tearDown():

  用于释放资源等

test_something():

  测试主题,函数名以test_开头

完整代码如下:

import unittest

from apps.model import db

class Test(unittest.TestCase)

  from apps import instance_app

  def setUp(self):

    # 实例化核心对象

    self.app = instance_app()

    # 更新server_name

    self.app.config.update(SERVER_NAME='your server name')

    # 获取应用上下文

    self.app_ctx = self.app.app_context()

    self.app_ctx.push()

    # 配置测试用数据库

    self.app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+cymysql://用户名:密码@IP:PORT/DATABASE_NAME"

    # 开启测试标记,可以帮忙定位测试信息

    self.app.config("TESTING") = True

    # 创建表

    self.client = self.app.test_client()

    db.create_all()

  def tearDown(self):

    移除数据库会话对应,如果没有移除数据库会话对象,会导致程序一直运行,无法结束。

    db.session.remove()

    # 删除测试数据库的所有表

    db.drop_all()

  def test_case(self):

    res = self.client.get(url_for("endpoint"))

    res1 = self.client.post(url_for(endpoint), data={})

    # 断言:判断返回结果中包含test字符串  as_text=True是将结果转化为字符串

    self.assertTrue("test" in res.get_data(as_text=True))

    self.assertTrue(res1.status_code==200)

if __name__=="__main__":

  unittest.main()

    

如果项目使用了蓝图,在使用url_for的时候,要传入(蓝图.endpoint)

如我项目中用到了两个蓝图

那么我在对应的做测试的时候,需要这样写:

flask 单元测试的更多相关文章

  1. Flask 单元测试 unittest

    import unittest 单元测试 app = Flask(__name__) -------------------------------------------- import unite ...

  2. Flask 备注一(单元测试,Debugger, Logger)

    Flask 备注一(单元测试,Debugger, Logger) Flask是一个使用python开发Web程序的框架.依赖于Werkzeug提供完整的WSGI支持,以及Jinja2提供templat ...

  3. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

  4. cookiecutter-flask生成的框架里边自带了一个CRUDMixin类

    单元测试的必要性 之前曾经写过一篇讲单元测试的,正好最近也在实践和摸索.我似乎有种洁癖,就是我会严格遵守流程性的东西,比如测试,注释和文档等.目前就职的公司在我接手项目的时候是没有一行单元测试的,我挺 ...

  5. django-dailyfresh

    Hold on ,learn by myself! redis nosql - 不支持sql语法 - 存储数据都是KV形式 - Mongodb - Redis - Hbase hadoop - Cas ...

  6. Python框架学习之Flask中的蓝图与单元测试

    因为Flask框架的集成度很低,随着Flask项目文件的增多,会导致不太好管理.但如果对一个项目进行模块化管理的,那样子管理起来就会特别方便.而在Flask中刚好就提供了这么一个特别好用的工具蓝图(B ...

  7. Flask学习之七 单元测试

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vii-unit-testing 中文翻译地址:http ...

  8. flask内容学习之蓝图以及单元测试

    蓝图的概念: 简单来说,蓝图是一个存储操作方法的容器.这些操作在这个蓝图被注册到一个应用之后就可以被调用.Flask可以通过蓝图来制止URL以及处理请求.Flask使用蓝图来让应用实现模块化,在Fla ...

  9. Flask之单元测试

    5.2单元测试 为什么要测试? Web程序开发过程一般包括以下几个阶段:[需求分析,设计阶段,实现阶段,测试阶段].其中测试阶段通过人工或自动来运行测试某个系统的功能.目的是检验其是否满足需求,并得出 ...

随机推荐

  1. PyCharm 专业版激活方法

    郑重声明: JetBrains公司的PyCharm专业版是收费的,本文所述激活方法仅限于短时内体验和试用PyCharm专业版,使用后请当天立即删除.若需要继续使用PyCharm专业版,请在官网购买.当 ...

  2. vs添加到附加进程调试(IIS页面调试)

    有时候单元测试不是很方便,通过页面调试接口会更直观,也跟容易发现问题(尤其是在页面传参的时候),这时vs添加到附加进程的调试方式就显得尤为重要了! 步骤如下: 1.首先是通过IIS建立网站,(前提是要 ...

  3. MySQL【Delete误操作】数据恢复【转】

    前言:      操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,因为需要还原和binlog差来恢复,等不了,很费时.这里先说明下因为Delete 操作的恢复方法 ...

  4. EF CodeFirst使用Nuget更新数据库

    常用命令: 1.开启迁移 Enable-Migrations -EnableAutomaticMigrations 2.添加一条迁移记录 Add-Migration AddMigration001 3 ...

  5. Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)

    主调度器 在内核中的许多地方, 如果要将CPU分配给与当前活动进程不同的另一个进程, 都会直接调用主调度器函数schedule, 从系统调用返回后, 内核也会检查当前进程是否设置了重调度标志TLF_N ...

  6. Windows 远程桌面剪贴板失效的处理办法

    解决方法: 1.在任务管理器里选择rdpclip.exe进程,结束进程: 2.任务管理器左上角,文件-运行新任务,输入rdpclip.exe,确定运行即可.

  7. LeetCode算法题-Min Stack(Java实现)

    这是悦乐书的第177次更新,第179篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第36题(顺位题号是155).设计一个支持push,pop,top和在恒定时间内检索最小 ...

  8. February 19th, 2018 Week 8th Monday

    Love is blind, hard to find, difficult to get, and impossible to forget. 爱,很盲目,很难找,很难得,很难忘. It is al ...

  9. 【Git】Git pull 强制覆盖本地文件

    git fetch --all  git reset --hard origin/master git pull 备注: git fetch 只是下载远程的库的内容,不做任何的合并 git reset ...

  10. Django 中的 日志处理

    日志处理: 上线后必须使用 便于以后的 维护 管理 根据日志 处理 BUG 在 项目中 定义一个 存放日志的 文件夹 log 存放所有 等级 的 日志 配置: 将下面的日志的 配置 写入 django ...