如何测试Flask应用程序单元测试中的功能?

时间:2017-02-22 00:37:15

标签: python unit-testing flask redis

POOL = redis.ConnectionPool(host='localhost', port=6379, db=0)

app = Flask(__name__)

@app.route('/get_cohort_curve/', methods=['GET'])```
def get_cohort_curve():

    curve = str(request.args.get('curve'))
    cohort = str(request.args.get('cohort'))

    key = curve+cohort
    return get_from_redis(key)

def get_from_redis(key):
    try:
        my_server = redis.Redis(connection_pool=POOL)
        return json.dumps(my_server.get(key))
    except Exception, e:
        logging.error(e)

app.run()

我需要为此编写单元测试。

如何测试路线,即获取请求到达正确的位置?

我是否需要在测试中为每个功能创建和销毁应用程序的实例?

我是否需要创建模拟redis连接?

1 个答案:

答案 0 :(得分:1)

如果你有兴趣在Flask中运行某些东西,你可以创建一个虚拟环境并测试整个shebang,但在我看来,这是最难的方式。

当我构建我的网站在本地安装Redis时,设置端口然后用适当的密钥在其中存放一些数据是必不可少的。我在iPython(jupyter)笔记本中完成了所有开发工作,这样我就可以在添加Flask的混杂层之前测试函数和与Redis的交互。

然后你设置一个完美的模板,围绕它的固体HTML和CSS来设置网站的样式。如果没有数据作为html页面,那么你继续前进到Flask的python部分。

固化Flask目录。确保将它们放在虚拟环境中,以便您可以从浏览器中调用它们,并将虚拟环境视为服务器。

您创建了app.py申请。我一次创建了一个页面函数。测试看它是否正确推送变量在页面上发布并调用正确的模板。使用@app.route

后,使用照片和数据,然后在下一页的模板上运行并运行正确

如果非常缓慢,一次调试一件,这样你就可以看到你何时以及如何出错。您只能使用redis服务器运行该站点并运行您的虚拟环境。 然后,您必须关闭VE进行编辑并重新启动才能进行测试。起初它很糟糕,但随着时间的推移它会变得死记硬背。

编辑:

如果您真的只想测试路线,那么只需使用@ app.route定义制作app.py并返回页面(您正在调用的模板)。您可以将测试分成小块,但是您必须确保您选择的量子可以作为笔记本或命令行执行中的python脚本执行,或者作为紧凑的功能自包含网站执行....除非你使用我在评论中提到的包:Flask Unit Testing Applications

您需要创建REAL Redis连接,否则您将出错。