【问题标题】:Endpoint Returning 404 from Pytest端点从 Pytest 返回 404
【发布时间】: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


    【解决方案1】:

    找到解决方案。

    我的所有端点(实际上,只是整个 app.py 文件)都需要在 create_app 函数中,并且在文件末尾是调用 app = create_app 的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-28
      • 2019-11-14
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      相关资源
      最近更新 更多