python - 如何测试使用 SQLAlchemy 的 Flask 应用程序?

标签 python session testing flask sqlalchemy

我有一个使用 SqlAlchemy 在 Flask 上运行的 Web 应用程序,用于审核新闻,它有一些 api 方法来处理审核请求,例如批准、拒绝当前选定的新闻、列出它们等。

我想为此方法编写单元测试,并让它们工作,但我不明白如何在一个数据库 session 中执行我从测试用例中执行的所有请求,以便我可以删除所有更改数据库。还是有其他更清洁或正确的方法来做到这一点?

我发现也许我需要的只是 SqlAlchemy 中的“scoped_session”,但我实现它的所有尝试都失败了。如果这是正确的方法,请告诉我在哪里使用这行代码(在设置中,或在测试用例 set_up 方法中)。

from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker
session_factory = sessionmaker()
Session = scoped_session(session_factory) 

最佳答案

我建议您使用 Flask-Testing扩大。这是一个经过批准的扩展,可让您根据需要进行单元测试。它也有专门针对 SQLAlchemy 的部分。

使用 SQLAlchemy 进行测试

如果您将 Flask-Testing 与 SQLAlchemy 一起使用,这将涵盖几个要点。假设您使用的是 Flask-SQLAlchemy 扩展,但如果不是这样,示例应该不会太难适应您自己的特定设置。

首先,确保将数据库 URI 设置为生产数据库以外的其他内容!其次,在每次测试运行时创建和删除表通常是个好主意,以确保干净的测试:"

from flask.ext.testing import TestCase

from myapp import create_app, db

class MyTest(TestCase):

    SQLALCHEMY_DATABASE_URI = "sqlite://"
    TESTING = True

    def create_app(self):

        # pass in test configuration
        return create_app(self)

    def setUp(self):

        db.create_all()

    def tearDown(self):

        db.session.remove()
        db.drop_all()

关于python - 如何测试使用 SQLAlchemy 的 Flask 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17791571/

相关文章:

python - 在 Django 项目中构建模板的最佳实践是什么?

python - Scikit-learn 交叉验证分数 : too many indices for array

python - Google-maps 使用 Python 请求进行业务身份验证问题

c# - 清除应用程序启动时的所有 session

testing - 另一个关于 XPath 结构与 SoapUI 和 Property Transfer - 嵌套重复标签

python - 是否可以将 templateMatch 与二进制图像一起使用?我有一个错误

java - 禁用 Tomcat 6 中的 JSP session

python - 在django中,如何在没有请求的情况下修改批处理 session ?

java - 如何使用Java捕获网络流量并在不使用代理的情况下获取文件类型?

c# - 编码UI : The Browser gets closed as finish testing without keeping for testing further steps