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

# PyTest

Согласно [официальному сайту](https://docs.pytest.org/en/latest/)

> Инфраструктура pytest позволяет легко писать небольшие тесты, но масштабируется для поддержки сложного функционального тестирования приложений и библиотек.

По соглашению *pytest* будет искать все с расширением *test\_* в качестве префикса, включая все подкаталоги.

#### Установка&#x20;

1. Запустите *pip install pytest* на терминале
2. Убедитесь, что вы установили правильную версию ( *pytest –version* ) .

*pytest* позволяет настраивать различные аспекты с помощью *conftest.py* . Обычно функции настройки и демонтажа поддерживаются с помощью *фикстур* .

> фикстуры pytest предлагают значительные улучшения по сравнению с классическим стилем xUnit функций установки/разборки:
>
> > * фикстуры имеют явные имена и активируются путем объявления их использования из тестовых функций, модулей, классов или целых проектов.
> > * фикстуры реализованы модульным образом, так как каждое имя фикстуры запускает функцию фикстуры, которая сама может использовать другие фикстуры.
> > * Управление фикстурами масштабируется от простого модуля до сложного функционального тестирования, что позволяет параметризовать фикстуры и тесты в соответствии с параметрами конфигурации и компонентов или повторно использовать фикстуры для функций, классов, модулей или всего сеанса тестирования.

Ниже приведен пример настройки фикстуры в *conftest.py.*

```
@pytest.fixture(scope='session')
def setup(request):
    chromedriver = "/usr/local/bin/chromedriver"
    print("\Initiating chrome driver")
    driver = webdriver.Chrome(chromedriver, chrome_options=options)
    session = request.node
    for item in session.items:
        cls = item.getparent(pytest.Class)
        setattr(cls.obj, "driver", driver)
    driver.implicitly_wait(30)
    yield driver
    time.sleep(2)
    driver.close()
```

Здесь, как могут видеть пользователи, мы использовали фикстуру *меток* для функции настройки, которая содержит путь к браузеру/драйверу, *chromedriver, chrome\_options=options* — это параметры, которые можно использовать для настройки и настройки сеанса ChromeDriver.
