【发布时间】: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