Skip to content

Release 1.9.0

Timur Torubarov edited this page Aug 31, 2017 · 2 revisions

В новом танке мы:

  • Ввели новый стандарт конфигов - теперь это формат 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