Как настроить интеграцию тестов через GitLab CI/CD?

«Как настроить интеграцию тестов через GitLab CI/CD?» — вопрос из категории CI/CD и DevOps, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Настройка запуска тестов в GitLab CI/CD осуществляется через файл .gitlab-ci.yml в корне репозитория. Вот пример конвейера для проекта на Python с тестами Pytest.

# .gitlab-ci.yml
stages:
  - test

variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

# Кэширование зависимостей для ускорения сборок
cache:
  paths:
    - .cache/pip
    - venv/

# Задание для запуска модульных тестов
unit_tests:
  stage: test
  image: python:3.11-slim
  script:
    - python -m pip install --upgrade pip
    - pip install -r requirements.txt
    - pytest tests/unit/ --junitxml=report-unit.xml
  artifacts:
    when: always
    reports:
      junit: report-unit.xml

# Задание для запуска интеграционных тестов (параллельно с unit)
integration_tests:
  stage: test
  image: python:3.11-slim
  services:
    - postgres:latest
  variables:
    POSTGRES_DB: test_db
  script:
    - pip install -r requirements.txt
    - pytest tests/integration/ --junitxml=report-integration.xml
  artifacts:
    reports:
      junit: report-integration.xml

# Задание для статического анализа кода (линтер)
lint:
  stage: test
  image: python:3.11-slim
  script:
    - pip install flake8 black
    - flake8 .
    - black --check .

Ключевые элементы для QA:

  • artifacts: reports: junit — GitLab автоматически парсит XML-отчеты и отображает результаты в интерфейсе Merge Request.
  • services — позволяет запускать контейнеры-зависимости (БД, брокеры сообщений) для интеграционных тестов.
  • Разделение на unit_tests и integration_tests делает конвейер более наглядным и управляемым.
  • Этап lint помогает поддерживать качество кода тестов.