Дано:
- веб-приложение, которое допускает только одно нахождение на сайте (т.е. при запуске второго браузера и авторизации в нем, первого выкидывает)
- допустим, 40 автотестов
- фикстура, в которой происходит авторизация пользователя
- несколько тестовых пользователей.
Так вот, тестовый прогон 40 тестов занимает долгое время, решено было запускать через pytest -n4
. Это запускает тесты в 4 потока, но они падают по причине повторной авторизации, соответственно, вопрос - как правильно реализовать параллельный запуск тестов?
Тестовые пользователи хранятся так:
USER_MAIN_L = os.getenv('USER_MAIN')
USER_MAIN_P = os.getenv('USER_MAIN_PASSWORD')
USER_MAIN_E = os.getenv('USER_MAIN_EMAIL')
Фикстура авторизации выглядит так:
@pytest.fixture(scope='function')
@allure.title('Авторизация пользователя')
def authorization(open_env):
driver = open_env
login_obj = LoginForm(driver)
account_obj = Account(driver)
with allure.step('Заполнить поле "Логин или email"'):
login_obj.focus_on_login_and_input(USER_MAIN_L)
with allure.step('Заполнить поле "Введите пароль"'):
login_obj.focus_on_password_and_input(USER_MAIN_P)
with allure.step('Нажать кнопку "Начать работу"'):
auth_button = driver.find_element(*login_obj.id_login_button)
auth_button.click()
time.sleep(5)
with allure.step('Ожидать появления email пользователя при авторизации'):
login_obj.wait_element_present(account_obj.user_email[1])
yield driver
with allure.step('Нажать "Перейти к сметам"'):
main_tab = MainTab(driver)
btn_back_to_est = driver.find_element(*main_tab.back_to_estimates)
main_tab.click(btn_back_to_est)
with allure.step('Вызвать меню, нажав на почту пользователя'):
btn_email = driver.find_element(*account_obj.user_email)
account_obj.click(btn_email)
with allure.step('Нажать "Выйти из аккаунта"'):
btn_logout = driver.find_element(*account_obj.logout)
account_obj.click(btn_logout)