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

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

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

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. NFV一种提高进程消息高可用性的方法

    1.背景及概述 1.1 背景 在做NFV的过程中,由于控制面进程被放置到不同虚拟机中,中间可能跨越路由器,因此期间网络有可能震荡,这种情况下保证高可用性就必须有保护机制,本文正是在这种背景下的考虑. ...

  2. Spark WordCount 文档词频计数

    一.使用数据 Apache Spark is a fast and general-purpose cluster computing system.It provides high-level AP ...

  3. 前后端分离djangorestframework——版本控制组件

    什么是版本控制 在实际开发中,随着时间的更新迭代,我们维护的项目可能会有很多个版本,所以我们写的API也有很多个版本,但是迭代到高版本,不可能以前的版本就不用了,比如一个手机端的app,不定期发布新版 ...

  4. Mysql的NULL和Empty String

    本文基于Mysql5.7版本的参考资料: https://dev.mysql.com/doc/refman/5.7/en/working-with-null.html https://dev.mysq ...

  5. 重启Zabbix Server

    重启zabbix server:systemctl restart zabbix-server #启动服务 systemctl start zabbix-server systemctl start ...

  6. 利用开机账户登录“轻松访问”创建Windows后门

    利用开机账户登录“轻松访问”创建Windows后门 实验原理: 利用登录账户界面的“轻松访问”中的“放大镜”,把它替换为cmd.exe程序,实现在不登录的情况下打开命令提示符,并进行一些操作(打开的c ...

  7. Linux下完全删除用户

    实验环境:Centos7虚拟机 首先创建一个普通用户gubeiqing. [root@localhost ~]# useradd gubeiqing [root@localhost ~]# passw ...

  8. 06.Python网络爬虫之requests模块(2)

    今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 引入 ...

  9. Python 抖音机器人,论如何在抖音上找到漂亮小姐姐?

    只有想不到,没有做不到,最近抖音风靡好友圈,马上就有技术宅本着“代码改变世界”的理念开始了搞事之路. 需要注意的事,漂亮不漂亮没有明确的界限,每个人都有每个人的审美,只有外表而没有心灵的美也是空洞的. ...

  10. 启动PHP study时提示80端口或者3306端口被占用的解决办法

    一.查看PID WIN+R打开命令行------>netstat -ano+回车,就会显示下面的信息: 二.打开任务管理器 Ctrl+Alt+Delete------>任务管理器,找到对应 ...