【问题标题】:Test failing in Flask unit test with 404 error在 Flask 单元测试中测试失败并出现 404 错误
【发布时间】:2020-02-27 09:54:57
【问题描述】:

我正在运行单元测试来测试一个在使用 Postman 测试时可以正常工作的 API。 API 接受{"body":"hey","title":"title"} 形式的两个参数,根据我制作的模型将这些值添加到数据库中。以类似的格式返回响应,并带有从数据库中获取的额外键 id。问题是它适用于 Postman。但是,当使用 Pytest 进行测试时,它就不起作用了。

这是测试文件中的代码。

import os
import unittest
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# from flask_backend import app
# from flask_backend.core import db


class BasicTests(unittest.TestCase):
    app = Flask(__name__)
    db = SQLAlchemy(app)

    def setUp(self):
        file_path = os.path.abspath(os.getcwd()) + "\database_test.db"
        self.app.config['TESTING'] = True
        self.app.config['DEBUG'] = False
        self.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + file_path
        self.app = self.app.test_client()
        self.db.drop_all()
        self.db.create_all()

    def tearDown(self):
        self.db.session.remove()


class TestApi(BasicTests):

    def test_add_post(self):
        url = 'http://127.0.0.1:5000'
        parameters = {'body': 'Body', 'title': 'title'}
        response = self.app.post(url+'/api/dbapi/post/', data=parameters)
        print(self.app)
        self.assertEqual(response.status_code, 200)


if __name__ == '__main__':
    unittest.main()

我认为在执行测试时服务器未启动,因此引发了 404 错误。

我没有从项目本身导入 app 变量的原因是模块没有被导入。我在另一个线程中问过这个问题。这是它的链接: Can not import the files from parent directory even though it has __init__.py file in it

据我了解,如果我可以导入项目本身中使用的应用程序实例,我应该很好,但这也不起作用。

【问题讨论】:

  • 好像没有app.run() 任何地方
  • 好的,是的,代码中没有。你能帮我看看它应该在代码中的什么位置吗?在设置方法下?
  • 不是因为我在BasicTests类中创建的app实例吗?据我了解,我应该使用实际应用程序/API 中使用的应用程序实例。我不确定。
  • 吹毛求疵:你写的是pytest,但代码中的测试是unittest。是哪一个?

标签: python unit-testing flask python-unittest


【解决方案1】:

这是我解决问题的方法。因此,显然需要让服务器运行才能访问 API 并成功运行测试。

所以,我在代码末尾添加了app.run(),它运行良好。这是它的样子


    if __name__ == '__main__':
        unittest.main()
        app.run()

【讨论】:

    猜你喜欢
    • 2021-02-14
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2014-11-27
    • 2015-09-19
    • 1970-01-01
    相关资源
    最近更新 更多