flask 单元测试
程序开发过程中,代码是为了完成需求,当代码编译通过后,能不能保证功能的正常实现,需要我们编写测试代码,模拟程序运行过程,检验功能是否符合预期。
单元测试主要面向一些功能单一的模块进行。
单元测试,实际上就是一些“断言”的代码,用于判断函数或对象的一个方法所产生的结果是否符合预期
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 单元测试的更多相关文章
- Flask 单元测试 unittest
import unittest 单元测试 app = Flask(__name__) -------------------------------------------- import unite ...
- Flask 备注一(单元测试,Debugger, Logger)
Flask 备注一(单元测试,Debugger, Logger) Flask是一个使用python开发Web程序的框架.依赖于Werkzeug提供完整的WSGI支持,以及Jinja2提供templat ...
- Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程
[保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...
- cookiecutter-flask生成的框架里边自带了一个CRUDMixin类
单元测试的必要性 之前曾经写过一篇讲单元测试的,正好最近也在实践和摸索.我似乎有种洁癖,就是我会严格遵守流程性的东西,比如测试,注释和文档等.目前就职的公司在我接手项目的时候是没有一行单元测试的,我挺 ...
- django-dailyfresh
Hold on ,learn by myself! redis nosql - 不支持sql语法 - 存储数据都是KV形式 - Mongodb - Redis - Hbase hadoop - Cas ...
- Python框架学习之Flask中的蓝图与单元测试
因为Flask框架的集成度很低,随着Flask项目文件的增多,会导致不太好管理.但如果对一个项目进行模块化管理的,那样子管理起来就会特别方便.而在Flask中刚好就提供了这么一个特别好用的工具蓝图(B ...
- Flask学习之七 单元测试
英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vii-unit-testing 中文翻译地址:http ...
- flask内容学习之蓝图以及单元测试
蓝图的概念: 简单来说,蓝图是一个存储操作方法的容器.这些操作在这个蓝图被注册到一个应用之后就可以被调用.Flask可以通过蓝图来制止URL以及处理请求.Flask使用蓝图来让应用实现模块化,在Fla ...
- Flask之单元测试
5.2单元测试 为什么要测试? Web程序开发过程一般包括以下几个阶段:[需求分析,设计阶段,实现阶段,测试阶段].其中测试阶段通过人工或自动来运行测试某个系统的功能.目的是检验其是否满足需求,并得出 ...
随机推荐
- PyCharm 专业版激活方法
郑重声明: JetBrains公司的PyCharm专业版是收费的,本文所述激活方法仅限于短时内体验和试用PyCharm专业版,使用后请当天立即删除.若需要继续使用PyCharm专业版,请在官网购买.当 ...
- vs添加到附加进程调试(IIS页面调试)
有时候单元测试不是很方便,通过页面调试接口会更直观,也跟容易发现问题(尤其是在页面传参的时候),这时vs添加到附加进程的调试方式就显得尤为重要了! 步骤如下: 1.首先是通过IIS建立网站,(前提是要 ...
- MySQL【Delete误操作】数据恢复【转】
前言: 操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,因为需要还原和binlog差来恢复,等不了,很费时.这里先说明下因为Delete 操作的恢复方法 ...
- EF CodeFirst使用Nuget更新数据库
常用命令: 1.开启迁移 Enable-Migrations -EnableAutomaticMigrations 2.添加一条迁移记录 Add-Migration AddMigration001 3 ...
- Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)
主调度器 在内核中的许多地方, 如果要将CPU分配给与当前活动进程不同的另一个进程, 都会直接调用主调度器函数schedule, 从系统调用返回后, 内核也会检查当前进程是否设置了重调度标志TLF_N ...
- Windows 远程桌面剪贴板失效的处理办法
解决方法: 1.在任务管理器里选择rdpclip.exe进程,结束进程: 2.任务管理器左上角,文件-运行新任务,输入rdpclip.exe,确定运行即可.
- LeetCode算法题-Min Stack(Java实现)
这是悦乐书的第177次更新,第179篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第36题(顺位题号是155).设计一个支持push,pop,top和在恒定时间内检索最小 ...
- February 19th, 2018 Week 8th Monday
Love is blind, hard to find, difficult to get, and impossible to forget. 爱,很盲目,很难找,很难得,很难忘. It is al ...
- 【Git】Git pull 强制覆盖本地文件
git fetch --all git reset --hard origin/master git pull 备注: git fetch 只是下载远程的库的内容,不做任何的合并 git reset ...
- Django 中的 日志处理
日志处理: 上线后必须使用 便于以后的 维护 管理 根据日志 处理 BUG 在 项目中 定义一个 存放日志的 文件夹 log 存放所有 等级 的 日志 配置: 将下面的日志的 配置 写入 django ...