【问题标题】:How to write test cases for Simple Users and Super Users in Django如何在 Django 中为简单用户和超级用户编写测试用例
【发布时间】:2015-10-17 20:57:59
【问题描述】:

我想在 Django 中编写测试用例来检查哪个用户是simple user,哪个是SuperUser,并遇到了这段代码:

    def test_login_user(self):
        self.selenium.get('%s%s' % (self.live_server_url, '/login/'))
        username_input = self.selenium.find_element_by_name("username")
        username_input.send_keys('testuser')
        password_input = self.selenium.find_element_by_name("password")
        password_input.send_keys('testpass')
        self.selenium.find_element_by_xpath('//button[@type="submit"]').click()
        #password_input.send_keys(Keys.RETURN)

    def test_login_staff(self):
        self.selenium.get('%s%s' % (self.live_server_url, '/login/'))
        username_input = self.selenium.find_element_by_name("username")
        username_input.send_keys('testadmin')
        password_input = self.selenium.find_element_by_name("password")
        password_input.send_keys('testpass')

我的代码在我的项目中运行良好,但我的问题是,当我们输入一些无效的登录凭据时,您如何在此处返回 False。目前,即使我传递了一些无效的用户名和密码,它也没有显示任何内容。

My fixture : fixtures = [{"fields": {"username": "rakesh", "first_name": "", "last_name": "", "is_active": True, "is_superuser": True, "is_staff": True, "last_login": "2015-10-17T20:20:37.455Z", "groups": [], "user_permissions": [], "password": "pbkdf2_sha256$20000$1tGw8u4pGPxD$WmJVx9QDjFx0xZHq5vt/XgPXjYYvRn2tARyTzQ6RRYg=", "email": "rakesh.sukla53@gmail.com", "date_joined": "2015-10-06T19:02:04.044Z"}, "model": "auth.user", "pk": 1}]

【问题讨论】:

    标签: python django selenium django-testing


    【解决方案1】:

    进行硒测试时,标准做法是检查某些元素是否存在。但是,您无法通过访问登录 URL 来测试用户是否是员工,您必须访问“/admin/login/” URL,这是超级用户或员工用户登录管理控制台的地方。因此你的测试可能变成:

    from selenium.common.exceptions import NoSuchElementException
    
    def test_login_staff(self):
        self.selenium.get('%s%s' % (self.live_server_url, '/admin/login/'))
        username_input = self.selenium.find_element_by_name("username")
        username_input.send_keys('testadmin')
        password_input = self.selenium.find_element_by_name("password")
        password_input.send_keys('testpass')
        time.sleep(3)
        self.assertRaises(NoSuchElementException,  self.driver.find_element_by_name,"username") 
    

    以上代码断言员工登录成功。另一方面,如果您想检查员工登录是否失败,代码应该是

    self.assertTrue(self.driver.find_element_by_name,"username") 
    

    在旁注中,我建议再次使用 self.selenium 作为变量名,因为该库也称为 selenium,因此可能会造成混淆。我可以建议你改用self.driver 吗?

    更新: 如果您正在测试用户是超级用户还是员工,您可能希望在启动 selenium 之前断言该条件

    u = User.objects.get(username = 'testadmin')
    self.assertTrue(u.is_staff)
    self.assertTrue(u.is_superuser)
    

    【讨论】:

    • 非常感谢。这个内容很有帮助:)
    • 我在 test_login_staff 中传递了正确的 usernamepassword,但它显示的是 Django administration Please enter the correct username and password for a staff account. Note that both fields may be case-sensitive. Username: Password:
    • 是的,正如我提到的测试超级用户和管理员的正确链接。仅仅通过普通页面登录并不能区分超级用户和普通用户。您需要转到管理员登录页面。
    • 我在管理页面上测试了usernamepassword,但仍然显示无效
    • 这是一个有效的员工和超级用户帐户吗?您可能想在开始之前断言这一点。更新我的答案。
    猜你喜欢
    • 2021-04-21
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多