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

Python 测试Django应用程序cookie、会话和状态,python,django,session,testing,cookies,Python,Django,Session,Testing,Cookies,在阅读文档时,我遇到了两个我无法真正理解的矛盾段落 第一条说: 测试客户端是有状态的。如果响应返回一个cookie,那么该cookie将被存储>在测试客户机中,并与所有后续get()和post()请求一起发送 未遵循这些cookie的过期策略。如果希望cookie过期,>手动删除它或创建新的客户端实例(这将有效地删除所有>cookie) 另一方面: django.test.TestCase实例中的每个测试用例都可以访问django>测试客户端的一个实例。此客户端可以作为self.client访问

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

第一条说:

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

未遵循这些cookie的过期策略。如果希望cookie过期,>手动删除它或创建新的客户端实例(这将有效地删除所有>cookie)

另一方面:

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

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

还是每个测试用例登录| post | get都有自己的状态/cookies/会话数据

这对我来说有点困惑。

这两种说法并不矛盾

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

只有当测试完成时,该状态才被清除


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

如果我想在同一测试功能中测试另一个用户,该怎么办?>a=c.login(user1,密码),然后您将注销并使用相同的客户端对象再次登录。让客户端访问注销链接。如何使用相同的客户端对象注销?通过清除客户端的cookies和会话属性?@St0rM:浏览器如何注销?他们会点击“注销”链接;这是
self.client
对象也可以遵循的url。在这里像浏览器一样思考。:-)抱歉,伙计,我是stackoverflow的新手,直到我的一个朋友告诉我:)找到了另一种方法,在Client()内部Client.logout()中