HTTP-тест с нагрузкой по сценарию с помощью Pandora
Load Testing можно использовать для тестирования сервиса с нагрузкой по сценарию по протоколу HTTP с помощью генератора нагрузки Pandora.
Чтобы провести нагрузочное тестирование:
- Подготовьте облако к работе.
- Подготовьте цель тестирования.
- Подготовьте инфраструктуру.
- Создайте агент.
- Подготовьте файл с тестовыми данными.
- Подготовьте файл сценария.
- Запустите тест.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
Если агент размещается на платформе Yandex Cloud, взимается плата за вычислительные ресурсы (см. тарифы Yandex Compute Cloud).
На стадии Preview использование сервиса Load Testing не тарифицируется.
Подготовьте цель тестирования
В этом примере будет тестироваться сервис с внутренним IP-адресом 172.17.0.10 в той же подсети, где будет размещен агент.
Убедитесь, что для доступа к сервису по протоколу HTTPS используется порт по умолчанию — 443.
Load Testing также можно использовать для нагрузочного тестирования сервиса, доступного публично или находящегося в другой подсети и группе безопасности относительно агента.
Для сервиса, доступного публично, разрешите входящий HTTPS-трафик на порт 443.
Для сервиса, находящегося в другой подсети и группе безопасности относительно агента, создайте правило для входящего HTTPS-трафика на порт 443 в группе безопасности, где размещается цель тестирования.
Подготовьте инфраструктуру
Создайте сервисный аккаунт
- Создайте сервисный аккаунт
sa-loadtestв каталоге, где будет размещаться агент, с которого будет подаваться нагрузка. - Назначьте сервисному аккаунту роль
loadtesting.generatorClient.
Настройте сеть
Создайте и настройте NAT-шлюз в подсети, где размещается цель тестирования и будет размещен агент. Это обеспечит доступ агента к сервису Load Testing.
Настройте группы безопасности
-
Настройте группу безопасности агента тестирования:
- Создайте группу безопасности агента
agent-sg. - Добавьте правила:
-
Правило для исходящего HTTPS-трафика к публичному API Load Testing:
- Диапазон портов:
443. - Протокол:
TCP. - Назначение:
CIDR. - CIDR блоки:
0.0.0.0/0.
Это позволит подключить агент к сервису Load Testing, чтобы управлять тестами из интерфейса и получать результаты тестирования.
- Диапазон портов:
-
Правило для входящего SSH-трафика:
- Диапазон портов:
22. - Протокол:
TCP. - Назначение:
CIDR. - CIDR блоки:
0.0.0.0/0.
Это позволит подключаться к агенту по протоколу SSH и управлять тестами из консоли или собирать отладочную информацию.
- Диапазон портов:
-
Правило для исходящего трафика при подаче нагрузки к цели тестирования:
- Диапазон портов:
0-65535. - Протокол:
Любой. - Назначение:
Группа безопасности.
ВыберитеИз списка. Укажите группу безопасности, в которой находится нужная цель тестирования.
Создайте такое правило для каждой цели тестирования с уникальной группой безопасности.
- Диапазон портов:
-
- Создайте группу безопасности агента
-
Настройте группу безопасности цели тестирования:
-
Создайте группу безопасности цели тестирования
load-target-sg. -
Добавьте правило для входящего трафика при подаче нагрузки к цели тестирования:
- Диапазон портов:
0-65535. - Протокол:
Любой. - Назначение:
Группа безопасности.
ВыберитеИз списка. Укажите группу безопасности, в которой находится нужная цель тестирования.
Это правило позволит агентам подавать нагрузку на эту цель или подключать дополнительные средства мониторинга.
- Диапазон портов:
-
Создайте агент тестирования
Смотреть видео в Yandex Cloud Video
-
Если у вас еще нет пары SSH-ключей, создайте их.
-
Создайте агент:
Консоль управленияCLI-
В консоли управления
выберите каталог, в котором будет создан агент. -
В списке сервисов выберите Load Testing.
-
На вкладке Агенты нажмите кнопку Создать агент.
-
Укажите имя агента, например
agent-008. -
Укажите ту же зону доступности, в которой находится цель тестирования.
-
В блоке Агент:
- Выберите подходящий тип агента. Подробнее см. в разделе Производительность агентов.
- Укажите подсеть, в которой находится цель тестирования. В подсети должен быть создан и настроен NAT-шлюз.
- Если вам доступны группы безопасности, выберите заранее настроенную группу безопасности агента.
-
В блоке Доступ укажите данные для доступа к агенту:
-
Выберите сервисный аккаунт
sa-loadtest. -
В поле Логин введите имя пользователя.
Внимание
Не используйте логин
rootили другие имена, зарезервированные операционной системой. Для выполнения операций, требующих прав суперпользователя, используйте командуsudo. -
В поле SSH-ключ вставьте содержимое файла открытого ключа.
-
-
Нажмите Создать.
-
Дождитесь завершения процесса создания виртуальной машины. Статус агента должен смениться на
Ready for test.Примечание
Если процесс создания агента остановился на статусе
Initializing connection, проверьте выполнение условий:- У агента есть доступ к
loadtesting.api.cloud.yandex.net:443и публичный IP-адрес. - В целевой подсети настроен NAT-шлюз.
- У сервисного аккаунта, который назначен агенту, есть необходимые роли.
- У агента есть доступ к
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.-
Посмотрите описание команды CLI для создания агента:
yc loadtesting agent create --help -
Выберите ту же зону доступности, в которой находится цель тестирования.
-
Выберите подсеть, в которой находится цель тестирования. В подсети должен быть создан и настроен NAT-шлюз.
Чтобы получить список доступных подсетей с помощью CLI, выполните следующую команду:
yc vpc subnet listРезультат:
+----------------------+---------------------------+----------------------+----------------+-------------------+-----------------+ | ID | NAME | NETWORK ID | ROUTE TABLE ID | ZONE | RANGE | +----------------------+---------------------------+----------------------+----------------+-------------------+-----------------+ | e2lfkhps7bol******** | default-kz1-b | enpnf7hajqmd******** | | kz1-b | [10.129.0.0/24] | | e9bgnq1bggfa******** | default-kz1-a | enpnf7hajqmd******** | | kz1-a | [10.128.0.0/24] | | fl841n5ilklr******** | default-kz1-d | enpnf7hajqmd******** | | kz1-d | [10.130.0.0/24] | +----------------------+---------------------------+----------------------+----------------+-------------------+-----------------+ -
Выберите группу безопасности. Группа безопасности должна быть заранее настроена.
Чтобы получить список доступных групп безопасности с помощью CLI, выполните следующую команду:
yc vpc security-group listРезультат:
+----------------------+---------------------------------+--------------------------------+----------------------+ | ID | NAME | DESCRIPTION | NETWORK-ID | +----------------------+---------------------------------+--------------------------------+----------------------+ | enp414a2tnnp******** | default-sg-enpnf7hajqmd******** | Default security group for | enpnf7hajqmd******** | | | | network | | | enpctpve7951******** | sg-load-testing-agents | | enpnf7hajqmd******** | | enpufo9ms0gi******** | sg-load-testing-targets | | enpnf7hajqmd******** | +----------------------+---------------------------------+--------------------------------+----------------------+ -
Узнайте идентификатор сервисного аккаунта
sa-loadtestпо его имени:yc iam service-account get sa-loadtestРезультат:
id: ajespasg04oc******** folder_id: b1g85uk96h3f******** created_at: "2024-12-04T17:38:57Z" name: sa-loadtest last_authenticated_at: "2024-12-12T19:10:00Z" -
Создайте агента в каталоге по умолчанию:
yc loadtesting agent create \ --name agent-008 \ --labels origin=default,label-key=label-value \ --zone default-kz1-a \ --network-interface subnet-id=e9bgnq1bggfa********,security-group-ids=enpctpve7951******** \ --cores 2 \ --memory 2G \ --service-account-id ajespasg04oc******** --metadata-from-file user-data=metadata.yamlГде:
--name— имя агента.--labels— метки агента.--zone— зона доступности, в которой будет размещен агент.--network-interface— настройки сетевого интерфейса агента:subnet-name— идентификатор выбранной подсети.security-group-ids— идентификаторы групп безопасности.
--cores— сколько ядер процессора может задействовать агент.--memory— сколько памяти отведено агенту.--service-account-id— идентификатор сервисного аккаунта.--metadata-from-file— пара<ключ>=<значение>с именем файла, содержащим путь к публичному SSH-ключу. Пример содержимого файла конфигурацииmetadata.yamlможно посмотреть в разделе Метаданные виртуальной машины.
Подробнее о создании агента с помощью CLI см. в репозитории Yandex Cloud Examples
.
-
-
Привяжите публичный IP-адрес к агенту для доступа по протоколу SSH:
Консоль управленияCLI- В консоли управления
выберите каталог, в котором размещен агент. - Выберите сервис Compute Cloud.
- Выберите ВМ с именем
agent-008. - В блоке Сетевой интерфейс в правом верхнем углу нажмите
и выберите Добавить публичный IP-адрес. - В открывшемся окне:
- В поле Публичный адрес выберите получение адреса Автоматически.
- Нажмите Добавить.
Чтобы привязать к агенту публичный IP-адрес выполните команду CLI:
yc compute instance add-one-to-one-nat \ --id=<идентификатор_ВМ> \ --network-interface-index=<номер_сетевого_интерфейса_ВМ> \ --nat-address=<IP-адрес>Где:
-
--id— идентификатор ВМ. Получите список идентификаторов ВМ, доступных в каталоге, с помощью команды CLIyc compute instance list. -
--network-interface-index— номер сетевого интерфейса ВМ. По умолчанию —0. Чтобы получить список сетевых интерфейсов ВМ и их номера, выполните командуyc compute instance get <идентификатор_ВМ>. -
--nat-address— публичный IP-адрес, который нужно присвоить ВМ. Необязательный параметр. Если параметр--nat-addressне задан, публичный IP-адрес будет присвоен ВМ автоматически.Получите список зарезервированных публичных IP-адресов, доступных в каталоге, с помощью команды CLI
yc vpc address list. IP-адрес и ВМ должны находиться в одной зоне доступности.
Пример использования:
yc compute instance add-one-to-one-nat \ --id=fhmsbag62taf******** \ --network-interface-index=0 \ --nat-address=51.250.*.***Результат:
id: fhmsbag62taf******** folder_id: b1gv87ssvu49******** created_at: "2022-05-06T10:41:56Z" ... network_settings: type: STANDARD placement_policy: {}Подробнее о команде
yc compute instance add-one-to-one-natсм. в справочнике CLI. - В консоли управления
Подготовьте файл с тестовыми данными
-
Сформируйте тестовые данные в файле
users.csv:user_id,name,pass 1,John,123 2,Jack,456 3,Jim,789 4,Joe,0asdf 5,Jane,12dasdf 6,Jill,asdf 7,Joy,zxcv 8,Joy,zxcv 9,Joy,zxcv 10,Joy,zxcv
Подготовьте файл сценария
В сценарии необходимо описать последовательность HTTP-запросов, которые будут выполнены в процессе тестирования. Один файл может содержать несколько сценариев. Сценарий может быть представлен в одном из следующих форматов:
- hcl;
- yaml;
- json.
-
Подготовьте сценарий в файле
payload.hcl:variable_source "variables" "variables" { variables = { auth_path = "/auth" order_path = "/order" } } variable_source "users" "file/csv" { file = "users.csv" fields = ["user_id", "name", "pass"] ignore_first_line = true delimiter = "," } request "auth_req" { method = "POST" uri = "{{.source.variables.auth_path}}" headers = { Content-Type = "application/json" Useragent = "Yandex" } body = <<EOF {"user_id": {{.request.auth_req.preprocessor.user_id}}} EOF tag = "auth" preprocessor { mapping = { user_id = "source.users[next].user_id" } } } request "order_req" { method = "POST" uri = "{{.source.variables.order_path}}?sleep=100" headers = { Useragent = "Yandex" } body = <<EOF {"item_id": test_item_id} EOF tag = "order" } scenario "test_scenario" { min_waiting_time = 1000 requests = [ "auth_req", "sleep(100)", "order_req(3, 100)" ] }В данном сценарии
test_scenarioописаны запросыauth_reqиorder_req. Запросу можно передавать аргументы: количество повторений и задержка между ними. В данном примереorder_req(3, 100)означает, что запросorder_reqбудет выполнен трижды с интервалом в 100 миллисекунд между повторениями.Параметр
min_waiting_timeопределяет минимальное время выполнения сценария в миллисекундах. Если сценарий завершится быстрее указанного значения, будет добавлена соответствующая задержка в конце сценария.В сценарии создан источник переменных
variables, содержащий переменныеauth_pathиorder_path. Значения этих переменных используются для указанияuriв запросах.Также в сценарии создан источник переменных
users, использующий данные из внешнего файлаusers.csv. Для работы с массивом пользователей используется препроцессор, в котором доступны следующие модификаторы:nextдля получения следующего элемента массива;lastдля получения последнего элемента массива;randдля получения случайного элемента массива.
Запустите тест
-
В консоли управления
выберите сервис Load Testing. -
На панели слева выберите Тесты. Нажмите Создать тест.
-
В параметре Агенты выберите агент
agent-008. -
В блоке Прикрепленные файлы нажмите Выбрать файлы и выберите сохраненные ранее файлы
users.csvиpayload.hcl. -
В блоке Настройки теста выберите способ настройки: Конфигурационный файл.
-
В поле для ввода конфигурации введите настройки тестирующих потоков в формате
yaml:uploader: enabled: true package: yandextank.plugins.DataUploader api_address: loadtesting.api.cloud.yandex.net:443 pandora: enabled: true package: yandextank.plugins.Pandora config_content: pools: - id: Pool name gun: type: http/scenario target: 172.17.0.10:80 ammo: type: http/scenario file: payload.hcl result: type: phout destination: ./phout.log rps: - duration: 10s type: line from: 1 to: 5 startup: type: once times: 5 log: level: debug autostop: enabled: true package: yandextank.plugins.Autostop autostop: - limit (5m) core: {} -
Нажмите Создать.
После этого конфигурация пройдет проверки, и агент начнет нагружать тестируемый сервис.
Чтобы наблюдать за результатами выполнения тестирования, выберите созданный тест и перейдите на вкладку Результаты теста.
Как удалить созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать: