> For the complete documentation index, see [llms.txt](https://autotests-pytest.gitbook.io/pytest/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://autotests-pytest.gitbook.io/pytest/fixture-fikstury.md).

# fixture (Фикстуры)

**Фикстуры (fixtures):** Фикстуры позволяют предварительно настроить и очистить ресурсы перед и после выполнения тестов. Это улучшает управление состоянием тестового окружения.

```python
import pytest

@pytest.fixture
def setup_data():
    data = {"key": "value"}
    return data

def test_fixture_example(setup_data):
    assert setup_data["key"] == "value"
```

Фикстуры в `pytest` - это механизм, предоставляющий удобный способ предварительной настройки и очистки ресурсов для выполнения тестов. Они позволяют задавать действия, которые нужно выполнить перед и после выполнения теста или группы тестов. Фикстуры в `pytest` обеспечивают легкость и гибкость при организации тестового окружения.

Вот пример использования фикстур в `pytest`:

```python
import pytest

# Простая фикстура без параметров
@pytest.fixture
def setup_data():
    data = {"key": "value"}
    return data

# Фикстура с параметром
@pytest.fixture
def setup_data_with_parameter(request):
    param_value = request.param
    data = {"key": param_value}
    return data

# Фикстура с параметром, но используя маркер
@pytest.fixture(params=[1, 2, 3])
def setup_data_with_marker(request):
    param_value = request.param
    data = {"key": param_value}
    return data

def test_fixture_example(setup_data):
    assert setup_data["key"] == "value"

# Использование фикстуры с параметром
@pytest.mark.parametrize("input, expected", [(1, 2), (2, 4), (3, 6)])
def test_multiply_by_two(input, expected):
    result = input * 2
    assert result == expected

# Использование фикстуры с параметром, заданной маркером
def test_setup_data_with_marker(setup_data_with_marker):
    assert setup_data_with_marker["key"] in [1, 2, 3]
```

В данном примере:

* `setup_data` - это простая фикстура без параметров, которая возвращает словарь данных.
* `setup_data_with_parameter` - это фикстура с параметром, который передается через маркер `parametrize` при определении тестов.
* `setup_data_with_marker` - фикстура с параметром, определенным через маркер. Тест, использующий эту фикстуру, будет выполнен трижды с разными значениями параметра.

Преимущества использования фикстур в `pytest`:

1. **Переиспользование кода:** Фикстуры позволяют избежать дублирования кода для подготовки и очистки данных перед и после тестов.
2. **Параметризация:** Фикстуры могут быть параметризованы, что делает возможным выполнение тестов с разными наборами данных.
3. **Управление состоянием тестового окружения:** Фикстуры предоставляют контроль над состоянием окружения перед и после выполнения тестов, что важно для поддержания стабильности и надежности тестов.
4. **Использование вложенных фикстур:** Вы можете определять фикстуры, зависящие от других фикстур, создавая иерархию настроек.

Для использования фикстур в тестах, вы просто указываете их в качестве параметров функций тестов. `pytest` обнаруживает фикстуры автоматически по их именам и подставляет их значения в соответствующие параметры тестовых функций.
