Автоматизированный скрипт для проведения нагрузочного тестирования S3-совместимых хранилищ с использованием MinIO Warp.
Скрипт автоматически прогоняет набор YAML-конфигов через заданный список бакетов и сохраняет сжатые результаты тестов.
- Установите MinIO WARP
Скачайте и установите warp, обязательно добавьте его в системный
$PATH. - Установите uv Установите менеджер пакетов uv.
- Скачайте репозиторий
git clone <url-репозитория> cd <имя-репозитория>
- Подготовьте переменные окружения
cp .env.template .env
- Заполните
.envУкажите вашиS3_ENDPOINT,S3_ACCESS_KEYиS3_SECRET_KEY.
Примечание: Блок с переменными сделан "на коленке", чтобы быстро работало. Предельное время эксперимента и целевые бакеты задаются напрямую в коде.
Откройте main.py (или соответствующий файл конфигурации) и отредактируйте следующие параметры:
variables = {
"S3_ENDPOINT" : os.environ.get("S3_ENDPOINT"),
"S3_ACCESS_KEY": os.environ.get("S3_ACCESS_KEY"),
"S3_SECRET_KEY": os.environ.get("S3_SECRET_KEY"),
# ⚠️ Укажите максимальную длительность. Рекомендуется от 20m
"DURATION" : "10s",
"BUCKET" : "",
"BENCH_DATA": results_folder,
"TLS": "true",
"INSECURE": "false",
}
# ⚠️ Укажите список тестируемых бакетов
bucket_list = ["warm-warp-test", "cold-warp-test"] Запуск всех тестов осуществляется одной командой:
uv run --env-file .env main.pyСервис запускает main.py, дожидается завершения, ждёт 30 секунд
и запускает снова — бесконечно. Автоматически стартует при загрузке ОС.
Скопируйте шаблон и откройте его на редактирование:
cp warp-tests.service.template warp-tests.service
nano warp-tests.serviceОбязательно проверьте в файле:
User=— под каким пользователем запускать (не root);Group=— соответствующая группа;WorkingDirectory=— абсолютный путь до проекта;ExecStart=— путь доuv(узнать:which uv) и доmain.py.
sudo cp warp-tests.service /etc/systemd/system/
sudo systemctl daemon-reloadsudo systemctl enable --now warp-tests.service# Логи в реальном времени (аналог консоли)
journalctl -u warp-tests.service -f
# Последние 200 строк
journalctl -u warp-tests.service -n 200
# Текущий статус: активна ли, сколько раз перезапускалась, PID
systemctl status warp-tests.service# Остановить (текущий цикл прервётся, следующий не запустится)
sudo systemctl stop warp-tests.service
# Запустить снова
sudo systemctl start warp-tests.service
# Перезапустить (например, после правки unit-файла;
# перед этим не забудьте `sudo systemctl daemon-reload`)
sudo systemctl restart warp-tests.service
# Убрать из автозапуска
sudo systemctl disable warp-tests.serviceПосле любого изменения /etc/systemd/system/warp-tests.service:
sudo systemctl daemon-reload
sudo systemctl restart warp-tests.service- Скрипт сканирует папку
benchmarks/и забирает оттуда все.ymlконфиги экспериментов. - Запускается вложенный цикл прогона тестов:
- Внешний цикл: по каждому YAML-конфигу.
- Внутренний цикл: по каждому бакету из
bucket_list.
- Текущее количество прогонов: 66.
По итогу выполнения в директории results/ создается папка с именем, соответствующим времени запуска (datetime.now().strftime("%Y-%m-%d_%H-%M-%S")).
Внутри неё в формате {config_name}_{bucket_name}.json.zst записываются результаты всех прогонов warp.
Структура вывода:
results/
└── 2026-09-09_14-30-00/
├── get_config_warm-warp-test.json.zst
├── get_config_cold-warp-test.json.zst
├── put_config_warm-warp-test.json.zst
└── ...