У меня возникают сложные временные параметры тестовых переменных сеанса для модульного тестирования некоторых видов фляг. Существуют переменные сеанса «email» и «display name», которые обычно устанавливаются с помощью кода, который обрабатывает элементы входа в Google Oauth2. Моя цель - позволить инструментальным средствам тестирования установить эти переменные сеанса. Таким образом, мои конечные точки Flask можно протестировать независимо от всего бизнеса oauth2.Не удается получить переменные сеанса в тестовом модуле
Вот что я пробовал до сих пор. Я написал отдельный мини-проект «incrementer number», чтобы изолировать проблему. Вот трассировка стека от запуска модульного теста.
Error
Traceback (most recent call last):
File "/home/myusername/PycharmProjects/FlaskTestingStuff/MyFlaskTest.py", line 12, in testNumberIncrease
self.assertTrue(res is not None)
File "/usr/lib/python3.4/contextlib.py", line 66, in __exit__
next(self.gen)
File "/usr/local/lib/python3.4/dist-packages/flask/testing.py", line 94, in session_transaction
self.cookie_jar.extract_wsgi(c.request.environ, headers)
File "/usr/local/lib/python3.4/dist-packages/flask/ctx.py", line 386, in __exit__
self.auto_pop(exc_value)
File "/usr/local/lib/python3.4/dist-packages/flask/ctx.py", line 374, in auto_pop
self.pop(exc)
File "/usr/local/lib/python3.4/dist-packages/flask/ctx.py", line 341, in pop
self.app.do_teardown_request(exc)
File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1710, in do_teardown_request
bp = _request_ctx_stack.top.request.blueprint
AttributeError: 'NoneType' object has no attribute 'request'
Вот мой номер, увеличивающий количество флагов «мини-проект».
from flask import Flask, session, request
app = Flask(__name__)
app.secret_key = "somedumbkey"
@app.route("/increasenum", methods=["GET"])
def increase_num():
if session and "last_num" in session:
num = session["last_num"]
num = str(int(num) + 1)
session["last_num"] = num
return num
else:
session["last_num"] = "0"
return "0"
if __name__ == '__main__':
app.run(debug=True)
И, наконец, это единичный тест, который мне тяжело.
import unittest
from flaskapp import app
from flask import session
class FlaskTestCase(unittest.TestCase):
def testNumberIncrease(self):
with app.test_client() as client:
with client.session_transaction() as sess:
sess["last_num"] = "8"
res = client.get("/increasenum")
self.assertTrue(res is not None)
if __name__ == '__main__':
unittest.main()
Есть ли у кого-нибудь идеи по правильной настройке «moker session variables» надлежащим образом для этих типов модульных тестов?
Я думаю, это потому, что он не имеет контекст запроса. Может помочь использовать 'с app.test_request_context():' [Docs] (http://flask.pocoo.org/docs/0.10/api/#flask.Flask.test_request_context) – adarsh