使用pytest测试Flask(一)

1,124 阅读2分钟

这是我参与更文挑战的第28天,活动详情查看: 更文挑战

前言

之前的文章简单介绍了如何封装Flask-SQLAlchemy中的CRUD方法

最基础的功能实现后, 当我们开始编写业务逻辑代码时, 测试将成为必不可少的东西

它有时候甚至比代码本身更重要

所以, 本文将着重讲解如何利用pytest对Flask项目进行测试

方案

使用pytest进行测试, 在官方文档中有部分示例, 各位兄弟们可以自行学习

理论很简单, 我们在进行测试前, 只需要按照如下步骤实施即可:

  1. 安装pytest
  2. 编写测试环境相关代码
  3. 编写测试用例

接下来我们就一步步来实现一个接口的测试用例

安装pytest

在项目根目录打开控制台, 运行pip install pytest

然后再创建tests文件夹

编写测试环境相关代码

在tests文件夹下, 创建一个名为conftest.py的文件

文如其名, conf-test, 测试的配置

所有的配置重点在于这个装饰器: @pytest.fixture(scope="session")

和conftest一样, 其实在学习新技能时, 我非常建议兄弟们先去查一下不认识的英文单词的意思

它的含义一般都可以准确表明自身的用途

fixure有道的翻译为固定装置, 其实它就是每次测试的固定装置, 而且这也能理解为什么它会有scope(范围)这个参数

scope代表这个固定装置安装的范围或位置, 它有四个值:

  • function: 方法
  • class: 类
  • module: 模块, 一个py文件就是一个模块
  • session: 本次测试全环境

一般的项目都会运用到数据库, 所以在测试环境中, 数据库资源最重要的

如果测试功能相关, 我们可以使用简便的SQLite数据库:

@pytest.fixture(scope="session")
def app():
    app = Flask(__name__)
    db_fd, db_file_path = tempfile.mkstemp(".db", dir="")
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///%s' % db_file_path
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    app.config["JWT_SECRET_KEY"] = "Houtaroy"
    app.config['TESTING'] = True
    try:
        with app.test_request_context():
            yield app
    finally:
        os.close(db_fd)
        os.unlink(db_file_path)

在测试开始之处, 创建数据库临时文件, 并进行Flask相关配置

之后再进行app初始化, 这样我们就完成了一个链接SQLite的小型Flask App的启动啦

未完待续...