【问题标题】:Integration testing Flask on Google App EngineGoogle App Engine 上的集成测试 Flask
【发布时间】:2015-05-17 08:13:08
【问题描述】:

我编写了一个 Flask 应用程序并将其托管在 Google App Engine 上。

如何在 Flask 中运行与 article 中提到的处理程序测试类似的集成测试。

基本上,我想在将应用程序部署到 Google App Engine 之前验证页面列表(位于蓝图中)是否加载了 200 响应代码。

我的 main.py 看起来像

""" main.py is the top level script.

Return Index.html at the root. 
"""

import gdata.youtube
import gdata.youtube.service
import random
import string
import logging

import sys
import json

from google.appengine.ext import ereporter

ereporter.register_logger()
reload(sys)
sys.setdefaultencoding("utf-8")

# sys.path includes 'server/lib' due to appengine_config.py
from flask import Flask
from flask import render_template, request, session, abort
from Routes.BelieveRoutes import believe_routes
from Routes.SermonRoutes import sermon_routes
from Routes.ErrorRoutes import error_routes
from Routes.HomeRoutes import home_routes
from Routes.BookRoutes import book_routes
from Routes.ArticlesRoutes import articles_routes
from Routes.SearchRoutes import search_routes
from Routes.EndPointRoutes import endpoint_routes
from Routes.TestRoutes import test_routes
from Routes.ConferenceRoutes import conference_routes


app = Flask(__name__.split('.')[0])


app.register_blueprint(believe_routes)
app.register_blueprint(sermon_routes)
app.register_blueprint(error_routes)
app.register_blueprint(home_routes)
app.register_blueprint(book_routes)
app.register_blueprint(articles_routes)
app.register_blueprint(search_routes)
app.register_blueprint(endpoint_routes)
app.register_blueprint(test_routes)
app.register_blueprint(conference_routes)


@app.route('/')
@app.route('/index')
def index():
    return render_template('index.html')


@app.errorhandler(500)
def internal_server_error(e):
    return render_template('errorpages/500.html'), 500

【问题讨论】:

    标签: python google-app-engine flask automated-tests


    【解决方案1】:

    这是我根据Google App Engine docsFlask docs 为我的一个处理程序拼凑在一起的一个简单示例。

    首先是我的处理程序(位于handlers/api.py,但在其他方面与您的main.py 处理程序相当):

    # handlers/api.py
    # Import the Flask Framework
    from flask import Flask, jsonify
    
    app = Flask(__name__)
    # Note: We don't need to call run() since our application is embedded within
    # the App Engine WSGI application server.
    
    @app.route('/api/v1.0/ping', methods = ['GET'])
    def ping():
        return jsonify({
            'ping': 'pong'
        })
    
    @app.errorhandler(404)
    def page_not_found(e):
        """Return a custom 404 error."""
        return 'Sorry, Nothing at this URL.', 404
    
    
    @app.errorhandler(500)
    def application_error(e):
        """Return a custom 500 error."""
        return 'Sorry, unexpected error: {}'.format(e), 500
    

    现在是一个简单的集成测试:

    # tests/handlers/test_api.py
    import unittest
    import json
    
    from google.appengine.api import memcache
    from google.appengine.ext import ndb
    from google.appengine.ext import testbed
    
    from handlers import api
    
    
    class ApiHandlerTest(unittest.TestCase):
    
        def setUp(self):
            self.testbed = testbed.Testbed()
            self.testbed.activate()
            self.testbed.init_datastore_v3_stub()
            self.testbed.init_memcache_stub()
            self.app = api.app.test_client()
            ndb.get_context().clear_cache()
    
        def tearDown(self):
            self.testbed.deactivate()
    
        def testPing(self):
            response = self.app.get('/api/v1.0/ping')
            self.assertEqual(response.status_code, 200)
    
            json_data = json.loads(response.data)
            self.assertEqual(json_data['ping'], 'pong')
    

    我可以像这样从命令行运行测试:

    python tests/test.py ~/google-cloud-sdk/platform/google_appengine/
    

    test.py 文件包含在this gist 中。

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      相关资源
      最近更新 更多