2015-10-17 1 views
1

Я хочу писать тесты в Django, чтобы проверить, какой пользователь является simple user, и который SuperUser и наткнулся на этот код:Как писать тесты для простых пользователей и супер пользователей в Django

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') 

I код работает отлично в моем проекте, но мой вопрос заключается в том, как вы возвращаете 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": "[email protected]", "date_joined": "2015-10-06T19:02:04.044Z"}, "model": "auth.user", "pk": 1}] 

ответ

1

При проведении селеновых испытаний стандартная практика заключается в проверке наличия или отсутствия определенных элементов. Однако вы не можете проверить, является ли пользователь персоналом, посетив URL-адрес входа в систему, вам нужно будет посетить URL-адрес/admin/login/', который является местом, где пользователь суперпользователя или пользователя входит в консоль администратора. Таким образом, ваш тест может стать следующим:

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") 

На стороне записки, я бы посоветовал Agains используя self.selenium в качестве имени переменной, может ввести в заблуждение, так как библиотека также называемый селен. Могу я предложить вам вместо этого использовать self.driver?

Update: Если вы тестируете ли пользователь является супер пользователь или персонал, вы можете утверждать, что состояние перед начинать селеном

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

Благодарю вас так много. Этот контент очень полезен :) – python

+0

Я передаю правильные 'username' и' password' в моем test_login_staff, но он показывает 'Администрация Django Пожалуйста, введите правильное имя пользователя и пароль для учетной записи персонала. Учтите что оба поля могут быть чувствительны к регистру. Имя пользователя: Пароль: ' – python

+0

да, то есть, как я уже упоминал, правильную ссылку для проверки для суперпользователя и администратора. Простое подключение через обычную страницу не отличает суперпользователей от обычных пользователей. Для этого вам нужно перейти на страницу входа в систему администратора. – e4c5

Смежные вопросы