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()
我正在 运行 单元测试来测试一个 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()