# 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` обнаруживает фикстуры автоматически по их именам и подставляет их значения в соответствующие параметры тестовых функций.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://autotests-pytest.gitbook.io/pytest/fixture-fikstury.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
