作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个测试装置可以在我的 Flask 应用程序中创建一个测试客户端:
@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()
user_agent = flask.request.user_agent.browser
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)
flask.request.user_agent.browser
按预期返回 'chrome'。
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()
flask.request.user_agent.browser
app = Flask(__name__)
app.run(host='127.0.0.1',port=5000,debug=True)
最佳答案
测试客户端有一个 environ_base
在构建每个请求时设置默认环境的属性。
c = app.test_client()
c.environ_base["HTTP_USER_AGENT"] = "Firefox/71.0"
FlaskClient
可以被子类化以覆盖
open
:
class CustomClient(FlaskClient):
def open(self, *args, **kwargs):
headers = kwargs.setdefault("headers", {})
headers.setdefault("User-Agent", "Firefox/71.0")
return super().open(*args, **kwargs)
app.test_client_class = CustomClient
c = app.test_client()
assert c.get("/browser") == "firefox"
Flask
可以被子类化以覆盖
test_request_context
:
class CustomFlask(Flask):
def test_request_context(self, *args, **kwargs):
headers = kwargs.setdefault("headers", {})
headers.setdefault("User-Agent", "Firefox/71.0")
return super().test_request_context(*args, **kwargs)
app = CustomFlask()
with app.test_request_client():
assert browser() == "firefox"
client
发出测试请求时自动处理。 .在 session 装置中推送一个不会产生您想要的效果。在大多数情况下,您应该使用
test_client
在
test_request_context
.
关于python - 如何将标题添加到flask test_request_context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59396114/
我是一名优秀的程序员,十分优秀!