【问题标题】:Testing Django application cookies , sessions and states测试 Django 应用程序 cookie、会话和状态
【发布时间】:2013-11-06 03:56:15
【问题描述】:

在阅读文档时,我遇到了两个我无法真正理解的矛盾段落

第一个说:

测试客户端是有状态的。如果响应返回一个 cookie,那么该 cookie 将被存储 > 在测试客户端中,并与所有后续的 get() 和 post() 请求一起发送。

不遵守这些 cookie 的过期政策。如果您希望 cookie 过期,>要么手动删除它,要么创建一个新的客户端实例(这将有效地删除所有 >cookie)。

而另一个:

django.test.TestCase 实例中的每个测试用例都可以访问 Django 测试客户端的实例。该客户端可以作为 self.client 访问。 >每个测试都会重新创建此客户端,因此您不必担心状态(例如 cookie)会从 >一个测试转移到另一个测试。

简单地说,如果我要测试登录,我必须使用django.contrib.auth.logout() 在每个login() || 之后post('/login/',data)?

还是每个测试用例 login|post|get 都有自己的 state/cookies/session 数据?

这让我有点困惑。

【问题讨论】:

  • 在 Client() Client.logout() 中找到了另一种方式

标签: python django session testing cookies


【解决方案1】:

这两个陈述并不相互矛盾。

您可以在一次测试中多次使用self.client。您可以登录,测试客户端中的 cookie 处理将“记住”您的会话,以便后续请求。

只有在测试完成后,该状态才会被清除。

您不需要注销,因为这是存储在 cookie 中的客户端状态,并且在测试完成后该状态会被清除。如果您想测试用户登录但他们的会话已过期或类似情况后会发生什么,请仅使用.logout()

【讨论】:

  • 如果我想在同一个测试函数中测试另一个用户怎么办? > a = c.login(user1,password)
  • 然后您将注销并使用相同的客户端对象再次登录。让客户端访问注销链接。
  • 我将如何使用相同的客户端对象注销?通过清除客户端的 cookie 和会话属性?
  • @St0rM:浏览器如何注销?他们会点击“注销”链接;这是self.client 对象也可以遵循的网址。在这里像浏览器一样思考。 :-)
  • 对不起,伙计,我是 stackoverflow 的新手,直到我的一个朋友注意到我才知道这些东西是如何工作的 :)
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多