这是我参与更文挑战的第28天,活动详情查看: 更文挑战
前言
之前的文章简单介绍了如何封装Flask-SQLAlchemy中的CRUD方法
最基础的功能实现后, 当我们开始编写业务逻辑代码时, 测试将成为必不可少的东西
它有时候甚至比代码本身更重要
所以, 本文将着重讲解如何利用pytest对Flask项目进行测试
方案
使用pytest进行测试, 在官方文档中有部分示例, 各位兄弟们可以自行学习
理论很简单, 我们在进行测试前, 只需要按照如下步骤实施即可:
- 安装pytest
- 编写测试环境相关代码
- 编写测试用例
接下来我们就一步步来实现一个接口的测试用例
安装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的启动啦