我正在运行单元测试以测试在用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
据我了解,如果我可以导入项目本身中使用的应用程序实例,那我应该很好,但是那也不起作用。
答案 0 :(得分:0)
这是我解决问题的方法。因此,显然需要使服务器运行才能访问API并成功运行测试。
因此,我在代码末尾添加了app.run()
,它工作正常。这是它的样子
if __name__ == '__main__':
unittest.main()
app.run()