self.client.login在测试期间不会保持登录状态

时间:2013-10-21 17:07:26

标签: python django django-authentication django-testing

我有我想要测试的功能,允许用户在主页和以后的视图中添加记录 保存页面中的记录 - 在运行应用程序时有效。

当最初运行下面的测试时,用户已登录,但是当指向/保存浏览器URL时 用户已变成AnonymousUser。

这有什么理由吗?以下是我的代码。

测试:

def test_viewing_logged_in_users_saved_records(self):

    # A user logs in
    self.client.login(username = 'testuser1', email='testuser1@test.com', password = 'testuser1password')
    self.browser.get(self.live_server_url)

    # set up our POST data - keys and values are strings
    # and post to home URL
    response = self.client.post('/',
                                {'title': TestCase3.title
                                 })

    # The user is redirected to the new unit test display page
    self.assertRedirects(response, 'unittestcase/hLdQg28/')

    # Proceeds to the page where they can see their saved records
    self.browser.get(self.live_server_url + '/saved')

    # The user can view the tests that they have saved
    body = self.browser.find_element_by_tag_name('body')
    self.assertIn(TestCase3.title, body.text)

查看:

def home_post(request):
    logging.warning('In home_post') 
    logging.warning(request.user) 
    if request.method == 'POST':
        if request.user.is_authenticated():
    ....

def saved(request):
    logging.warning('In saved')
    logging.warning(request.user)
    if request.user.is_authenticated():
    ....

日志记录:

WARNING:root:In home_post
WARNING:root:testuser1

WARNING:root:In saved
WARNING:root:AnonymousUser

1 个答案:

答案 0 :(得分:4)

您对主网址的第一个发布请求使用您已登录的虚拟客户端。

您对/saved网址的请求使用了self.browser,但未登录。

目前尚不清楚为何在同一测试中同时使用self.clientself.browser。如果您不需要在此测试中使用实时服务器,那么我将始终使用self.client。对于您展示的示例,您可以执行以下操作:

response = self.client.get('/saved')
self.assertContains(response, TestCase3.title)

如果确实需要使用实时服务器,请参阅live server test case docs以获取使用selenium客户端登录的示例。