烧瓶单元测试:如何测试来自登录用户的请求

Posted

技术标签:

【中文标题】烧瓶单元测试:如何测试来自登录用户的请求【英文标题】:flask unit test: how to test request from logged in user 【发布时间】:2013-04-20 17:56:04 【问题描述】:

我正在为我的 Flask Web 应用程序编写一些单元测试,并尝试测试匿名用户和登录用户发出的请求之间的响应差异。

我正在使用Flask-Login 扩展来实现用户登录/注销。

显然我可以执行匿名请求,但是如何模拟来自登录用户的请求?

我认为在标头中发送 session cookie 就足够了,但它不起作用。

headers = Headers('Cookie':['WEBSITE_ID=%s; Domain=adsabs.harvard.edu; expires=Thu, 25-Apr-2213 16:53:22 GMT; Path=/' % cookie_value, 
                             'WEBSITE_ID=%s; Domain=.adsabs.harvard.edu; expires=Thu, 25-Apr-2213 16:53:22 GMT; Path=/' % cookie_value,
                             'session="A VERY LONG STRING"; Path=/; HttpOnly',
                 ])
rv = app.test_client().get('/', headers=headers)

会话 cookie 值是我从浏览器中的真实登录中获得的值。

我错过了什么?

【问题讨论】:

【参考方案1】:

Flask-Login 在会话中查找user_id,您可以在测试中使用session_transaction 进行设置:

with app.test_client() as c:
    with c.session_transaction() as sess:
        sess['user_id'] = 'myuserid'
        sess['_fresh'] = True # https://flask-login.readthedocs.org/en/latest/#fresh-logins
    resp = c.get('/someurl')

其中myuserid 是您的user object 的ID。

【讨论】:

你知道为什么如果我在修改会话后在请求中发送一个cookie,应用程序看不到它吗?是因为当我修改会话时,我已经发送了一些标头还是什么?

以上是关于烧瓶单元测试:如何测试来自登录用户的请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS swift 中制作登录屏幕的单元测试用例

如何使用 Symfony 2 在单元测试中获取当前登录的用户?

如何在 Django REST Framework 中的单元测试期间登录用户?

如何对正在进行的 RXJS 请求的取消进行单元测试

使用请求对 NestJS 控制器进行单元测试

如何进行高效的Rails单元测试