Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yandex-cloud-examples/yc-load-testing-gitlab-ci
Настройка запуска нагрузочных тестов из GitLab CI.
https://github.com/yandex-cloud-examples/yc-load-testing-gitlab-ci
cicd gitlab gitlab-runner load-testing yandex-cloud yandexcloud yc-cli
Last synced: 28 days ago
JSON representation
Настройка запуска нагрузочных тестов из GitLab CI.
- Host: GitHub
- URL: https://github.com/yandex-cloud-examples/yc-load-testing-gitlab-ci
- Owner: yandex-cloud-examples
- License: apache-2.0
- Created: 2024-04-03T10:32:43.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-05-30T19:32:25.000Z (8 months ago)
- Last Synced: 2024-11-07T21:37:25.166Z (3 months ago)
- Topics: cicd, gitlab, gitlab-runner, load-testing, yandex-cloud, yandexcloud, yc-cli
- Language: Shell
- Homepage:
- Size: 72.3 KB
- Stars: 0
- Watchers: 7
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README-howto-add-test.md
- License: LICENSE
Awesome Lists containing this project
README
# Как описывать тесты, которые необходимо запускать в CI
Конфигурация каждого теста должна лежать в отдельной папке. Имя конфигурационного файла должно соответствовать маске `test-config*.yaml`.
---
### TL;DR
_**Примеры описанных тестов можно посмотреть [тут](sample-tests/README.md).**_
В папку с файлами конфигурации можно добавить следующие файлы:
- В файле `meta.json` можно описать свойства теста (все поля опциональны):
```yaml
# имя теста
name: str
# описание теста
description: str
# лейблы теста
labels: {"test-label": "value"}
# лейблы агентов, на которых тест нужно запускать
agent_labels: {"agent-label": "value"}
# количество агентов на каждый файл с конфигурацией
multi: 1
# массив с описанием откуда брать внешние файлы (вне репозитория)
external_data: [{"name": "", "s3bucket": "", "s3file": ""}]
```
- В файле `check_summary.sh` можно написать валидацию `yc loadtesting test get $test_id`
- В файле `check_report.sh` можно написать валидацию `yc loadtesting test get-report-tables $test_id`---
### Конфигурация теста через `meta.json`
Некоторые настройки теста можно определить в файле `meta.json`.
- имя теста:
```json
{
"name": "smoke"
}
```
- описание теста:```json
{
"description": "If this test fails... ALARM!!!!!!!!!"
}
```
- метки теста:
```json
{
"labels": {
"k1": "v1",
"k2": "v2"
}
}
```
- требования к агенту, через спецификацию меток, которые должны быть у него проставлены:
```json
{
"agent_labels": {
"net": "1gb",
"disk": "ssd"
}
}
```---
### Передача тестовых данных на агент
#### Из репозитория:
_Так как, в общем случае, скачивание агентом файлов напрямую из репозитория невозможно, необходимо использовать промежуточное хранилище, к которому будет доступ и у агента, и у CI. В качестве такого промежуточного хранилища предлагается использовать Object Storage._
При указании имени бакета через переменную среды `YC_LT_DATA_BUCKET`:
1. все дополнительные файлы в папке с тестом загружаются в бакет `YC_LT_DATA_BUCKET` (т.е. все файлы, кроме служебных `meta.json`, `config*.yaml` и т.д.)
2. для передачи списка необходимых файлов агенту, информация о них добавляется в запрос на создание теста
3. по завершении теста, загруженные на первом шаге файлы удаляются из бакета_**WARNING: У сервисного аккаунта, с которым запускается агент, должны быть права на чтение файлов из этого бакета.**_
_**WARNING2: У сервисного аккаунта, от лица которого создаются тесты, должны быть права на загрузку файлов в этот бакет.**_#### Из бакета Object Storage:
_Данный способ подходит в тех случаях, когда вы планируете использовать тестовые данные, которые изначально хранятся в Object Storage_
В файле `meta.json` можно описать секцию `external_data`, в которой должно быть определен список из структур, определяющих имя бакета, имя файла в бакете, и имя, которое агент даст файлу при скачивании.
_**WARNING: У сервисного аккаунта, с которым запускается агент, должны быть права на чтение файлов из указанных бакетов.**_
Пример:
```json
{
"external_data": [
{
"s3bucket": "loadtesting-data",
"s3file": "folder/user-data.json",
"name": "data.json"
},
{
"s3bucket": "loadtesting-data",
"s3file": "folder/payload.uri",
"name": "payload.uri"
}
]
}
```---
### Запуск теста на нескольких агентах одновременно (мультитест)
В файле `meta.json` можно указать параметр `multi`, присвоив ему значение, равное желаемому количеству агентов, на которых тест будет выполняться одновременно.
```json
{
"multi": 3
}
```_**WARNING: если на момент запуска теста, необходимое количество агентов не будет подключено к сервису, тест не запустится.**_
---
### Валидация результатов проведенного теста в CI
По умолчанию, система запуска уже выполняет некоторые проверки. В каждом тесте эти проверки можно переопределить, добавив в папку с тестом проверочные скрипты `check_summary.sh` и `check_result.sh`.
По завершению выполнения теста, эти скрипты будут вызваны в виде, аналогичном следующему:
```sh
# download resultsyc --format json loadtesting test get "$test_id" > summary.json
yc --format json loadtesting test get-report-table "$test_id" > report.json# check
bash $test_dir/check_summary.sh summary.json
rc1=$?bash $test_dir/check_report.sh report.json
rc2=$?((rc1 == 0 && rc2 == 0))
```Тест считается упавшим, если один из скриптов завершился с ошибкой (`exit_code != 0`).
_**Прим: полностью выключить проверки можно, указав YC_LT_SKIP_TEST_CHECK=1**_