Как управлять порядком выполнения двух почти идентичных фикстур в одном и том же scope: smtp_connection1 и smtp_connection2, чтобы smtp_connection2 запускалась раньше, чем smtp_connection1?
Для определения порядка использования фикстур в 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.
<a href="https://pytest-dev.github.io/pytest-order/stable/usage.html" rel="nofollow">pytest-order:</a> <br/> <pre><code class="python">@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")</code></pre> <br/> Как зависимость: <br/> <pre><code class="python">@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</code></pre>