使用全局设置在烧瓶中进行单元测试

时间:2017-05-07 16:27:22

标签: python unit-testing flask

我有一个简单的烧瓶应用程序,我已经部署在Elastic Beanstalk中,我试图为它编写一些单元测试并遇到一些困难。

应用程序启动时,需要与EC2的参数存储(通过ssm)通信,下载一个通过kms解密的密钥。如果你不熟悉elasticbeanstalk - 当部署烧瓶应用程序时,它是通过httpd / wsgi完成的。

'秘密'参数只需要检索一次 - 我不想在每次烧瓶请求时都去ssm。

问题是我有这样的事情:

import flask
application = flask.Flask(__name__)

secret = get_ssm_parameter()
application.config['SECRET'] = secret

@application.route('/some/route')
def do_something():
    # does something

当我尝试测试此应用程序时,只要我执行了导入myapp'在单元测试中,它显然试图运行get_ssm_parameter,这是我不想要的,但是我不确定如何创建一些全局设置函数而不会在我导入时立即调用它们。所以我需要一些方法来导入myapp,这样我就可以在它被调用之前模拟出get_secret。

我能想出的最好的东西是:

def get_secret()
    if application.config['SECRET'] is None:
        application.config['SECRET'] = get_ssm_parameter()
    return application.config['SECRET']

@application.route('/some/route')
def route_that_needs_secret():
    secret = get_secret()
    # do some stuff

一旦路径中需要秘密,我就会检索秘密,并将其设置为application.config,这样可以全局保存。

是否有一种模式可以在Flask应用中初始化昂贵的设置,并在请求之间保留这些结果?我想尝试远离将秘密存储在任何地方的缓存中,但我不确定如何在请求之间保留它。否则。

0 个答案:

没有答案