Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Корректное завершение разных наборов автотестов

pytest
webdriver
selenium
python
Теги: #<Tag:0x00007fedda11e138> #<Tag:0x00007fedda11c7c0> #<Tag:0x00007fedda119890> #<Tag:0x00007fedda117b80>

(Viacheslav) #1

Здравствуйте, существует проблема с завершением различных наборов тестов

Есть несколько наборов тестов. По завершении одних я делаю logout, разрушаю фикстуру
(Не пойму, как отредактировать код, а то он выровнялся)

@pytest.fixture(scope="session", autouse=True)
def stop(request):
    def fin():
        fixture.session.logout()
        fixture.destroy()
    request.addfinalizer(fin)
    return fixture

По завершении другого набора тестов, logout мне недоступен и поэтому в конце каждого прогона появляется один failed, так как кнопка logout отсутствует (NoSuchElementPresent). Я могу убрать строку fixture.session.logout(), но не очень хочется, так как это является и своеобразной проверкой этой кнопки
Пробовал менять scope(-ы), не получилось

Можно ли сделать для разного набора тестов, различные def stop(). Если да, то подскажите пожалуйста, как?


(Maxim Andryushchenkov) #2

Не совсем понимаю зачем это вам нужно. И какое то у вас странное обращение с фикстурами. Но если вопрос заключается в том как использовать разные финализаторы к одной фикстуре, то вот вам решение: промаркируйте тесты в соответствии с тем какой финализатор хотите использовать, например:

@pytest.mark.fin('stop_1')
и
@pytest.mark.fin('stop_2')

В самой фикстуре через объект request можно получить эти маркеры:

fin_name = request.node.get_marker('fin').args[0]

А дальше уже в фикстуре лепите финализаторы как вам вздумается на основании полученного значения маркера


(Viacheslav) #3

Спасибо большое за подсказку. А можно еще пару вопросиков.
“Не совсем понимаю зачем это вам нужно” Вы имеете ввиду, что можно убрать вообще logout и разрушать фикстуру без выхода?
“И какое то у вас странное обращение с фикстурами”. Что именно Вам кажется странным? Поделитесь пожалуйста своим видением, может я действительно, что-то неправильно делаю и есть более оптимальный вариант?


(Maxim Andryushchenkov) #4

Ну вообще, основные задачи фикстуры - готовить и очищать стенд для нескольких тест-кейсов из одного класса эквивалентности. Если следовать этому правилу и не пытаться в фикстуру впихнуть все что можно - у вас получится легкий для понимания код. Если можно обойтись одним финализатором, то он должен быть один. А если требуются разные тирдауны для нескольних тестов - лучше используйте yield_fixture с общим началом для тестов


(Viacheslav) #5

Еще раз спасибо. Попробую поискать инфо, как использовать yield_fixture


(Maxim Andryushchenkov) #6

Я уже делился базовой инфой, посмотрите здесь