1. Настройка профессионального окружения и архитектура фреймворка Pytest
Настройка профессионального окружения и архитектура фреймворка Pytest
Почему на собеседовании Senior QA может забраковать кандидата, который пишет идеально работающие скрипты? Ответ кроется не в логике if-else, а в том, как организовано рабочее пространство. В промышленной автоматизации тест — это не просто файл .py, а часть сложной экосистемы. Если ваши тесты запускаются только на вашей машине и требуют ручной установки десяти библиотек, они бесполезны для CI/CD.
Изоляция как стандарт: Virtualenv и Pip
Представьте ситуацию: для проекта А вам нужен Requests версии 2.25, а для проекта Б — 2.31. Установка пакетов глобально в систему приведет к конфликту зависимостей. Профессиональная разработка всегда начинается с создания виртуального окружения.
> Виртуальное окружение (Virtual Environment) — это изолированный каталог, содержащий интерпретатор Python и копии всех необходимых библиотек, которые не влияют на системный Python и другие проекты.
Для управления зависимостями в Python используется файл requirements.txt. Это "паспорт" вашего проекта, который позволяет любому члену команды или серверу в облаке развернуть идентичную среду одной командой.
| Инструмент | Команда (Terminal) | Назначение |
| :--- | :--- | :--- |
| venv | python -m venv venv | Создание папки с изолированным окружением |
| pip freeze | pip freeze > requirements.txt | Фиксация текущих версий библиотек в файл |
| pip install | pip install -r requirements.txt | Установка всех зависимостей проекта из списка |
Почему Pytest, а не Unittest?
Хотя в стандартную библиотеку Python входит модуль unittest, в 90% современных вакансий QA Automation требуется именно pytest.
unittest вам нужно создавать классы, наследуясь от TestCase, и использовать специальные методы self.assertEqual(). В pytest вы пишете обычные функции и используете стандартный Python-оператор assert.pytest гораздо мощнее классических методов setUp/tearDown.Сравните два подхода к проверке статуса ответа:
Анатомия и правила именования Pytest
Чтобы pytest автоматически нашел ваши тесты в проекте, необходимо соблюдать строгие правила именования. Это называется Test Discovery. Если вы назовете файл my_checks.py, фреймворк его проигнорирует.
Файлы: Должны начинаться с test_.py или заканчиваться на *_test.py.
* Функции: Должны начинаться с префикса test_.
* Классы: Должны начинаться с Test (и не иметь метода __init__).
Структура профессионального проекта
Типичная архитектура фреймворка автоматизации выглядит так:
Конфигурация через pytest.ini
Файл pytest.ini — это пульт управления вашими тестами. Здесь задаются параметры, которые будут применяться при каждом запуске. Например, вы можете указать папку для поиска тестов или добавить маркеры для фильтрации (например, разделение на smoke и regression тесты).
Пример базового pytest.ini:
Разберем аргументы в addopts:
-v (verbose): подробный вывод названий тестов.--tb=short: сокращенный формат вывода ошибок (traceback), чтобы не тонуть в логах.Запуск и интерпретация результатов
Запуск тестов осуществляется командой pytest в корне проекта. Фреймворк сканирует директории, собирает (collect) все функции с префиксом test_ и выполняет их.
В консоли вы увидите символы:
. (точка) — тест пройден успешно (Passed).F (fail) — тест упал (ошибка в логике или assert вернул False).E (error) — ошибка в коде самого теста или фикстуры (например, NameError).s (skipped) — тест был пропущен.На техническом интервью часто спрашивают: "В чем разница между Failure и Error?". > Failure — это когда ожидаемый результат не совпал с фактическим (баг в продукте). > Error — это когда тест не смог выполниться до конца из-за внутренней ошибки кода (плохой код автотеста).
Понимание этой разницы и умение правильно настроить окружение — это первый шаг от "написания скриптов" к "созданию инженерных решений".