Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Организация сине-зеленого и канареечного развертывания версий веб-сервиса
    • Автоматизация сборки образов с помощью Jenkins и Packer
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Тестирование приложений с помощью GitLab
    • Создание тестовых ВМ через GitLab CI
    • Интеграция GitLab с Tracker
    • Высокопроизводительные вычисления (HPC) на прерываемых ВМ
    • Нагрузочное тестирование gRPC-сервиса
    • HTTPS-тест с постоянной нагрузкой с помощью Phantom
    • HTTPS-тест со ступенчатой нагрузкой с помощью Pandora
    • HTTP-тест с нагрузкой по сценарию с помощью Pandora
    • Нагрузочное тестирование с нескольких агентов
    • Миграция результатов нагрузочного тестирования из OverLoad
    • Запуск внешних агентов для нагрузочного тестирования
    • Нагрузочный тест с помощью JMeter
    • Получение статистики запросов к объектам Object Storage с использованием Query
    • Получение количества запросов к объектам Object Storage
    • Вызов нагрузочного тестирования из GitLab CI
    • Развертывание GitLab Runner на виртуальной машине Compute Cloud
    • Сравнение результатов нагрузочных тестов

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Создайте сервисный аккаунт
  • Настройте сеть
  • Настройте группу безопасности
  • Подготовьте пайплайн CI/CD в GitLab для развертывания цели тестирования
  • Подготовьте файл с тестовыми данными
  • Создайте переменные окружения GitLab
  • Добавьте этап нагрузочного тестирования в файл конфигурации сценария CI
  • Удалите созданные ресурсы
  1. Разработка и тестирование
  2. Вызов нагрузочного тестирования из GitLab CI

Вызов нагрузочного тестирования из GitLab CI

Статья создана
Yandex Cloud
Обновлена 17 марта 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
    • Создайте сервисный аккаунт
    • Настройте сеть
    • Настройте группу безопасности
    • Подготовьте пайплайн CI/CD в GitLab для развертывания цели тестирования
  • Подготовьте файл с тестовыми данными
  • Создайте переменные окружения GitLab
  • Добавьте этап нагрузочного тестирования в файл конфигурации сценария CI
  • Удалите созданные ресурсы

GitLab — это сайт и система управления репозиториями кода для Git. Также GitLab позволяет разработчикам вести непрерывный процесс для создания, тестирования и развертывания кода.

В этом сценарии вы добавите в пайплайн непрерывной интеграции и непрерывной поставки (CI/CD) этап вызова нагрузочного тестирования развертываемого приложения с помощью сервиса Yandex Load Testing. На этом этапе скрипт создаст агент тестирования, запустит тест и проверит результат тестирования.

Чтобы добавить вызов нагрузочного тестирования из GitLab CI:

  1. Подготовьте облако к работе.
  2. Подготовьте инфраструктуру.
  3. Подготовьте файл с тестовыми данными.
  4. Создайте переменные окружения GitLab.
  5. Добавьте этап нагрузочного тестирования в файл конфигурации сценария CI.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

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

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

  1. Если агент размещается на платформе Yandex Cloud, взимается плата за вычислительные ресурсы (см. тарифы Yandex Compute Cloud).

  2. Плата за хранение данных в бакете и операции с ними (см. тарифы Object Storage).

Подготовьте инфраструктуруПодготовьте инфраструктуру

Создайте сервисный аккаунтСоздайте сервисный аккаунт

  1. Создайте сервисный аккаунт sa-loadtest в каталоге, где будет размещаться агент, с которого будет подаваться нагрузка.

  2. Назначьте сервисному аккаунту роли:

    • loadtesting.generatorClient;
    • loadtesting.loadTester;
    • iam.serviceAccounts.user;
    • compute.editor;
    • vpc.user;
    • vpc.publicAdmin (опционально, если агент будет разворачиваться в публичной сети).
  3. Создайте авторизованный ключ для этого сервисного аккаунта и сохраните ключ в файл key.json.

Настройте сетьНастройте сеть

Создайте и настройте NAT-шлюз в подсети, где размещается цель тестирования и будет размещен агент. Это обеспечит доступ агента к сервису Load Testing.

Настройте группу безопасностиНастройте группу безопасности

Настройте группу безопасности агента тестирования:

  1. Создайте группу безопасности агента agent-sg.
  2. Добавьте правила:
    1. Правило для исходящего HTTPS-трафика к публичному API Load Testing:

      • Диапазон портов: 443.
      • Протокол: TCP.
      • Назначение: CIDR.
      • CIDR блоки: 0.0.0.0/0.

      Это позволит подключить агент к сервису Load Testing, чтобы управлять тестами из интерфейса и получать результаты тестирования.

    2. Правило для входящего SSH-трафика:

      • Диапазон портов: 22.
      • Протокол: TCP.
      • Назначение: CIDR.
      • CIDR блоки: 0.0.0.0/0.

      Это позволит подключаться к агенту по протоколу SSH и управлять тестами из консоли или собирать отладочную информацию.

    3. Правило для исходящего трафика при подаче нагрузки к цели тестирования:

      • Диапазон портов: 0-65535.
      • Протокол: Любой.
      • Назначение: Группа безопасности.
        Выберите Из списка. Укажите группу безопасности, в которой находится нужная цель тестирования.

      Создайте такое правило для каждой цели тестирования с уникальной группой безопасности.

Подготовьте пайплайн CI/CD в GitLab для развертывания цели тестированияПодготовьте пайплайн CI/CD в GitLab для развертывания цели тестирования

В данном сценарии, в качестве примера цели тестирования, будем использовать приложение с публичным IP-адресом 51.250.103.44. С примером построения пайплайна CI/CD в GitLab вы можете ознакомиться в статье.

Подготовьте файл с тестовыми даннымиПодготовьте файл с тестовыми данными

  1. Сформируйте тестовые данные в формате HTTP_JSON:

    {"host": "51.250.103.44", "method": "GET", "uri": "/", "tag": "url1", "headers": {"User-agent": "Tank", "Connection": "Close"}}
    

    Где:

    • host — значение заголовка Host;
    • method — метод HTTP-запроса;
    • uri — URI запроса;
    • tag — тег запроса для отображения в отчетах;
    • headers — заголовки запроса.

Для подготовки тестовых данных вы также можете воспользоваться инструментом Dispatcher.

  1. Сохраните тестовые данные в файл httpjson.payload.

  2. Создайте бакет и загрузите в него файл с тестовыми данными.

  3. Выдайте сервисному аккаунту права на чтение в бакете. Для этого отредактируйте ACL бакета:

    1. В консоли управления выберите каталог, в котором находится бакет.
    2. В списке сервисов выберите Object Storage.
    3. Напротив нужного бакета нажмите и выберите Настроить ACL.
    4. В открывшемся окне введите имя сервисного аккаунта, выберите права на чтение в бакете — READ и нажмите кнопку Добавить.
    5. Нажмите кнопку Сохранить.

    Сервисному аккаунту будут предоставлены права на чтение данных только из этого бакета.

Создайте переменные окружения GitLabСоздайте переменные окружения GitLab

  1. На панели слева в GitLab перейдите в раздел Settings и во всплывающем списке выберите пункт CI/CD.

  2. Нажмите кнопку Expand напротив пункта Variables.

  3. Добавьте переменные окружения с выключенной опцией защиты:

    • SERVICE_ACCOUNT_ID — идентификатор сервисного аккаунта sa-loadtest;
    • SA_AUTHORIZED_KEY — содержимое авторизованного ключа для сервисного аккаунта sa-loadtest;
    • SECURITY_GROUP_ID — идентификатор группы безопасности agent-sg агента тестирования;
    • SUBNET_ID — идентификатор подсети, в которой будет размещен агент тестирования;
    • ZONE — зона доступности, в которой будет размещен агент тестирования, например, ru-central1-a;
    • YC_FOLDER_ID — идентификатор каталога, в котором будут размещены ресурсы.

    Для добавления переменной:

    1. Нажмите кнопку Add variable.
    2. В появившемся окне в поле Key укажите имя переменной, в поле Value — значение переменной.
    3. Выключите опцию Protect variable.
    4. Нажмите кнопку Add variable.

Добавьте этап нагрузочного тестирования в файл конфигурации сценария CIДобавьте этап нагрузочного тестирования в файл конфигурации сценария CI

  1. Добавьте в репозиторий вашего проекта на GitLab файл конфигурации нагрузочного теста test-config.yaml:

    pandora:
       enabled: true
       package: yandextank.plugins.Pandora
       config_content:
          pools:
             - id: HTTP
             gun:
                type: http
                target: 51.250.103.44
                ssl: false
             ammo:
                type: http/json
                file: httpjson.payload
             result:
                type: phout
                destination: ./phout.log
             startup:
                type: once
                times: 1000
             rps:
                - type: line
                   from: 0
                   to: 500
                   duration: 60s
             discard_overflow: true
          log:
             level: error
          monitoring:
             expvar:
                enabled: true
                port: 1234
    autostop:
       enabled: true
       package: yandextank.plugins.Autostop
       autostop:
          - limit(5m) # Обязательный параметр
          - quantile(50,100,5,)
    core: {}
    

    В поле target укажите адрес вашего приложения. Тест по этой конфигурации будет генерировать линейную нагрузку от 0 до 500 запросов в секунду в течение 60 секунд. Также настроен критерий автостопа. Этот критерий остановит тест, если в течение 5 секунд 50 процентиль превысит 100 миллисекунд.

  2. Добавьте в файл .gitlab-ci.yml этап нагрузочного тестирования после развёртывания приложения:

    stages:
       ...
       - loadtesting
       ...
    
    loadtesting-job:
       stage: loadtesting
       allow_failure: true
       artifacts: 
          when: always
          name: "tests_output"
          paths:
             - agent_id.txt
       before_script:
          # Установка инструментов.
          - sudo apt-get install -y jq
          - curl --fail --silent --location --remote-name https://storage.yandexcloud.net/yandexcloud-yc/install.sh
          - sudo bash install.sh -i /usr/local/yandex-cloud -n
          - sudo ln -f -s /usr/local/yandex-cloud/bin/yc /usr/local/bin/yc
          # Аутентификация с помощью ключа сервисного аккаунта
          - echo "$SA_AUTHORIZED_KEY" > key.json
          - yc config profile create sa-profile || echo "Profile already exists"
          - yc config set service-account-key key.json
          - yc config set folder-id ${YC_FOLDER_ID}
       script:
          # Создание агента тестирования
          - agent_id=$(yc loadtesting agent create --name agent${CI_JOB_ID} --zone ${ZONE} --service-account-id ${SERVICE_ACCOUNT_ID} --network-interface security-group-ids=${SECURITY_GROUP_ID},subnet-id=${SUBNET_ID} --format json | jq -r .id)
          - echo $agent_id > agent_id.txt
          # Ожидание готовности агента
          - |
            while true; do
               if ! _status=$(yc loadtesting agent get "$agent_id" --format json | jq -r '.status'); then
                  sleep 10
                  continue
               fi
               if [[ "$_status" == "READY_FOR_TEST" ]]; then
                  echo "Agent is ready"
                  break
               fi
               echo "Waiting for agent..."
               sleep 10
            done
          # Создание конфигурации
          - config_id=$(yc loadtesting test-config create --from-yaml-file test-config.yaml --format json | jq -r .id)
          # Запуск теста
          - test_id=$(yc loadtesting test create --name "test_${CI_COMMIT_SHORT_SHA}" --description "${CI_COMMIT_MESSAGE}" --labels auto=true --configuration agent-id=$agent_id,id=$config_id,test-data=httpjson.payload --test-data name=httpjson.payload,s3bucket=payload-bucket,s3file=httpjson.payload --wait --format json | jq -r .id)
          - yc loadtesting test wait --idle-timeout 120s $test_id
          # Оценка результатов теста
          - q50=$(yc loadtesting test get-report-table $test_id --format json | jq -r .overall.quantiles.q50)
          - |
            if [[ $q50 -gt 100 ]]; then
               echo "Q50 больше 100 мс, тест не пройден"
               exit 1
            fi
       after_script:
          # Удаление агента тестирования
          - agent_id=$(cat agent_id.txt)
          - yc loadtesting agent delete $agent_id
          - rm agent_id.txt
    

    На описанном этапе скрипт создаст агент тестирования, запустит тест и проверит результат тестирования. В качестве оценки результата используется 50 процентиль. Если его значение будет больше 100 миллисекунд, этап завершится с ошибкой.

    После сохранения файла конфигурации .gitlab-ci.yml запустится сценарий сборки.

    Подробнее результаты теста вы можете посмотреть в консоли управления:

    1. В консоли управления выберите сервис Load Testing.
    2. На панели слева выберите Тесты.
    3. Выберите созданный тест и перейдите на вкладку Результаты теста.

    Логику подключения этого этапа можно сделать произвольной:

    • по коммитам в основную ветку;
    • по обновлению в Pull Request.

    Более сложные сценарии разобраны в видео:

    Смотреть видео на YouTube.

Удалите созданные ресурсыУдалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

  1. Удалите сервисные аккаунты.
  2. Удалите бакет Object Storage.
  3. Убедитесь, что удален агент тестирования, созданный скриптом. Вы можете удалить агент вручную.
  4. Удалите таблицу маршрутизации.
  5. Удалите NAT-шлюз.

Была ли статья полезна?

Предыдущая
Получение количества запросов к объектам Object Storage
Следующая
Развертывание GitLab Runner на виртуальной машине Compute Cloud
Проект Яндекса
© 2025 ООО «Яндекс.Облако»