Как добавить заголовки в Flask test_request_context?Python

Программы на Python
Anonymous
 Как добавить заголовки в Flask test_request_context?

Сообщение Anonymous »

У меня есть тестирование, чтобы сделать тестовый клиент в моем приложении Flask: < /p>

@pytest.fixture(scope='session')
def test_client():
""" Create the application and the test client.
"""
print('----------Setup test client----------')
app = create_app(config_class=config.TestConfig)
testing_client = app.test_client()

ctx = app.test_request_context()
ctx.push()
yield testing_client # this is where the testing happens
print('-------Teardown test client--------')
ctx.pop()
< /code>

Я хотел бы добавить заголовок для «пользовательского агента» в этот контекст запроса тестирования, потому что в своем приложении я проверяю браузер пользователя. Я получаю имя браузера в своем приложении через < /p>

user_agent = flask.request.user_agent.browser
< /code>

Эта строка возвращает нет, если я использую тестовый клиент выше. В то время как я могу успешно установить заголовок «Пользовательский агент» в отдельных запросах в пределах одного теста, например:user_agent_str = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

response = test_client.get('/some_flask_route',
environ_base={'HTTP_USER_AGENT': user_agent_str},
follow_redirects=True)
< /code>

После этого:
flask.request.user_agent.browser< /code>
возвращает 'chrome', как и ожидалось. Один из моих многочисленных тестов. < /p>

ожидаемое поведение < /h3>

Я ожидаю, что смогу установить заголовок, когда я сделаю тест Запросить контекст в моем тестовом приспособлении, например:user_agent_str = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

@pytest.fixture(scope='session')
def test_client():
""" Create the application and the test client.
"""
print('----------Setup test client----------')
app = create_app(config_class=config.TestConfig)
testing_client = app.test_client()
ctx = app.test_request_context(environ_base={'HTTP_USER_AGENT': user_agent_str})
ctx.push()
yield testing_client # this is where the testing happens
print('-------Teardown test client--------')
ctx.pop()
< /code>

И это установило бы среду для всех запросов, устраняя необходимость установить Environ_base в каждом из моих запросов. < /p>

Фактическое поведение < /h3>

При добавлении Environment_base в test_request_context () не сломает приспособление, он не устанавливает заголовок «Агент пользователя», и < /p>
flask.request.user_agent.browser
< /code>

возвращает нет. < /p>

среда < /h3>

Версия Python: 3.7.3 < /li>
версия колбы: 1.1.1 < /li>
Версия Werkzeug: 0.15.4 < /li>
< /ul>

Я попробовал решение, предложенное в вопросе здесь: Настройка (Mocking) Заголовки запроса для теста приложения App < /p>
< Br /> Но это, кажется, ничего не меняет. Я просто запускаю сервер Flask на Localhost без развертывания, то есть, по сути, просто: < /p>

app = Flask(__name__)
app.run(host='127.0.0.1',port=5000,debug=True)


Подробнее здесь: https://stackoverflow.com/questions/593 ... st-context

Вернуться в «Python»