Python:pytest 访问 Flask 会话和请求上下文变量
2022/10/28 23:24:58
本文主要是介绍Python:pytest 访问 Flask 会话和请求上下文变量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
上述帖子中的测试客户端夹具:@pytest.fixture(scope='module')
def test_client( app ):
"""
Creates a test client.
app.test_client() is able to submit HTTP requests.
The app argument is the app() fixture above.
"""
with app.test_client() as testing_client:
yield testing_client # Return to caller.
在测试访问Flask 的上下文变量 session的代码时,上述夹具将不起作用。要访问这个变量,官方文档指出:
如果您想在发出请求之前访问或设置会话中的值,请在with语句中使用客户端的session_transaction()方法。它返回一个会话对象,并在块结束后保存会话。
https://flask.palletsprojects.com/en/2.2.x/testing/
我试过了,但它不起作用……这是一个“流行”的问题。它已经存在了几年。上面有一些帖子,但是,大多数建议对我不起作用。
测试 #69引发此问题时,会话为空,用户russmac提出了一个解决方案:
@pytest.fixture(scope='module')
def test_client( app ):
"""
Creates a test client.
app.test_client() is able to submit HTTP requests.
The app argument is the app() fixture above.
"""
with app.test_client() as testing_client:
"""
See: https://github.com/pytest-dev/pytest-flask/issues/69
Sessions are empty when testing #69
"""
with testing_client.session_transaction() as session:
session['Authorization'] = 'redacted'
yield testing_client # Return to caller.
这对我有用。但是,要访问可变会话,我的测试代码必须在:
with app.test_request_context():
否则,它会引发错误RuntimeError: Working outside of request context。此外,如果没有上述调用,正确的代码将无法在测试期间访问请求变量。
以下是我正在处理的项目的正确测试方法:
@pytest.mark.timesheet_bro
def test_close( app ):
bro_obj = TimesheetBRO( 1 )
#
# RuntimeError: Working outside of request context.
#
# session[ 'user_id' ] = 100
#
with app.test_request_context( '?searchType={}'.format(UNRESTRICT_SEARCH_TYPE) ):
assert request.args[ 'searchType' ] == UNRESTRICT_SEARCH_TYPE
assert request.values.get( 'searchType' ) == UNRESTRICT_SEARCH_TYPE
session[ 'user_id' ] = 1
data = bro_obj.close( 326 )
assert bro_obj.last_message == ''
assert data['status']['code'] == HTTPStatus.OK.value
请注意,在正确的代码中,会话['user_id']是在用户成功登录后设置的。在测试代码中设置此值以为正在测试的代码创建正确的先决条件。另请注意,request.values.get('searchType')也用于正在测试的代码中。
这篇关于Python:pytest 访问 Flask 会话和请求上下文变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享