Flask 单元测试失败,出现 404 错误

Test failing in Flask unit test with 404 error

我正在 运行 单元测试来测试一个 API 在使用 Postman 测试时工作正常。 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 变量的原因是模块没有被导入。我在另一个线程中问过这个问题。这是它的 link : Can not import the files from parent directory even though it has __init__.py file in it

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

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

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


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