Как определить порядок, в котором будут использоваться фикстуры?

Как управлять порядком выполнения двух почти идентичных фикстур в одном и том же scope: smtp_connection1 и smtp_connection2, чтобы smtp_connection2 запускалась раньше, чем smtp_connection1?
  • 21 марта 2024 г. 5:29
Ответы на вопрос 2
Для определения порядка использования фикстур в Pytest можно воспользоваться параметром autouse=True, который позволяет указать порядок использования фикстур. Например:

```python
import pytest

@pytest.fixture(scope='module', autouse=True)
def smtp_connection1():
    # код для установки smtp соединения 1
    pass

@pytest.fixture(scope='module', autouse=True)
def smtp_connection2():
    # код для установки smtp соединения 2
    pass

def test_example():
    # код теста
    pass
```

В данном случае smtp_connection2 будет запускаться раньше, чем smtp_connection1, так как pytest будет использовать их в порядке объявления.

Если требуется явно указать порядок выполнения фикстур, можно воспользоваться параметром depends=['smtp_connection2'], чтобы указать, что фикстура smtp_connection1 зависит от smtp_connection2. Например:

```python
import pytest

@pytest.fixture(scope='module')
def smtp_connection1():
    # код для установки smtp соединения 1
    pass

@pytest.fixture(scope='module', depends=['smtp_connection2'])
def smtp_connection2():
    # код для установки smtp соединения 2
    pass

def test_example():
    # код теста
    pass
```

Таким образом, smtp_connection2 будет запускаться перед smtp_connection1.
pytest-order: 
@pytest.fixture
@pytest.mark.order(1)
def smtp_connection1():
    print("smtp_connection1")

@pytest.fixture
@pytest.mark.order(2)
def smtp_connection2():
    print("smtp_connection2")

def test_ehlo(smtp_connection, smtp_connection2):
    print("test_ehlo")

Как зависимость:
@pytest.fixture
def smtp_connection2():
    print("smtp_connection2")
    return smtplib.SMTP("smtp.gmail.com", 587, timeout=5)

@pytest.fixture
def smtp_connection1(smtp_connection2):
    print("smtp_connection1")
    return smtplib.SMTP("smtp.gmail.com", 587, timeout=5)

def test_ehlo(smtp_connection1, smtp_connection2):
    print("test_ehlo")
    response, msg = smtp_connection1.ehlo()
    assert response == 250
Похожие вопросы