测试Django应用程序cookie,会话和状态

时间:2013-10-27 10:02:17

标签: python django session testing cookies

在阅读文档时,我遇到了两个与我无法理解的矛盾相矛盾的

第一个说:

  

测试客户端是有状态的。如果响应返回一个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是否拥有自己的状态/ cookie /会话数据?

对我来说有点混乱。

1 个答案:

答案 0 :(得分:2)

这两个陈述相互矛盾。

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

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

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