【发布时间】:2020-12-23 23:59:22
【问题描述】:
我有一个 API,我正在为其构建 test_app.py 文件,但它已经完全可用,并且已经通过 Postman 在本地和外部托管的测试。
我什至无法让我的健康端点工作,这使我(显然)无法进行更多测试并继续前进。但是,它并没有通过测试,而是在我打印分配给端点的变量时返回 404。
test_app.py:
import os
import unittest
import json
from flask_sqlalchemy import SQLAlchemy
from app import create_app
from models import setup_db, Actor, Movie
class CastingAgencyTestCase(unittest.TestCase):
def setUp(self):
self.app = create_app()
self.client = self.app.test_client
self.database_name = "casting_test"
self.database_path = "postgres://{}/{}".format("localhost:5432", self.database_name)
setup_db(self.app, self.database_path)
self.new_actor = {
"name": "Robert DOwney Jr.",
"age": 45,
"gender": "male"
}
self.new_movie = {
"title": "Iron Man",
"release_date": "02/03/2004"
}
with self.app.app_context():
self.db = SQLAlchemy()
self.db.init_app(self.app)
self.db.create_all()
def tearDown(self):
pass
def test_health(self):
res = self.client().get('/')
print(res)
data = json.loads(res.data)
self.assertEqual(res.status_code, 200)
self.assertIn('health', data)
self.assertEqual(data['health'], 'App is running.')
if __name__ == "__main__":
unittest.main()
那个print(res)的输出是<Response streamed [404 NOT FOUND]>,然后测试失败是因为res.data里面什么都没有,当然不是因为找不到页面。
app.py(直到创建健康端点的位置):
import os
from flask import Flask, request, abort, jsonify, render_template, \
redirect, url_for, send_from_directory
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from models import Actor, Movie, setup_db, db_drop_and_create_all, db
from auth import AuthError, requires_auth
def create_app(test_config=None):
app = Flask(__name__)
setup_db(app)
CORS(app, resources={r"/*": {"origins": "*"}})
# db_drop_and_create_all()
return app
app = create_app()
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000, debug=True)
# -----------
# @app.routes
# -----------
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Headers',
'Content-Type, Authorization')
response.headers.add('Access-Control-Allow-Methods',
'GET, POST, PATCH, DELETE, OPTIONS')
return response
@app.route('/')
def home():
return jsonify({
'success': True,
'health': 'App is running.'
}), 200
models.py(到创建 setup_db 的地方):
import os
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, String, Integer, ForeignKey, Float, Date, Table
from flask_migrate import Migrate
# ---------
# Config.
# ---------
database_path = os.environ.get('DATABASE_URL')
if not database_path:
database_name = "agency"
database_path = "postgres://{}:{}@{}/{}".format(
'postgres', 'root', 'localhost:5000', database_name)
db = SQLAlchemy()
def setup_db(app, database_path=database_path):
app.config["SQLALCHEMY_DATABASE_URI"] = database_path
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db.app = app
db.init_app(app)
在找到一些有关此类测试的视频后,我无法弄清楚为什么页面可能会返回 404。
【问题讨论】:
标签: python flask sqlalchemy flask-sqlalchemy pytest