【简说Python WEB】Flask应用的单元测试

tests/test_basics.py

import unittest
from flask import current_app
from app import create_app, db class BasicsTestCase(unittest.TestCase):
def setUp(self):
self.app = create_app('testing')
self.app_context = self.app.app_context()
self.app_context.push()
db.create_all def tearDown(self):
db.session.remove()
db.drop_all()
self.app_context.pop() def test_app_exists(self):
self.assertFalse(current_app is None) def test_app_is_testing(self):
self.assertTrue(current_app.config['TESTING'])

这里调用unitest包,单元测试标准库。测试两个功能:

  • 测试确保应用实例是否存在。
  • 测试config配置文件是否正常。

主应用zsdblog.py启动单元测试的命令

@app.cli.command()
@click.argument('test_names', nargs=-1)
def test(test_names):
"""Run the unit tests."""
import unittest
if test_names:
tests = unittest.TestLoader().loadTestsFromNames(test_names)
else:
tests = unittest.TestLoader().discover('tests')
unittest.TextTestRunner(verbosity=2).run(tests)

为了报错,特定修改config.py文件如下:

#..
class TestingConfig(Config):
TESTING = True
HOSTNAME = '172.30.200.252'
DATABASE = 'zsd'
USERNAME = 'zsd'
PASSWORD = 'zsd'
# DB_URI = 'mysql+pymysql://{}:{}@{}:3306/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HO
STNAME, DATABASE)
# SQLALCHEMY_DATABASE_URI = DB_URI

可以看到上述的TESTING代表的tag标识。指定测试哪一个环境配置文件。

我这里特定注释掉DB_URISQLALCHEMY_DATABASE_URI,为了单元测试报错。如下:

启动测试:

(zsdpy1) $ flask test
test_app_exists (test_basics.BasicsTestCase) ... /home/zsd/venv/zsdpy1/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py:814: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '
ok
test_app_is_testing (test_basics.BasicsTestCase) ... ok ----------------------------------------------------------------------
Ran 2 tests in 0.024s OK

'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '报了这个错误,修改回上述config.py文件。测试正常,如下:

(zsdpy1) $ flask test
test_app_exists (test_basics.BasicsTestCase) ... ok
test_app_is_testing (test_basics.BasicsTestCase) ... ok ----------------------------------------------------------------------
Ran 2 tests in 0.122s OK

【简说Python WEB】Flask应用的单元测试的更多相关文章

  1. 【简说Python WEB】Flask应用的文件结构

    目录 [简说Python WEB]Flask应用的文件结构 1.文件结构的目录 2.配置程序--config.py 3.app应用包 4.剥离出来的email.py 5.蓝本(BLueprint)的应 ...

  2. 【简说Python WEB】数据库

    目录 [简说Python WEB]数据库 数据库表 docker安装MySQL Flask-SQLAlchemy操纵MySQL数据库 初始化 定义模型 定义关系 数据库的CRUD操作 创建表 inse ...

  3. 【简说Python WEB】Flask-Moment

    目录 [简说Python WEB]Flask-Moment 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6 ...

  4. 【简说Python WEB】视图函数操作数据库

    目录 [简说Python WEB]视图函数操作数据库 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6.9 ...

  5. 【简说Python WEB】Web应用部署

    目录 [简说Python WEB]Web应用部署 应用层 缓存层 数据层 Gunicorn 的应用 1.安装Gunicorn 2.Gunicorn的启动 Nginx 的应用 1.docker方式部署安 ...

  6. 【简说Python WEB】pyechart在flask中的应用

    个人笔记总结,可读性不高.只为自己总结用.怕日后忘记. 这里用到了tushare,pandas等python组件. pyechart的案例 c = ( Bar() .add_xaxis([" ...

  7. python web -- flask

    Flask是一个简洁的 Python_web 框架. 零. virtualenv 虚拟环境配置. $ easy_install pip $ pip install virtualenv $ virtu ...

  8. Python Web Flask源码解读(一)——启动流程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  9. Python Web Flask源码解读(二)——路由原理

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  10. Python Web Flask源码解读(四)——全局变量

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

随机推荐

  1. Scala数值类型转换、算数运算符、关系(比较)运算符和逻辑运算符

    原则 强制类型转换 Java : int num = (int)2.5Scala : var num : Int = 2.7.toInt 数值类型和String类型之间的转换 (1)基本类型转 Str ...

  2. 测试开发之系统篇-安装KVM虚拟机

    虚拟机(Virtual Machine)和容器(Container)是两种流行的虚拟化技术. 虚拟机模拟机器的硬件,包括了完整的操作系统和应用,它一旦被开启,预分配给它的资源将全部被占用.容器是运行在 ...

  3. mysql系列之杂谈(一)

    从刚开始工作到现在,除了实习的时候在国企用过oracle,毕业之后陪伴我的数据库一直都是mysql,而由于mysql的开源特性,也让成为无数公司的宠儿,越走越远. 我们在刚开始使用mysql时,会发现 ...

  4. 品质影音体验,畅享娱乐生活丨HMS Core.Sparkle影音娱乐创新线上沙龙报名启动

    从全民娱乐到全民创作,音视频.直播已成为文娱市场中最为活跃的内容形态,用户在享受视听娱乐的同时,也更期待通过这些平台来表达自己. 面对用户个性化需求的增加,影音娱乐应用开发者和内容平台,该如何通过技术 ...

  5. Qt线程简单使用三:QRunnable~线程池

    需求: 点击QPushButton按钮,QLabel中的数字,不断累加,一直到999.   做法: 创建任务类,点击QPushButton后,将任务类放入线程池中运行,通过任务类while循环,不断发 ...

  6. IntelliJ IDEA 配置类注释模板

    菜单栏依次点击 File > Settings 在弹出窗口中找到 Editor >File and Code Templates 在右侧中 Files 选项卡中找到 Class. 在右侧输 ...

  7. CTFshow Reverse 逆向4 学习记录

    题目 分析过程 是一个无壳,64位的文件 丢到IDA里面,找到main函数 1 int __cdecl __noreturn main(int argc, const char **argv, con ...

  8. Leetcode-队列得最大值

    请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的均摊时间复杂度都是O(1).若队列为空,pop_front ...

  9. mysql 重新整理——索引优化explain字段介绍二 [十]

    前言 紧接上文. 正文 type type字段有如下类型: 1.all 2.index 3.rang 4.ref 5.eq_ref 6.const,system 7.null 最好到最差的顺序为: s ...

  10. Python 生成带Logo的圆角带边框二维码

    Python 生成二维码方式就不累述了,不会的自己百度吧 但python生成的二维码太难看了,要么没有logo,要么logo直接贴进去的,难看死了,有的也处理了一下,但没有圆角,也难看: 以下:是不是 ...