Эффективный запуск автотестов в GitLab CI/CD с Python
Введение
В этой статье я хочу поделиться современным подходом к запуску автотестов, который значительно ускоряет процесс тестирования за счет параллельного выполнения тестов в изолированных контейнерах.
Подготовка окружения
Установка необходимых компонентов
- Java 8+ - требуется для работы Allure
- Node.js - скачать с официального сайта
- Allure Commandline:
Просмотр отчетов локально
Создание Docker-образа
DockerFile:
requirements.txt (основные зависимости)
Сборка и публикация образа
Настройка GitLab CI/CD
gitlab-ci.yml:
Ключевые преимущества подхода
- Параллельное выполнение - каждый тест запускается в отдельном контейнере
- Масштабируемость - легко увеличить количество параллельных тестов
- Изолированность - проблемы в одном тесте не влияют на другие
- Гибкость - можно запускать как отдельные тесты, так и группы
Советы по оптимизации
- Используйте кеширование зависимостей в CI/CD
- Оптимизируйте Docker-образ (многослойная сборка)
- Настройте разумное количество параллельных задач исходя из ресурсов runner'ов
- Используйте теги для группировки тестов
Перед использованием вам нужно:
1. Указать свой тег раннера который будет исполнять наш сценарий, в нашем случае это gitlab-mini, у вас он будет другим, для этого обратитесь к девопсам
2. Заменить QA-(названия веток для работы сценария, чуть ниже описано что да как) на ваши названия веток которые вы используете
3. Указать свой ник в образе DockerHub
4. Изменить путь до автотестов(если надо)
В нашем случае это: /tests/users_api/create_user/post/positive/create_user.py(пример)
Где:
SECTION - секция API
ENDPOINT - обозначение API метода
METHOD - сам метода | POST/DELETE/GET и т.д
CHECK_TYPE - тип сценария positive/negative
AUTOTEST - сам файл с автотестом
Вы можете изменить уровень директорий на ваше усмотрение
Разберем сценарий gitlab-ci.yml, он не так сложен:
1. У нас есть 3 формата запуска:
1) Запуск pylint(линтер для анализа кода), происходит при каждом мерже изменений
2) Общий запуск всех автотестов(только при запуске через Pipelines -> Schedules)
3) Запуск автотеста который происходит при появлений в Gitlab новой ветки с названием QA-*(не учитывается QA-0, он для общих изменений), в нашем случае QA- это тег в системе Jira, вы можете использовать любой другой тег
2. При общем запуске всех автотестов наш сценарий выше генерирует новый файл для запуска автотестов(generated-config.yml) который и запускает все автотесты каждый в отдельном контейнере
3. В конце у нас имеется шаг allure-report-publisher который сохраняет артефакты с результатами запуска автотестов(allure-results), чтобы узнать результат прогона автотестов скачиваем артефакт, распаковываем, переходим в директорию allure-results, открываем в этой директорий командную строку и вводим команду: allure serve ./
Копируем файл gitlab-ci.yml выше, сохраняем проект, создаем в Pipelines -> Schedules -> новый триггер для запуска автотестов, настраиваем под себя, сохраняем, запускаем, наслаждаемся результатом!
Если у вас возникнут проблемы, пишите мне на почту - egceska@gmail.com
Постараюсь помочь