我正在测试一个 Flask 应用程序(Flask 0.9),特别是我有一个会话装置,我想以记录的方式运行,就像这样(据我了解):
from flask import Flask, session
app = Flask(__name__)
@app.route('/', methods=['POST'])
def m():
logging.error(session) # expect {'x': 1}
return ""
with app.test_request_context() as trc:
with app.test_client() as c:
with c.session_transaction() as sess:
sess['x'] = 1
c.post()
这按预期工作,输出如下所示:
ERROR:root:<SecureCookieSession {'x': 1}>
不幸的是,我遇到了一个未在端点函数中设置会话数据的意外结果,即输出如下所示:
ERROR:root:<SecureCookieSession {}>
仅当从我的单元测试框架运行时才会出现此问题。就目前而言,我无法用退化的情况重现这个问题,尽管我已经做出了相当大的努力,其中一些努力的要点在这里。重点是我已经包括在内itsdangerous
,并且Google App Engine testbed
期望其中之一可能是原因。
在我自己的系统上,我比gist走得更远,并且几乎完全复制了我的单元测试框架,试图隔离这一点。同样,我已经从我的测试框架中删除了越来越多的相关代码。就这一点而言,我无法想到可能影响结果的退化案例和我的精简框架之间的差异。我已经遍历了c.post()
pdb 中的调用,试图找出这种恶意的原因,但还没有收集到任何有用的见解。
总而言之,对于问题可能出在哪里的一点指导或建议,我将不胜感激。什么可能会影响 Werkzeug 的环境,以至于session_transaction
没有得到尊重?