Показаны настройки теста с помощью Docker.
Содержимое скрипта тестирования ~/prog/yandex-tank/tank-run.sh:
$ cat tank-run.sh docker run --entrypoint yandex-tank \ -v $(pwd):/var/loadtest \ -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent \ --net host \ -it direvius/yandex-tank
Тесты проводятся из контейнера Docker: https://hub.docker.com/r/direvius/yandex-tank#!, https://github.com/direvius/docker-yatank. Можно установить локально yandex-tank, но мне так удобнее.
-v $(pwd):/var/loadtest монтируется текущий каталог (со всем в нем файлами) к docker в каталог /var/loadtest. Содержимое каталога ~/prog/yandex-tank/:
-rw-rw-r-- 1 vasi vasi 238 апр 26 2020 ammo-phantom.txt -rw-rw-r-- 1 vasi vasi 13 дек 22 2023 ammo_uri_shop_kotlin.txt -rw-rw-r-- 1 vasi vasi 61 дек 23 2023 ammo-uri.txt -rw-rw-r-- 1 vasi vasi 311 апр 26 2020 load-ammo-phantom.yaml -rw-rw-r-- 1 vasi vasi 317 дек 22 2023 load-ammo-uri.yaml -rw-rw-r-- 1 vasi vasi 409 апр 27 2020 load-instances.yaml -rw-rw-r-- 1 vasi vasi 317 апр 26 2020 load-uris.yaml -rw-rw-r-- 1 vasi vasi 402 дек 23 2023 load.yaml drwxr-xr-x 41 vasi vasi 4096 дек 23 2023 logs/ drwxrwxrwx 3 vasi vasi 4096 мая 7 2021 lot4/ -rwxr-xr-x 1 vasi vasi 203 апр 29 2021 lot4-run.sh* -rwxrwxr-x 1 vasi vasi 198 апр 29 2021 lot4tank.sh* -rw-rw-r-- 1 vasi vasi 180 апр 26 2020 monitoring.xml drwxrwxrwx 2 vasi vasi 4096 апр 27 2020 ssh/ -rwxrwxrwx 1 root root 902263 дек 23 2023 tank_errors.log* -rwxr-xr-x 1 vasi vasi 177 апр 27 2020 tank-run.sh* -rwxr-xr-x 1 vasi vasi 177 апр 27 2020 tank_run_shop_kotlin.sh* -rwxrwxr-x 1 vasi vasi 171 апр 27 2020 tank.sh* -rw-r--r-- 1 vasi vasi 33 дек 22 2023 token.txt
Необходим токен yandex-tank, полученный после регистрации в сервисе:
$ cat token.txt daXXXXXXXXXXXXXXXXXXXXXXXXXXX650
В каталоге ~/prog/yandex-tank (получение текущего каталога через $(pwd)) должны быть файлы load.yaml,ammo-uri.txt с описанием теста:
$ cat load.yaml overload: enabled: true package: yandextank.plugins.DataUploader token_file: token.txt phantom: address: 192.168.1.57:8980 load_profile: load_type: rps schedule: const(1000, 20s) ammofile: /var/loadtest/ammo-uri.txt ammo_type: uri console: enabled: true telegraf: config: monitoring.xml enabled: true kill_old: false package: yandextank.plugins.Telegraf ssh_timeout: 5s
const(1000, 20s) - Нагрузка постоянная 1000rps в течении 20 сек.
address: 192.168.1.57:8980 - по какому хосту стрелять. Только адрес хоста (url в ammo.txt).
/var/loadtest/ammo-uri.txt - по каким url стрелять. Может быть список url. В ammo.txt url указываются без адреса хоста.
Urls для расстрела (ammo-uri.txt):
~/prog/yandex-tank$ cat ammo-uri.txt [Connection: close] [Cookie: None] /test/echo?name=STATIC /test/dynamic?name=DYNAMIC /test/spring?name=SPRING
Запуск тестов ~/prog/yandex-tank/tank-run.sh:
$ ~/prog/yandex-tank/tank-run.sh ....Тут лог тестов....
Итого. Будет стрельба по http://192.168.1.57:8980/test/echo?name=STATIC, http://192.168.1.57:8980/test/dynamic?name=DYNAMIC, http://192.168.1.57:8980/test/spring?name=SPRING с ПОСТОЯННОЙ (schedule: const) нагрузкой 1000rps в течении 20 сек.
Это только один из вариантов тестирования, остальные детали описаны в документации.
При проведении теста, будет выведена картинка в консоли о ходе теста
Расстреливаемый сервис подключен к Grafana. В Grafana проведение теста выглядит так:
На картинке выбрано только отображение нагрузки на CPU. Метрик и отчетов много всяких (память, сеть и т.п.).
Yandex-tank это не просто инструмент, это сервис. Результаты тестирования отпраляются, хранятся, отображаются в облаке yandex-tank. Не локально на компьютере пользователя.
Облако yandex tank: https://overload.yandex.net/
Результаты тестов в https://overload.yandex.net/:
Ссылки:
https://github.com/yandex/yandex-tank
Мой репозитроий на github для проведения тестов одного из проектов
Учимся анализировать результаты нагрузочного тестирования. Алексей Лавренюк
Docker image Yandex tank
https://github.com/direvius/docker-yatank