У меня есть тестирование, чтобы сделать тестовый клиент в моем приложении 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