Добрый день, я в автоматизации новичок и пытаюсь разобраться как быть с авторизацией пользователя в тестах. Насколько я понял лучше запускать браузер для каждого отдельного теста (пните если не так) и поэтому мне приходится писать несколько одинаковых строк в каждом тесте чтобы залогиниться.
def test_user_can_open_page(browser):
page = LoginPage(browser, auth_url) # перехожу по url с логином и паролем, базовая аутентификация
page = LoginPage(browser, login_url) # приходится переходить ещё раз на базовый url иначе потом не принимает логин и пароль
page.do_login() # ввод логина и пароля пользователя
//остальные методы
Как сделать чтобы пользователь логинился автоматом перед каждым тестом? Или чтобы данные авторизации сохранялись для остальных тестов. Направьте хотя бы в правильную сторону.
Так, поехали по частям, начнём с архитектуры. Умные дяди говорят что программист (а автоматизатор тоже отчасти программист) должен быть ленив. Если есть какой-то код который выполняется более одного раза, хорошей практикой будет вынести его в отдельный метод, чтобы два раза написать не три строчки кода (а то это уже 6 строчек), а две (2х1=2).
Поэтому:
вот это вот всё выкидываем в отдельный метод: типа
def login_bitch_do_you_authorize_it(browser):
page = LoginPage(browser, auth_url) # перехожу по url с логином и паролем, базовая аутентификация
page = LoginPage(browser, login_url) # приходится переходить ещё раз на базовый url иначе потом не принимает логин и пароль
page.do_login() # ввод логина и пароля пользователя
После этой несложной махинации наш тест превращается в некое подобие:
def test_user_can_open_page(browser):
login_bitch_do_you_authorize_it(browser)
//остальные методы
Уже лучше, но всё равно каждый раз приходится писать:
спросите у разработчиков, нужно ли логиниться каждый раз, или можно сгенерировать аутентификационный токен и класть его в браузер, чтобы не приходилось вообще выполнять вход, тем более он у вас сломанный какой-то, что нужно несколько раз по одной и той же странице переходить
Привет!А если прописать логин,пароль в переменные, в файл с настройками, который просто потом импортируется.
Данные же из этого файла потом используются в методах.
например:
constants.py
PASSWORD = ‘Testpass1123’
Login_Pages.php
def register_new_user(self, i_password=‘Testpass1123’):
self._browser.find_element(*LoginPageLocators.REGISTRATION_EMAIL_FIELD).send_keys(str(random.getrandbits(25)) +
“@fake-email.org”)
self.write_field(*LoginPageLocators.REGISTRATION_PASSWORD_FIELD, i_password)
self.write_field(*LoginPageLocators.REGISTRATION_CONFIRM_PASSWORD_FIELD, i_password)
self.click(*LoginPageLocators.REGISTRATION_BUTTON)
assert self.is_element_present(*LoginPageLocators.REGISTRATION_COMPLETE_MESSAGE),
“Registration message is not presented”
@allure.step('Register new user with not valid email')
def register_new_user_with_not_valid_email(self, i_email='not-valid-email.org', i_password='Test-pass1123'):
self.write_field(*LoginPageLocators.REGISTRATION_EMAIL_FIELD, i_email)
self.write_field(*LoginPageLocators.REGISTRATION_PASSWORD_FIELD, i_password)
self.write_field(*LoginPageLocators.REGISTRATION_CONFIRM_PASSWORD_FIELD, i_password)
self.click(*LoginPageLocators.REGISTRATION_BUTTON)
assert not self.is_element_present(*LoginPageLocators.REGISTRATION_COMPLETE_MESSAGE), \
"Whoops! Registration message presented"