t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как настроить очередность фикстур в pytest?

Теги: #<Tag:0x00007f9b02622f60> #<Tag:0x00007f9b0261bee0>

Приветствую.
Такая проблема, нужно в начале тестов запускать браузер один раз, в конце всех тестов закрыть.
Но нужна отдельная фикстура, которая будет выполняться после каждой функции - удаление всех cookie.

Сейчас получается так, что в после послежнего теста срабатывает глобальная фикстура с настройкой

Scope ='session'

фикстура со

Scope ='function'

не успевает отработать и валится куча ошибок. В общем то в последнем тесте она вообще не нужна, можно ли как то настроить чтобы фикстура не срабатывала в последнем тесте?

Приведите пример кода, на котором фикстура scope=function будет валиться.
Похоже что проблема где-то в другом месте; фикстура - просто обертка, декоратор, который выполняет действия “до” и действия “после”

import pytest


@pytest.fixture(scope="session", autouse=True)
def sess_fixt(request):
    print("start SESSION")
    def fin():
        print("end SESSION")
    request.addfinalizer(fin)


@pytest.fixture(scope="function")
def func_fixt(request):
    print("start FUNCTION")
    def fin():
        print("end FUNCTION")
    request.addfinalizer(fin)


def test_1st(func_fixt):
    print(1)

def test_2nd(func_fixt):
    print(2)

def test_3rd(func_fixt):
    print(3)

Аутпут:

start SESSION
------------------------------
  start FUNCTION
     1
  end FUNCTION
------------------------------
  start FUNCTION
     2
  end FUNCTION
------------------------------
  start FUNCTION
     3
  end FUNCTION
------------------------------
end SESSION

1 Симпатия

Вместо фикстуры можно воспользоваться хуком pytest_runtest_teardown, который будет выполняться после каждого теста.