-
Notifications
You must be signed in to change notification settings - Fork 280
Release 1.9.0
В новом танке мы:
- Ввели новый стандарт конфигов - теперь это формат yaml.
- Ввели строгую валидацию конфигов.
- Сделали конвертер из старого формата (ini) в новый.
- Сделали несколько полезных утилит, которые помогут адаптироваться к новому формату.
Танк 1.9.0 валидирует конфиги перед запуском и проставляет дефолтные значения. Это позволит сэкономить время на поисках ошибок в конфигах. Например, в следующем конфиге пропущена опция address в секции phantom:
# load.ini
[tank]
plugin_overload=yandextank.plugins.DataUploader
[phantom]
rps_schedule=const(1,10)
uris=/
ssl=1
[overload]
api_address=https://overload.yandex.net
$ yandex-tank -c load.ini --lock-dir .
13:52:35 [INFO] Converted config:
core: {}
overload: {api_address: 'https://overload.yandex.net', enabled: true, package: yandextank.plugins.DataUploader}
phantom:
load_profile: {load_type: rps, schedule: 'const(1,10)'}
package: yandextank.plugins.Phantom
ssl: true
uris: /
13:52:35 [ERROR] Exception: Validation error:
phantom:
address: [required field]
В примере выше танк сделал следующее:
- сконвертировал переданный ему конфиг в новый формат
- записал в лог получившийся конфиг
- смержил этот конфиг с базовым танковым конфигом (yandextank/core/config/00-base.yaml)
- провалидировал получившийся Полный Конфиг (Полный Конфиг также записывается в директорию теста в файл *_pre-validation-config.yaml)
- распечатал ошибки валидации Таким образом, если ваш исходный ini-конфиг содержал ошибки, вы можете взять получившийся yaml-конфиг, исправить в нем ошибки и дальше пользоваться им. Мы рекомендуем перевести ваши стрельбы на yaml-конфиги в ближайшее время - в последующих релизах танка, при появлении новых опций не будет гарантии их поддержки в ini-конфигах.
Внимание: некоторые старые конфиги, с которыми раньше танк запускался нормально, могут теперь не пройти валидацию, если они содержат устаревшие опции или опечатки.
Пример:
# load.yaml
core:
lock_dir: .
phantom:
enabled: true
package: yandextank.plugins.Phantom
address: 203.0.113.1:80
load_profile:
load_type: rps
schedule: line(1, 10, 10m)
telegraf:
enabled: true
package: yandextank.plugins.Telegraf
telegraf: telegraf_config.xml
uploader:
enabled: true
package: yandextank.plugins.DataUploader
api_address: https://overload.yandex.net
В секции core задаются несколько общих основных параметров, такие как директория для .lock-файлов или привязка процесса танка к конкретному ядру (полный список см. в схеме). Ни один из этих параметров не является обязательным. Кроме core на верхнем уровне располагаются секции плагинов - они могут иметь любые имена, но мы используем традиционные. У любого плагина есть как минимум два обязательных поля: package - python-package с классом Plugin enabled - флаг для включения/отключения плагина Тем не менее, для большинства плагинов эти поля уже заполнены в нашем базовом конфиге, так что вам не обязательно их указывать (если, конечно, вы не хотите отключить плагин, написав enabled: false). Остальные поля определяются схемой конкретного плагина, которая должна быть расположена в директории плагина, в config/schema.yaml.
Вы могли обратить внимание, что в новом конфиге у плагина Phantom нет поля rps_schedule/instances_schedule/stpd_file. Мы заменили его общим полем load_profile, которое содержит информацию о типе нагрузки (rps | instances | stpd_file) и расписании (в случае с stpd-файлом здесь указывается его расположение) То же самое относится к BFG. Также в новом конфиге изменились форматы следующих параметров:
- плагин Autostop, поле autostop: теперь это список критериев: autostop: autostop: - total_time(70ms, 3%, 10s) - http(4xx,25%,10) %%
- плагин JMeter, поле exclude_markers: теперь список
- плагин Pandora, поле config_content: теперь это yaml/json object
Валидатор основан на библиотеке Cerberus Правила валидации включают проверку типов, регулярные выражения, граничные значения, обязательные поля, зависимости полей друг от друга. Для описания правил используются схемы - такая схема обязана быть у каждого плагина. Например, ниже схема плагина Автостопа:
# yandextank/plugins/Autostop/config/schema.yaml
autostop:
type: list
schema:
type: string
default: []
report_file:
type: string
default: autostop_report.txt