{
"$schema" : "http://json-schema.org/draft-04/schema#",
"title" : "Testplan Config Schema 6.8.1",
"type" : "object",
"additionalProperties" : false,
"description" : "Схема конфигурации тестового плана SyTester",
"version" : "6.8.1-260928",
"required" : [ "name", "type" ],
"examples" : [ {
"name" : "nt-http-gen",
"type" : "GENERATOR",
"generator" : {
"tps" : {
"start" : 1,
"max" : 50
},
"testdata" : [ "data" ],
"transportIn" : [ "http" ]
},
"transport" : [ {
"name" : "http",
"protocol" : "HTTP",
"host" : "http://localhost:6100/endpoint"
} ],
"testdata" : [ {
"name" : "data",
"body" : "resp ${rq_uid} "
} ]
}, {
"name" : "nt-http-stub",
"type" : "STUB",
"stub" : {
"type" : "RANDOM",
"transportIn" : [ "http" ]
},
"transport" : [ {
"name" : "http",
"protocol" : "HTTP",
"request" : "/endpoint"
} ]
} ],
"properties" : {
"version" : {
"type" : "string",
"title" : "Версия схемы",
"description" : "Версия схемы конфигурации тестового плана в формате SemVer 2.0.0. Если задана схема меньшая текущей (6.8.1-260928), то происходит автоматическое преобразование в текущую версию. Если версия больше, тестовый план отвергается",
"format" : "semver",
"examples" : [ "1.0.0" ],
"default" : "1.0.0"
},
"name" : {
"type" : "string",
"title" : "Название тестового плана",
"description" : "Произвольное название тестового плана",
"examples" : [ "my-testplan" ]
},
"ownerUser" : {
"type" : "string",
"description" : "Имя пользователя владеющего тестовым планом",
"title" : "Владелец",
"examples" : [ "111" ]
},
"description" : {
"type" : "string",
"title" : "Описание тестового плана",
"maxLength" : 1000,
"examples" : [ "MQ-ШЛЮЗ. Проверка взаимодействия GetPrivateLoanDetailsRq от UFS в UCP" ]
},
"logLevel" : {
"type" : "string",
"enum" : [ "DEBUG", "INFO", "WARN", "ERROR", "NONE" ],
"title" : "Уровень логирования",
"description" : "Уровень логирования при работе тестового плана",
"default" : "ERROR",
"examples" : [ "DEBUG" ]
},
"testDuration" : {
"description" : "Отсутствие значения означает неограниченное время выполнения теста (до выполнения всех шагов в type = STEPS)\nПоддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "1h", "10m", "1d12h", "300" ],
"title" : "Длительность тестирования",
"default" : "10m для type = GENERATOR|STUB"
},
"type" : {
"type" : "string",
"enum" : [ "GENERATOR", "STUB", "STEPS", "AUTO" ],
"examples" : [ "GENERATOR" ],
"title" : "Тип тестирования",
"description" : "Поддерживаемые типы тестирования:\n* GENERATOR - генерация нагрузки (генератор для Нагрузочного Тестирования)\n* STUB - имитация ответов от стороннего сервиса\n* STEPS - выполнение шагов тестирования\n\nВ зависимости от типа тестирования к атрибутам конфигурации назначаются дополнительные правила валидации:\n* при type = GENERATOR обязательным становится блок generator\n* при type = STUB обязательным становится блок stub\n* при type = STEPS обязательным становится блок steps",
"default" : "GENERATOR"
},
"generator" : {
"$ref" : "#/definitions/GeneratorConfig",
"examples" : [ {
"tps" : {
"start" : 10,
"max" : 100,
"stepSize" : 10,
"stepTime" : "1m"
},
"testdata" : [ "my-testdata" ],
"transportIn" : [ "http-transport" ]
} ],
"required" : [ "transportIn", "testdata" ]
},
"stub" : {
"$ref" : "#/definitions/StubConfig",
"title" : "Конфигурация заглушки",
"description" : "Блок специфических настроек тестового плана при type = STUB",
"examples" : [ {
"type" : "RANDOM",
"transportIn" : [ "http" ]
} ],
"required" : [ "transportIn" ]
},
"steps" : {
"$ref" : "#/definitions/StepsConfig",
"title" : "Конфигурация пошагового сценария тестирования",
"description" : "Блок специфических настроек тестового плана при type = STEPS",
"required" : [ "entry", "steps" ]
},
"transports" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/Transport"
},
"title" : "Конфигурации транспортов"
},
"testdatas" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/Testdata"
},
"title" : "Конфигурации тестовых данных"
},
"metrics" : {
"$ref" : "#/definitions/MetricsConfig"
},
"reports" : {
"$ref" : "#/definitions/ReportConfig"
},
"service" : {
"$ref" : "#/definitions/ServiceConfig",
"title" : "Конфигурация тестируемого сервиса"
},
"strategies" : {
"$ref" : "#/definitions/StrategiesConfig",
"title" : "Конфигурация стратегий"
},
"metadata" : {
"type" : "object",
"additionalProperties" : {
"$ref" : "#/definitions/Object"
},
"description" : "Объект для хранения пар ключ-значение клиента.\nСодержимое объекта полностью контролируется пользователем и не влияет на работу тестового плана",
"title" : "Метаданные, пользовательские атрибуты",
"examples" : [ {
"metadata" : {
"firstProperty" : 10,
"secondProperty" : "string"
}
} ]
}
},
"definitions" : {
"GeneratorConfig" : {
"type" : "object",
"additionalProperties" : false,
"description" : "Блок специфических настроек тестового плана при type = GENERATOR",
"title" : "Конфигурация генератора",
"examples" : [ {
"tps" : {
"start" : 10,
"max" : 100,
"stepSize" : 10,
"stepTime" : "1m"
},
"testdata" : [ "my-testdata" ],
"transportIn" : [ "http-transport" ]
} ],
"required" : [ "transportIn", "testdata" ],
"properties" : {
"tps" : {
"$ref" : "#/definitions/Tps",
"title" : "Настройки TPS",
"description" : "Блок конфигурации транзакций, выполняемых для генерации нагрузки",
"default" : {
"start" : 1.0,
"max" : 5.0,
"stepTime" : "1m",
"stepSize" : 1.0
}
},
"transportIn" : {
"type" : "array",
"items" : {
"type" : "string"
},
"description" : "Ссылка на транспорт из блока transport, задается как значение тега transport->name. Задает адрес (endpoint) на который генератор будет отсылать запросы",
"title" : "Входные транспорты",
"default" : "transport_name",
"examples" : [ "transport_name", "[transport_name_1, transport_name_2]" ],
"minItems" : 1
},
"transportOut" : {
"type" : "array",
"items" : {
"type" : "string"
},
"description" : "Ссылка на транспорт из блока transport, задается как значение тега transport->name. Используется для асинхронных протоколов (protocol=MQ|ARTEMIS|ACTIVE_MQ). Задает адрес (endpoint) на котором генератор будет ожидать ответы",
"title" : "Выходные транспорты",
"default" : "transport_name",
"examples" : [ "transport_name", "[transport_name_1, transport_name_2]" ],
"minItems" : 1
},
"testdata" : {
"type" : "array",
"items" : {
"type" : "string"
},
"description" : "Ссылка на тестовые данные из блока testdata, задается как значение тега testdata->name",
"title" : "Тестовые данные",
"default" : "testplan_data",
"examples" : [ "testplan_data" ],
"minItems" : 1
},
"startRequestIndex" : {
"type" : "integer",
"title" : "Начальное значение индекса",
"description" : "Задает значение, которое будет подставлено вместо выражения ${rqIndex()} в тестовых данных, привязанных к тестовому плану. Является автоинкрементным счетчиком. Используется вместе с maxRequestIndex",
"examples" : [ "1" ]
},
"maxRequestIndex" : {
"type" : "integer",
"title" : "Максимальное значение индекса",
"description" : "Задает значение счетчика запросов, по достижении которого работа тестового плана будет прекращена. Используется вместе с startRequestIndex. Пример использования: при startRequestIndex = 1 и maxRequestIndex = 100 будет выполнено 100 транзакций, после этого тестовый план будет остановлен",
"examples" : [ "10" ]
},
"retryCount" : {
"type" : "integer",
"title" : "Количество повторов",
"description" : "Кол-во попыток совершить повторное подключение при разрыве соединения для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS. Работает вместе с retryDelayTime",
"examples" : [ "1" ]
},
"retryDelayTime" : {
"description" : "Время между попытками переподключения. Работает вместе с retryCount. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Время между попытками"
},
"messageTimeout" : {
"description" : "Таймаут, в течение которого ожидается ответ. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Таймаут запросов"
},
"errorsToStop" : {
"type" : "integer",
"description" : "Число статусов подряд в ответных сообщениях, не указанных в списке успешных, после которых тестплан принудительно завершается. Успешные статусы - значения в диапазоне 0-399 и значения из expectedStatus",
"title" : "Количество допустимых ошибок",
"default" : "100",
"examples" : [ "100" ]
},
"ignoreErrorsDuringWarmup" : {
"description" : "Длительность, во время которой не учитываются ошибки способные остановить нагрузку (`errorsToStop`). Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Отсрочка остановки по количеству ошибок"
},
"correlation" : {
"$ref" : "#/definitions/CorrelationConfig",
"required" : [ "messageParser" ]
},
"performance" : {
"$ref" : "#/definitions/GeneratorPerformance",
"title" : "Настройки производительности генератора",
"description" : "Блок описания работы тестового плана в облаке. Задает характеристики, связанные с работой модулей SyTester в общем и для конкретных протоколов"
},
"periodicLoad" : {
"$ref" : "#/definitions/PeriodicLoad"
},
"http" : {
"$ref" : "#/definitions/GeneratorHttpConfig",
"title" : "Настройки HTTP-транспорта генератора",
"description" : "Блок специфических настроек тестового плана при protocol=HTTP"
},
"grpc" : {
"$ref" : "#/definitions/GeneratorGrpcConfig",
"title" : "Настройки GRPC-транспорта генератора",
"description" : "Блок специфических настроек тестового плана при protocol=GRPC"
},
"mq" : {
"$ref" : "#/definitions/GeneratorMqConfig",
"title" : "Настройки MQ-транспорта генератора",
"description" : "Блок специфических настроек тестового плана при protocol=MQ"
},
"kafka" : {
"$ref" : "#/definitions/GeneratorKafkaConfig",
"title" : "Настройки транспорта Kafka-генератора",
"description" : "Блок специфических настроек тестового плана при protocol=Kafka"
},
"slaLatencyChecking" : {
"$ref" : "#/definitions/SlaLatencyChecking",
"title" : "Настройки Latency SLA",
"description" : "Блок проверки задержки тестового плана на соблюдение целевого значения. Если проверка включена, то во время выполнения тестового плана будет производиться сравнение средней latency с целевым значением (latencyMs), При превышении, тестовый план будет остановлен. Время начала проверки регулируется параметром minRequests"
},
"observers" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/GeneratorObserver"
},
"description" : "Список наблюдателей, выполняющих мониторинг, при работе генератора"
}
}
},
"Tps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки TPS",
"description" : "Блок конфигурации транзакций, выполняемых для генерации нагрузки",
"default" : {
"start" : 1.0,
"max" : 5.0,
"stepTime" : "1m",
"stepSize" : 1.0
},
"properties" : {
"start" : {
"type" : "number",
"default" : 1,
"description" : "Начальное количество транзакций в секунду",
"title" : "Начальный TPS",
"examples" : [ "1" ]
},
"max" : {
"type" : "number",
"default" : 5,
"description" : "Максимальное количество транзакций в секунду",
"title" : "Максимальный TPS",
"examples" : [ "5" ]
},
"stepTime" : {
"description" : "Интервал увеличения нагрузки. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Интервал TPS",
"default" : "1m"
},
"stepSize" : {
"type" : "number",
"default" : 1,
"description" : "Шаг увеличения нагрузки",
"title" : "Шаг TPS",
"examples" : [ "1" ]
}
}
},
"CorrelationConfig" : {
"type" : "object",
"additionalProperties" : false,
"description" : "Блок для настройки корреляции ответов с запросами. Применяется только для асинхронных протоколов (protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS) при синхронных сценариях\"",
"title" : "Настройки корреляции",
"required" : [ "messageParser" ],
"properties" : {
"messageParser" : {
"type" : "string",
"default" : "NONE",
"examples" : [ "[\"XPATH\"]" ],
"enum" : [ "NONE", "XPATH", "JSONPATH", "HEADER", "XML_IN_JSON", "JSON_IN_JSON" ],
"description" : "Задает формат сообщения для поиска значения внутренней переменной rq\\_uid и status_code (код ответа). Применяется вместе с rqUIDTag и/или statusCodeTag\nЗначение rq\\_uid аналогично со значениями параметра:\nNONE - парсинг отключен\nXPATH - формат XML. Ожидается выражение в формате xpath 1.0\nJSONPATH - формат json. Ожидается выражение в формате JsonPath https://github.com/json-path/JsonPath\nHEADER - формат не важен, rq\\_uid/statusCode заданы в заголовке сообщения (testdatas[].headers)\nXML_IN_JSON - используется в GRPC сообщениях для того, чтобы распарсить xml сообщение из тега body сообщения в формате JSON\nJSON_IN_JSON - аналогично XML_IN_JSON только для JSON сообщений\n",
"title" : "Парсер сообщений"
},
"correlationTag" : {
"type" : "string",
"examples" : [ "$.contextId", "//RQ2", "X-Correlation-ID" ],
"description" : "Для type=GENERATOR/STEPS:\nЗадает выражение для извлечения значения корреляционной переменной (rq\\_uid или uuid) из сообщения-ответа.\nПолученное значение используется для корреляции ответа с запросом.\nВ сообщении-запросе должна присутствовать переменная ${rq\\_uid} или ${uuid}.\n\nДля type=STUB:\nЗадает выражение для извлечения значения корреляционной переменной (rq\\_uid или uuid) из сообщения-запроса.\nПолученное значение подставляется в сообщение-ответ вместо переменной ${rq\\_uid} или ${uuid}.\n\nПрименяется вместе с messageParser=XPATH|JSONPATH|HEADER.\nПосле извлечения значения автоматически определяется тип: rq\\_uid (формат 00[0-9a-f]{14}) или uuid (UUID v4 формат).\nЕсли извлечённое значение содержит префикс/суффикс (например \"prefix#${uuid}\"), используйте correlationRegex для извлечения чистого значения.\n",
"title" : "Тег идентификатора запросов"
},
"correlationRegex" : {
"type" : "string",
"examples" : [ "id#(.+)", "channel_agent#([^>]+)", "(.*)#id" ],
"description" : "Опциональное регулярное выражение с одной capture group для извлечения чистого корреляционного значения из строки с префиксом/суффиксом.\nЕсли значение поля, извлечённое по correlationTag, содержит дополнительные символы (например \"id#${uuid}\"),\nиспользуйте correlationRegex для извлечения чистого значения rq\\_uid или uuid.\nВыражение должно содержать ровно одну capture group (в круглых скобках), которая будет использована как корреляционное значение.\nПримеры:\n- \"PREFIX#(.+)\" - извлекает ID после разделителя #\n- \"PREFIX\\_(.+)\\_SUFFIX\" - извлекает значение между префиксом и суффиксом\n- \"(.+)\" - извлекает всё значение (эквивалентно отсутствию regex)\n",
"title" : "Регулярное выражение для извлечения корреляционного значения"
},
"rqUIDTag" : {
"type" : "string",
"examples" : [ "/custom2/RQ2/@Attr1" ],
"description" : "[DEPRECATED] Используйте correlationTag вместо rqUIDTag.\nЗадает выражение для поиска значения внутренней переменной rq\\_uid.\nПрименяется вместе с messageParser=XPATH|JSONPATH|HEADER.\nСохраняется для обратной совместимости.\n",
"title" : "Тег идентификатора запросов (rq\\_uid)"
},
"requestTimeStorage" : {
"type" : "string",
"default" : "LOCAL_CACHE",
"examples" : [ "MEMORY_DB" ],
"enum" : [ "IGNITE", "MEMORY_DB", "LOCAL_CACHE", "NONE", "HEADER", "STORE_FULL_REQUEST" ],
"description" : "Используется для корреляции ответов с запросами, описание механизма корреляции приведено ниже. Возможные значения:\n1. MEMORY\\_DB – время отправки каждого запроса сохраняется в локальный кеш (LOCAL\\_CACHE) и внешний кеш (Ignite/Radish/etcd). Также можно использовать алиас IGNITE.\nРекомендуется использовать для SyTester EE для protocol=MQ|KAFKA|ACTIVE\\_MQ|ARTEMIS\n2. LOCAL\\_CACHE - время отправки каждого запроса сохраняется в локальный кеш.\nРекомендуется использовать:\n1) для SyTester CE для всех сценариев\n2) для SyTester EE:\n 2.1) для синхронных протоколов (protocol=HTTP|GRPC),\n 2.2) для асинхронных протоколов (protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS) когда тест работает на 1 поде генератора\n 2.3) во всех остальных случаях, когда не нужны метрики задержки и статусы транзакции (в этом случае поведение аналогично none)\n3. NONE – время отправки каждого запроса не сохраняется.\nРекомендуется использовать для SyTester CE и EE, при необходимости отсылать запросы без ответов. Метрики не доступны\n",
"title" : "Хранилище запросов"
},
"statusCodeTag" : {
"type" : "string",
"examples" : [ "204" ],
"description" : "Задает выражение для поиска значения status\\_code из ответа. Применяется вместе с messageParser.\nИспользуется для:\n1. Понимания статуса вызова: успешно/неуспешно (если не успешно, то увеличится errorsToStop)\n2. Формирование метрики статуса транзакции\n3. Установки http статуса ответного сообщения на http заглушке\n\nПример для messageParser=header: \"statusCodeTag\": \"mystatus\\_code\", при условии, что во входящем сообщении есть header c 333 , в этом случае statusCode = 333\n",
"title" : "Тег кода статуса"
}
}
},
"GeneratorPerformance" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки производительности генератора",
"description" : "Блок описания работы тестового плана в облаке. Задает характеристики, связанные с работой модулей SyTester в общем и для конкретных протоколов",
"properties" : {
"podCount" : {
"type" : "integer",
"default" : 0,
"examples" : [ "2" ],
"description" : "Количество подов генераторов, на которых будет запущен тестовый план\nЕсли параметр задан, то на поде (-ах) на которых запущен тест не будут запущены другие (следует применять для критичных тестов, для которых нужна полная изоляция)\nЕсли параметр не задан (или задан 0), то на поде может быть запущено более одного теста с одинаковым значением protocol (но не более genMaxNT/max). genMaxNT определяется конкретным протоколом (задается в application.yml - см. Руководство по установке)\n",
"title" : "Количество подов"
},
"writeThreads" : {
"type" : "integer",
"default" : 0,
"examples" : [ "10" ],
"description" : "Количество потоков для отправки сообщений генератором.\nЕсли значение не задано (или задан 0), то количество потоков рассчитывается как целая часть результата выражения: maxTPS/100\n",
"title" : "Количество записывающих потоков"
}
}
},
"PeriodicLoad" : {
"type" : "object",
"additionalProperties" : false,
"description" : "Блок описания режима периодической нагрузки.\nВ режиме периодической нагрузки генератор может находиться в режиме нагрузки или в режиме простоя.\nРежим нагрузки, длительность конфигурируется параметром loadDuration:\n- в режиме нагрузки генератор выдает нагрузку на тестируемый сервис в штатном режиме\n- по истечению времени нагрузки, генератор переходит в режим простоя\nРежим простоя, длительность конфигурируется параметром loadCooldown:\n- в режиме простоя генератор не выполняет никаких действий. Тестплан переходит в статус paused\n- по истечения времени простоя, генератор переходит в режим нагрузки. Тестплан переходит в статус, предшествующий статусу paused\n",
"title" : "Настройки периодической нагрузки",
"properties" : {
"loadDuration" : {
"description" : "Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Длительность нагрузки"
},
"loadCooldown" : {
"description" : "Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Длительность простоя"
},
"startWithLoad" : {
"type" : "boolean",
"description" : "Начальный режим работы.\nВозможные значения:\n- true - генератор запускается в режиме нагрузки и подает нагрузку сразу\n- false - генератор запускается в режиме простоя и подает нагрузку спустя loadCooldown\n",
"title" : "Начинать с нагрузки",
"examples" : [ "true" ]
}
}
},
"GeneratorHttpConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки HTTP-транспорта генератора",
"description" : "Блок специфических настроек тестового плана при protocol=HTTP",
"properties" : {
"maxConnections" : {
"type" : "integer",
"description" : "Определяет максимальное количество одновременных исходящих соединений, которое может быть открыто к конкретному хосту. Когда все соединения заняты, новые запросы становятся в очередь и ожидают освобождения одного из них.",
"title" : "Максимальное число соединений",
"default" : "0",
"examples" : [ "100" ]
},
"expectedStatus" : {
"type" : "string",
"title" : "Ожидаемые статусы",
"description" : "Список статусов, которые будут обозначены SyTester как успешные. Если значение не задано, то успешным считается 200 статус",
"examples" : [ "500" ]
}
}
},
"GeneratorGrpcConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки GRPC-транспорта генератора",
"description" : "Блок специфических настроек тестового плана при protocol=GRPC",
"properties" : {
"maxConnections" : {
"type" : "integer",
"description" : "Количество потоков для отправки сообщений генератором. Если значение не задано (или задан 0), то количество потоков рассчитывается как целая часть результата выражения: maxTPS/100",
"title" : "Максимальное число соединений",
"default" : "0",
"examples" : [ "100" ]
}
}
},
"GeneratorMqConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки MQ-транспорта генератора",
"description" : "Блок специфических настроек тестового плана при protocol=MQ",
"properties" : {
"selectorFilter" : {
"type" : "string",
"description" : "Обрабатывает только те сообщения, где в заголовке `usr` присутствует указанный тег со значением",
"title" : "Фильтр сообщений",
"examples" : [ "RQ" ]
},
"consumerRateLimit" : {
"type" : "integer",
"description" : "Максимальное число одновременных операций чтения из очереди входящих сообщений",
"title" : "RateLimit потребителя",
"default" : "0",
"examples" : [ "5" ]
},
"encode64" : {
"type" : "boolean",
"description" : "Необходимость декодирования тела полученного сообщения из base64",
"title" : "Декодирование из base64",
"default" : "false",
"examples" : [ "true" ]
},
"readThreads" : {
"type" : "integer",
"description" : "Число подключений для очереди с ответами. Если значение не задано, то будет использоваться значение writeThreads",
"title" : "Количество читающих потоков",
"default" : "0",
"examples" : [ "10" ]
}
}
},
"GeneratorKafkaConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки транспорта Kafka-генератора",
"description" : "Блок специфических настроек тестового плана при protocol=Kafka",
"properties" : {
"readThreads" : {
"type" : "integer",
"description" : "Число потоков для чтения ответов из топика. Каждый поток создаёт отдельный KafkaConsumer, Kafka делит партиции топика между ними и читает параллельно. Значение не должно превышать количество партиций топика. Если значение не задано - будет использоваться значение writeThreads.",
"title" : "Количество читающих потоков",
"default" : "1",
"examples" : [ "10" ]
}
}
},
"SlaLatencyChecking" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки Latency SLA",
"description" : "Блок проверки задержки тестового плана на соблюдение целевого значения. Если проверка включена, то во время выполнения тестового плана будет производиться сравнение средней latency с целевым значением (latencyMs), При превышении, тестовый план будет остановлен. Время начала проверки регулируется параметром minRequests",
"properties" : {
"minRequests" : {
"type" : "integer",
"default" : "0",
"description" : "Минимальное количество запросов, после преодоления которых начинается проверка. Параметр необходим для настройки достоверности средней latency. При начале тестирования средняя latency может существенно отличаться от достоверного значения, в связи с малой выборкой. Если значение 0, проверка начинается при первом запросе",
"title" : "Минимальное количество запросов",
"examples" : [ "10" ]
},
"latency" : {
"default" : "0",
"description" : "Значение задержки, превышение которой приведет к остановке ТП. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Целевая задержка"
}
}
},
"GeneratorObserver" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Наблюдатель генератора",
"description" : "Наблюдатель описывает ожидаемое событие или состояние(условие) и соответствующую ему действие, которое инициируется при его наступлении.",
"required" : [ "condition" ],
"properties" : {
"condition" : {
"type" : [ "string", "integer" ],
"examples" : [ "_steps['tps'].tps.current > 15" ],
"description" : "Наблюдаемое условие генератора",
"format" : "expression",
"title" : "Условие"
},
"action" : {
"type" : "string",
"examples" : [ "STOP" ],
"enum" : [ "NONE", "WARN", "STOP", "CONTINUE", "BREAK" ],
"description" : "STOP — остановка тестового плана,\nCONTINUE — переход на следующую итерацию текущего цикла,\nBREAK — завершение выполнения текущего цикла.\nЕсли поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.\nЗначения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению\n",
"title" : "Действие при выполнении условия"
}
}
},
"StubConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация заглушки",
"description" : "Блок специфических настроек тестового плана при type = STUB",
"examples" : [ {
"type" : "RANDOM",
"transportIn" : [ "http" ]
} ],
"required" : [ "transportIn" ],
"properties" : {
"type" : {
"type" : "string",
"examples" : [ "RANDOM" ],
"enum" : [ "RANDOM", "SCRIPT", "XSLT", "SEQUENCE", "STORED_XML" ],
"title" : "Тип заглушки",
"description" : "Режим работы:\n* Random - заглушка вернет любой из заданных ответов для сервиса, заданного в тестовом плане\n* Script - ответ формирует в выражении\n* XSLT - заглушка вернет ответ, для которого заданный XSLT шаблон будет соответствовать телу пришедшего запроса\n* Sequence - метод возвращает несколько ответов в очереди в ответ на 1 входное сообщение (только для protocol=MQ)\n* STORED_XML - deprecated",
"default" : "RANDOM"
},
"transportIn" : {
"type" : "array",
"items" : {
"type" : "string"
},
"description" : "Ссылка на транспорт из блока transport, задается как значение тега transport->name. Задает адрес (endpoint) на котором будут ожидаться запросы",
"title" : "Входные транспорты",
"default" : "transport_name",
"examples" : [ "transport_name" ],
"minItems" : 1
},
"transportOut" : {
"type" : "array",
"items" : {
"type" : "string"
},
"description" : "Ссылка на транспорт из блока transport, задается как значение тега transport->name. Задает адрес (endpoint) на который будут отсылаться ответы",
"title" : "Выходные транспорты",
"default" : "transport_name",
"examples" : [ "transport_name" ]
},
"testdata" : {
"type" : "array",
"items" : {
"type" : "string"
},
"description" : "Ссылка на тестовые данные из блока testdata, задается как значение тега testdata->name. Если значение не задано, то заглушка будет работать в режиме echo-сервера (будет возвращать в ответе то, что пришло в запросе)",
"title" : "Тестовые данные",
"default" : "testplan_data",
"examples" : [ "testplan_data" ]
},
"script" : {
"type" : "string",
"examples" : [ "\"script\": |\n const result = {\n name: \"John\"\n };\n response.body = json(result)\n response.headers = {\n \"Content-Type\": \"application/json\"\n }\n response.statusCode = 200\n", "script: |-\n const result = {\n var: request.pathParams.var,\n query: request.queryParams.param,\n rawPath: request.path,\n rawQuery: request.query\n };\n response.body = json(result)\n response.headers = {\n \"Content-Type\": \"application/json\"\n }\n response.statusCode = 200\n" ],
"description" : "Script-заглушка формирует ответ в выражении, которое задается в атрибуте stub.script. Запись данных в формируемый ответ осуществляется с помощью переменной response.",
"title" : "Script-заглушка"
},
"delay" : {
"type" : [ "string", "integer" ],
"examples" : [ "10s" ],
"description" : " Пауза, которая будет применена после прочтения сообщения перед отправкой ответа. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запросе",
"format" : "expression",
"title" : "Задержка"
},
"startRequestIndex" : {
"type" : "integer",
"default" : "0",
"examples" : [ "10" ],
"title" : "Начальное значение индекса",
"description" : "Задает значение, которое будет подставлено вместо внутренней переменной ${rq_index} в тестовых данных, привязанных к тестовому плану"
},
"maxRequestIndex" : {
"type" : "integer",
"examples" : [ "10" ],
"title" : "Максимальное значение индекса",
"description" : "Задает значение счетчика запросов, по достижении которого работа тестового плана будет прекращена"
},
"retryCount" : {
"type" : "integer",
"examples" : [ "10" ],
"title" : "Количество повторов",
"description" : "Кол-во попыток совершить повторное подключение при разрыве соединения для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS. Работает вместе с retryDelayTime"
},
"retryDelayTime" : {
"description" : "Время между попытками переподключения. Работает вместе с retryCount. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Время между попытками"
},
"correlation" : {
"$ref" : "#/definitions/CorrelationConfig",
"required" : [ "messageParser" ]
},
"performance" : {
"$ref" : "#/definitions/StubPerformance",
"title" : "Настройки производительности заглушки",
"description" : "Блок описания работы тестового плана в облаке. Задает характеристики, связанные с работой модулей SyTester в общем и для конкретных протоколов"
},
"mq" : {
"$ref" : "#/definitions/StubMqConfig",
"title" : "Настройки MQ-транспорта заглушки",
"description" : " Блок, определяющий настройки работы с очередями"
},
"kafka" : {
"$ref" : "#/definitions/StubKafkaConfig",
"title" : "Настройки транспорта Kafka-заглушки",
"description" : " Блок, определяющий настройки работы с Kafka"
}
}
},
"StubPerformance" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки производительности заглушки",
"description" : "Блок описания работы тестового плана в облаке. Задает характеристики, связанные с работой модулей SyTester в общем и для конкретных протоколов",
"properties" : {
"podCount" : {
"type" : "integer",
"default" : 0,
"examples" : [ "2" ],
"description" : "Количество подов заглушек\nЕсли protocol=HTTP|GRPC параметр не учитывается и заглушка будет запущена на всех работающих подах\nЕсли параметр задан, то на поде (-ах) на которых запущен тест не будут запущены другие (следует применять для критичных тестов, для которых нужна полная изоляция)\nЕсли параметр не задан (или задан 0), то на поде может быть запущено более одного теста с одинаковым значением protocol (но не более genMaxNT/max). genMaxNT определяется конкретным протоколом (задается в application.yml - см. Руководство по установке)\n",
"title" : "Количество подов"
}
}
},
"StubMqConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки MQ-транспорта заглушки",
"description" : " Блок, определяющий настройки работы с очередями",
"properties" : {
"replyQueueAndMQManager" : {
"type" : "string",
"default" : "FROM_INCOMING_MESSAGE",
"examples" : [ "FROM_INCOMING_MESSAGE" ],
"enum" : [ "FROM_INCOMING_MESSAGE", "FROM_TESTPLAN" ],
"title" : "Очередь ответа",
"description" : "FROM\\_INCOMING\\_MESSAGE - заглушка отвечает по Reply, значения ReplyQ/ReplyQM берутся из запроса\nFROM\\_TESTPLAN - заглушка отправляет ответ в очередь/менеджер по списку транспортов, указанных в теге transportOut\n"
},
"selectorFilter" : {
"type" : "string",
"examples" : [ "selectorFilter" ],
"description" : "Обрабатывает только те сообщения, где в заголовке `usr` присутствует указанный тег со значением",
"title" : "Фильтр сообщений"
},
"consumerRateLimit" : {
"type" : "integer",
"examples" : [ "5" ],
"description" : "Максимальное число одновременных операций чтения из очереди входящих сообщений",
"title" : "RateLimit потребителя"
},
"encode64" : {
"type" : "boolean",
"default" : false,
"description" : "Необходимость декодирования тела полученного сообщения из base64",
"title" : "Декодирование из base64",
"examples" : [ "true" ]
},
"readThreads" : {
"type" : "integer",
"default" : 0,
"examples" : [ "10" ],
"description" : "Число подключений для очереди входящих запросов. Если значение не задано, то будет использоваться рассчитано исходя из соотношения: 1 поток - 20 тпс",
"title" : "Количество читающих потоков"
}
}
},
"StubKafkaConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки транспорта Kafka-заглушки",
"description" : " Блок, определяющий настройки работы с Kafka",
"properties" : {
"readThreads" : {
"type" : "integer",
"default" : 1,
"examples" : [ "10" ],
"description" : "Число потоков для чтения входящих сообщений из топика. Каждый поток создаёт отдельный KafkaConsumer, Kafka делит партиции топика между ними и читает параллельно. Значение не должно превышать количество партиций топика. Если значение не задано - используется 1 поток.",
"title" : "Количество читающих потоков"
}
}
},
"StepsConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация пошагового сценария тестирования",
"description" : "Блок специфических настроек тестового плана при type = STEPS",
"required" : [ "entry", "steps" ],
"properties" : {
"vars" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/TestVar"
},
"description" : "Список переменных, которые будут инициализированы при запуске тестового плана",
"title" : "Список переменных"
},
"entry" : {
"type" : "string",
"examples" : [ "rest-step" ],
"description" : "Название шага, который будет выполнен при запуске тестового плана",
"title" : "Первый запускаемый шаг"
},
"steps" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/TestplanStep"
},
"title" : "Шаги",
"description" : "Список шагов тестирования. Их порядок не важен",
"minItems" : 1
},
"podCount" : {
"type" : "integer",
"default" : 0,
"examples" : [ "1" ],
"description" : "Количество генераторов для распределенной работы тестового плана",
"title" : "Количество подов"
}
}
},
"TestVar" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Переменная тестирования",
"description" : "Для задания типа переменной необходимо задать значение в определенный атрибут (для целочисленного - intValue и т.п.). Используется значение в порядке приоритета int > float > boolean > string",
"examples" : [ {
"intValue" : 12,
"name" : "intVar"
}, {
"stringValue" : "Hello world!",
"name" : "stringVar"
} ],
"required" : [ "name" ],
"properties" : {
"name" : {
"type" : "string",
"title" : "Название переменной",
"examples" : [ "countCm" ]
},
"intValue" : {
"type" : "integer",
"title" : "Целочисленное значение",
"examples" : [ 10 ]
},
"doubleValue" : {
"type" : "number",
"title" : "Вещественное значение",
"examples" : [ 1.0 ]
},
"booleanValue" : {
"type" : "boolean",
"title" : "Логическое значение",
"examples" : [ true ]
},
"stringValue" : {
"type" : "string",
"title" : "Строковое значение",
"examples" : [ "abc" ]
},
"value" : { }
}
},
"TestplanStep" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация шага тестирования",
"required" : [ "name", "type" ],
"properties" : {
"name" : {
"type" : "string",
"examples" : [ "step_1" ],
"title" : "Название шага"
},
"description" : {
"type" : "string",
"examples" : [ "Описание шага" ],
"title" : "Описание шага"
},
"type" : {
"type" : "string",
"default" : "PUT",
"examples" : [ "GET" ],
"enum" : [ "PUT", "GET", "SLEEP", "PUT_GET", "K8S_APPLY", "K8S_DELETE", "K8S_CHECK", "K8S_CHANGE", "K8S_RESTART_PODS", "K8S_AWAIT_CONDITION", "LOOP", "SET_VAR", "SERIAL", "PARALLEL", "TPS_LOADER", "EXPRESSION" ],
"title" : "Тип шага тестирования",
"description" : "Выполняемое действие для шага:\nPUT - отправка сообщения,\nGET - получение сообщения (применимо для protocol=MQ|KAFKA и для HTTP с steps->ignite),\nPUT_GET - синхронная работа по асинхронным протоколам\nSLEEP - задержка,\nK8S\\_APPLY - загрузка Kubernetes-ресурсов,\nK8S\\_DELETE - удаление Kubernetes-ресурсов,\nK8S\\_CHECK - проверка Kubernetes-ресурсов,\nK8S\\_RESTART\\_PODS - перезагрузка подов,\nK8S\\_AWAIT\\_CONDITION - ожидание условия для Kubernetes-ресурсов,\nLOOP - итерации по заданной переменной с последовательным выполнением тела цикла,\nSET\\_VAR - объявить переменную или изменить значение уже существующей переменной,\nSERIAL - последовательно выполнить указанные шаги,\nPARALLEL - параллельно выполнить указанные шаги,\nTPS\\_LOADER - выполнение действия с заданным TPS,\nEXPRESSION - выполнение выражения\n"
},
"logLevel" : {
"type" : "string",
"enum" : [ "DEBUG", "INFO", "WARN", "ERROR", "NONE" ],
"title" : "Уровень логирования",
"description" : "Уровень логирования при работе тестового плана",
"default" : "ERROR",
"examples" : [ "DEBUG" ]
},
"transport" : {
"type" : "string",
"examples" : [ "transport" ],
"description" : "Ссылка на транспорт из блока transport, задается как значение тега transport->name",
"title" : "Транспорт"
},
"testdata" : {
"type" : "string",
"examples" : [ "testdata" ],
"description" : "Ссылка на тестовые данные из блока testdata, задается как значение тега testdata->name. При stepType=K8S_APPLY в качестве тестовых данных должен быть задан шаблон ресурсов",
"title" : "Тестовые данные"
},
"timeout" : {
"type" : "string",
"description" : "Таймаут, в течение которого ожидается ответ.",
"title" : "Таймаут ожидания",
"examples" : [ "5s" ]
},
"vars" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/VarFormationConfig"
},
"description" : "Блок списка переменных, которые будут сформированы по результату получения ответа на данном шаге. Используются для шагов stepType=GET|PUT. Их можно использовать на последующих шагах в заголовках или теле сообщения. Пример использования: ${varName}",
"title" : "Формирование переменных"
},
"get" : {
"$ref" : "#/definitions/GetConfig",
"title" : "Настройки GET шага",
"description" : "Блок специфических настроек шагов тестирования для stepType = GET"
},
"put" : {
"$ref" : "#/definitions/PutConfig",
"title" : "Настройки PUT шага",
"description" : "Блок специфических настроек шагов тестирования для stepType = PUT"
},
"ignite" : {
"type" : "boolean",
"default" : false,
"description" : "Используется для поддержки синхронного сценария для асинхронных вызовов HTTP путем получения ответа через Ignite\nЛогика работы:\n1. Выполняется запрос в тестируемую АС по HTTP\n2. Тестируемая АС отвечает (асинхронный ответ по HTTP) в заглушку\n3. Заглушка помещает ответ в Ignite\n4. Ответ читается из Ignite\nДля настройки нужно:\n1. В тестовом плане с type=STUB и protocol=HTTP установить requestTimeStorage=store_full_request и задать rqUIDTag\n2. На любом шаге c stepType=PUT в тело сообщения добавить внутреннюю переменную $rq_uid\n3. На следующем шаге установить ignite=true иh\n3.1 Если stepType=GET, можно настроить steps.timeoutMs.\nТакже на этом шаге появляется возможность работы с переменными (см. steps.vars) и/или валидации сообщения (см. testdatas[].messageCompare->compareHeaders/compareBody)\n3.2 Если stepType=PUT, отправить сообщение (которое заданно в тестовом плане)\n",
"title" : "Использовать ли Ignite",
"examples" : [ "true" ]
},
"correlation" : {
"$ref" : "#/definitions/CorrelationConfig",
"required" : [ "messageParser" ]
},
"sleep" : {
"type" : [ "string", "integer" ],
"description" : "Длительность бездействия. Обязательный параметр шага SLEEP. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Длительность бездействия"
},
"k8s" : {
"$ref" : "#/definitions/StepK8sConfig",
"title" : "Конфигурация k8s-шагов",
"description" : "Блок специфических настроек шагов тестирования для stepType = K8S_*"
},
"loop" : {
"$ref" : "#/definitions/LoopConfig",
"title" : "Настройки цикла",
"description" : "Настройки шага цикла. Обязательный параметр шага LOOP. Шаг LOOP выполняет итерации по заданной переменной (loop.var) и последовательно выполняет действия тела цикла (loop.body)",
"required" : [ "var", "body" ]
},
"setVar" : {
"$ref" : "#/definitions/TestVar",
"title" : "Установка значения переменной",
"description" : "Установка значения переменной. Обязательный параметр шага SET_VAR. Для задания типа переменной необходимо задать значение в определенный атрибут (для целочисленного - intValue и т.п.). Используется значение в порядке приоритета int > float > boolean > string",
"examples" : [ {
"intValue" : 12,
"name" : "intVar"
}, {
"stringValue" : "Hello world!",
"name" : "stringVar"
} ],
"required" : [ "name" ]
},
"children" : {
"type" : "array",
"items" : {
"type" : "string"
},
"title" : "Подчиненные шаги",
"description" : "Список названий шагов, которые будут вызываться последовательно. Обязательный параметр шага SERIAL",
"minItems" : 1,
"examples" : [ "post-step" ]
},
"mq" : {
"$ref" : "#/definitions/StepMqConfig",
"title" : "Настройки MQ-транспорта",
"description" : "Блок специфических настроек шагов тестирования для protocol=MQ шагов PUT | GET"
},
"kafka" : {
"$ref" : "#/definitions/StepKafkaConfig",
"title" : "Настройки транспорта Kafka",
"description" : "Блок специфических настроек шагов тестирования для protocol=Kafka шагов PUT | GET | PUT_GET"
},
"tpsLoader" : {
"$ref" : "#/definitions/TpsLoaderConfig",
"title" : "Настройки TPS-нагрузки",
"description" : "Настройки шага TPS-нагрузки. Обязательный параметр шага TPS_LOADER. В шаге с заданной длительностью выполняется другой шаг с частотой контролируемой настройкой TPS",
"required" : [ "workload" ],
"examples" : [ {
"tps" : {
"start" : 1,
"finish" : 10,
"increment" : {
"value" : 1,
"rate" : "3s"
}
},
"duration" : "30s",
"workload" : "http-put",
"threadCount" : "10",
"asyncMode" : true
} ]
},
"onError" : {
"type" : "string",
"enum" : [ "NONE", "WARN", "STOP", "CONTINUE", "BREAK" ],
"description" : "Опциональное действие при ошибке. Выполняемый шаг прерывается в любом случае.\nSTOP — остановка тестового плана,\nCONTINUE — переход на следующую итерацию текущего цикла,\nBREAK — завершение выполнения текущего цикла.\nЕсли поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.\nЗначения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению\n",
"title" : "Действие при ошибке выполнения шага"
},
"observers" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/StepObserver"
},
"description" : "Список наблюдателей, выполняющих мониторинг, при работе шага",
"title" : "Наблюдатели"
},
"updaters" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/StepUpdater"
}
},
"expression" : {
"type" : [ "string", "integer" ],
"examples" : [ "clean('http-request')" ],
"description" : "Выражение выполняемое в шаге EXPRESSION",
"format" : "expression",
"title" : "Выражение"
},
"interrupt" : {
"type" : "boolean"
},
"timer" : {
"$ref" : "#/definitions/TimerConfig"
},
"catchError" : {
"$ref" : "#/definitions/CatchErrorConfig"
},
"finallySteps" : {
"type" : "string"
},
"metadata" : {
"type" : "object",
"additionalProperties" : {
"$ref" : "#/definitions/Object"
},
"description" : "Объект для хранения пар ключ-значение клиента.\nСодержимое объекта полностью контролируется пользователем и не влияет на работу тестового плана",
"title" : "Метаданные, пользовательские атрибуты",
"examples" : [ {
"metadata" : {
"firstProperty" : 10,
"secondProperty" : "string"
}
} ]
}
}
},
"VarFormationConfig" : {
"type" : "object",
"additionalProperties" : false,
"description" : "Формирование переменной на основе полученного ответа",
"title" : "Формирование переменной",
"required" : [ "path", "varName", "type" ],
"properties" : {
"path" : {
"type" : "string",
"examples" : [ "first_var" ],
"description" : "Задает выражение для поиска значения varName в сообщении. Может содержать как простые строковые значения (type: header, const), так и xpath и jsonpath пути (type: xpath, jsonpath, jsonInJson, xmlInJson)",
"title" : "Путь"
},
"varName" : {
"type" : "string",
"examples" : [ "var1" ],
"description" : " Имя переменной, в которую будет помещено значение после исполнения выражения path",
"title" : "Имя переменной"
},
"type" : {
"type" : "string",
"examples" : [ "JSONPATH" ],
"enum" : [ "XPATH", "JSONPATH", "JSON_IN_JSON", "XML_IN_JSON", "HEADER", "CONST" ],
"title" : "Тип формирования переменной",
"description" : "Задает формат сообщения для поиска переменной:\n* XPATH - формат xml. Ожидается выражение в формате xpath 1.0\n* JSONPATH - формат JSON. Ожидается выражение в формате JsonPath https://github.com/json-path/JsonPath\n* XML\\_IN\\_JSON - используется в GRPC сообщениях для того, чтобы распарсить xml сообщение из тега body сообщения в формате JSON\n* JSON\\_IN\\_JSON - аналогично XML\\_IN\\_JSON только для JSON сообщений\n* HEADER - используется для того, чтобы извлечь значение заголовка, имя тега задается в \"path\"\n* CONST - используется для задания константного значения. Значение задается в \"path\"\n"
}
}
},
"GetConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки GET шага",
"description" : "Блок специфических настроек шагов тестирования для stepType = GET",
"properties" : {
"delay" : {
"type" : [ "string", "integer" ],
"default" : "5s",
"description" : "Пауза, которая будет применена после выполнения шага. Используется для имитации задержки перед следующим шагом. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Задержка"
}
}
},
"PutConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки PUT шага",
"description" : "Блок специфических настроек шагов тестирования для stepType = PUT",
"properties" : {
"expectedStatus" : {
"type" : "integer",
"examples" : [ "204" ],
"title" : "Ожидаемый статус"
},
"http" : {
"$ref" : "#/definitions/PutHttpConfig",
"title" : "Настройки HTTP-транспорта шага PUT",
"description" : "Блок специфических настроек шага PUT при protocol=HTTP (не влияет на работу других протоколов)"
}
}
},
"PutHttpConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки HTTP-транспорта шага PUT",
"description" : "Блок специфических настроек шага PUT при protocol=HTTP (не влияет на работу других протоколов)",
"properties" : {
"maxConnections" : {
"type" : "string",
"description" : "Определяет максимальное количество одновременных исходящих соединений, которое может быть открыто к конкретному хосту. Когда все соединения заняты, новые запросы становятся в очередь и ожидают освобождения одного из них. По умолчанию задается значение из глобальной конфигурации (100 соединений).",
"title" : "Максимальное число соединений",
"default" : "100",
"examples" : [ "500" ]
}
}
},
"StepK8sConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация k8s-шагов",
"description" : "Блок специфических настроек шагов тестирования для stepType = K8S_*",
"properties" : {
"applyCount" : {
"type" : [ "string", "integer" ],
"examples" : [ "countCm" ],
"description" : "Количество выполнений загрузки ресурсов шага K8S_APPLY",
"format" : "expression",
"title" : "Количество загрузок"
},
"packageSize" : {
"type" : "integer",
"description" : "Размер пакета постепенной работы с ресурсами. Используется для шага action=K8S\\_APPLY|K8S\\_DELETE|K8S\\_CHECK|K8S\\_AWAIT\\_CONDITION|K8S\\_CHANGE. Пример: если необходимо создать 25 ресурсов, то сначала будет создано 10, потом еще 10 и потом оставшиеся 5. При указании packageSize = 1 загрузка будет **производиться строго по одному элементу**, обеспечивая максимальную контролируемость процесса. Внутри одного пакета ресурсы обрабатываются последовательно. ",
"title" : "Размер пакета",
"default" : "10",
"examples" : [ "10" ]
},
"packageTimeout" : {
"type" : [ "string", "integer" ],
"default" : "10s",
"description" : "Таймаут на обработку пакета. В случае если время обработки пакета будет превышено, оставшиеся ресурсы в пакете обработаны не будут. Используется для шага action=K8S_APPLY|K8S_DELETE|K8S_CHECK|K8S_AWAIT_CONDITION|K8S_CHANGE. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Таймаут пакета"
},
"resourceTypes" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/ResourceType"
},
"description" : "Типы ресурсов для шагов K8S\\_DELETE, K8S\\_CHECK, K8S\\_CHANGE, K8S\\_AWAIT\\_CONDITION",
"title" : "Типы ресурсов"
},
"labelSelector" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
},
"description" : "Селектор по меткам для шагов K8S\\_DELETE, K8S\\_CHECK, K8S\\_CHANGE, K8S\\_AWAIT\\_CONDITION, K8S\\_RESTART\\_PODS. Селектор меток состоит из нескольких пар key-value, ресурс должен обладать всеми указанными метками",
"title" : "Селектор по меткам",
"examples" : [ "app.kubernetes.io/managed-by: sytester" ]
},
"nameSelector" : {
"type" : "string",
"description" : "Селектор имени выполняет выборку строго по заданном имени ресурса",
"title" : "Селектор по имени",
"examples" : [ "sleep-http-stub" ]
},
"limit" : {
"type" : "integer",
"description" : "С помощью атрибута `limit` можно ограничить количество выгружаемых ресурсов.",
"title" : "Ограничение количества выгружаемых ресурсов",
"default" : "10",
"examples" : [ "10" ]
},
"checks" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/K8sCheckConfig"
},
"description" : "Конфигурации проверок шага K8S_CHECK",
"title" : "Конфигурации проверок"
},
"conditions" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/K8sConditionConfig"
},
"description" : "Конфигурации условий шага K8S\\_AWAIT\\_CONDITION",
"title" : "Конфигурации условий"
},
"changes" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/K8sChangeConfig"
},
"description" : "Конфигурации изменений шага K8S_CHANGE",
"title" : "Конфигурации изменений"
},
"awaitDeleted" : {
"$ref" : "#/definitions/K8sAwaitDeletedConfig",
"title" : "Конфигурация ожидания удаления",
"description" : "Ожидание отсутствия удаленных ресурсов в Kubernetes-кластере шага K8S_DELETE"
},
"podRestart" : {
"$ref" : "#/definitions/K8sPodRestartConfig",
"title" : "Конфигурация перезапуска подов",
"description" : "Конфигурация перезапуска подов шага K8S_RESTART_PODS",
"required" : [ "percentage" ]
},
"cleaningAfter" : {
"type" : "boolean",
"description" : "Необходимость удаления созданных ресурсов шага K8S_APPLY после завершения тестового плана. По умолчанию очистка выключена",
"title" : "Флаг автоматической очистки",
"examples" : [ "true" ]
}
}
},
"ResourceType" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Тип ресурса",
"description" : "Тип k8s-ресурса",
"required" : [ "apiVersion", "kind" ],
"properties" : {
"apiVersion" : {
"type" : "string",
"examples" : [ "apps/v1" ],
"title" : "ApiVersion ресурса"
},
"kind" : {
"type" : "string",
"examples" : [ "ConfigMap" ],
"title" : "Kind ресурса"
}
}
},
"K8sCheckConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация проверки ресурсов",
"description" : "Проверяется соответствие значения полученного по Jsonpath ожидаемому",
"required" : [ "jsonpath", "expectedResult" ],
"properties" : {
"alias" : {
"type" : "string",
"examples" : [ "CPU" ],
"description" : "Псевдоним проверки, под котором она идентифицируется в отчете",
"title" : "Псевдоним проверки"
},
"jsonpath" : {
"type" : "string",
"examples" : [ "$.status.phase" ],
"description" : "JsonPath, по которому выполняется поиск проверяемого свойства ресурса",
"title" : "Jsonpath"
},
"expectedResult" : {
"type" : "string",
"examples" : [ "Running" ],
"description" : "Ожидаемый результат применения JsonPath",
"title" : "Ожидаемое значение"
},
"failAction" : {
"type" : "string",
"examples" : [ "STOP" ],
"enum" : [ "NONE", "WARN", "STOP", "CONTINUE", "BREAK" ],
"description" : "Действие при невыполнении условия. STOP — остановка тестового плана,\nCONTINUE — переход на следующую итерацию текущего цикла,\nBREAK — завершение выполнения текущего цикла.\nЕсли поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.\nЗначения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению\n",
"title" : "Действие"
}
}
},
"K8sConditionConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Ожидаемое условие",
"description" : "Проверяется соответствие значения полученного по Jsonpath ожидаемому в течение заданного таймаута",
"required" : [ "jsonpath", "expectedResult" ],
"properties" : {
"alias" : {
"type" : "string",
"examples" : [ "CPU" ],
"description" : "Псевдоним условие, под котором оно идентифицируется в отчете",
"title" : "Псевдоним условия"
},
"jsonpath" : {
"type" : "string",
"examples" : [ "$.status.phase" ],
"description" : "JsonPath, по которому выполняется поиск проверяемого свойства ресурса",
"title" : "Jsonpath"
},
"expectedResult" : {
"type" : "string",
"examples" : [ "Running" ],
"description" : "Ожидаемый результат применения JsonPath",
"title" : "Ожидаемое значение"
},
"timeout" : {
"type" : [ "string", "integer" ],
"description" : "Таймаут на ожидание выполнения условия. По умолчания ожидание происходит бесконечно. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Таймаут ожидания"
},
"timeoutAction" : {
"type" : "string",
"examples" : [ "STOP" ],
"enum" : [ "NONE", "WARN", "STOP", "CONTINUE", "BREAK" ],
"description" : "STOP — остановка тестового плана,\nCONTINUE — переход на следующую итерацию текущего цикла,\nBREAK — завершение выполнения текущего цикла.\nЕсли поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.\nЗначения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению\n",
"title" : "Действие при таймауте"
}
}
},
"K8sChangeConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Изменение",
"description" : "Изменение по jsonpath на заданное значение",
"required" : [ "jsonpath", "value" ],
"properties" : {
"alias" : {
"type" : "string",
"examples" : [ "CPU" ],
"description" : "Псевдоним изменения, под котором оно идентифицируется в отчете",
"title" : "Псевдоним изменения"
},
"jsonpath" : {
"type" : "string",
"examples" : [ "$.status.phase" ],
"description" : "JsonPath, по которому выполняется поиск изменяемого свойства ресурса",
"title" : "Jsonpath"
},
"value" : {
"type" : "string",
"examples" : [ "${newValue}" ],
"description" : "Новое значение свойства",
"title" : "Значение"
}
}
},
"K8sAwaitDeletedConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация ожидания удаления",
"description" : "Ожидание отсутствия удаленных ресурсов в Kubernetes-кластере шага K8S_DELETE",
"properties" : {
"timeout" : {
"type" : [ "string", "integer" ],
"description" : "Таймаут ожидания отсуствие ресурсов. По умолчания ожидание происходит бесконечно. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Таймаут ожидания"
},
"timeoutAction" : {
"type" : "string",
"enum" : [ "NONE", "WARN", "STOP", "CONTINUE", "BREAK" ],
"examples" : [ "STOP" ],
"description" : "STOP — остановка тестового плана,\nCONTINUE — переход на следующую итерацию текущего цикла,\nBREAK — завершение выполнения текущего цикла.\nЕсли поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.\nЗначения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению\n",
"title" : "Действие при таймауте"
}
}
},
"K8sPodRestartConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация перезапуска подов",
"description" : "Конфигурация перезапуска подов шага K8S_RESTART_PODS",
"required" : [ "percentage" ],
"properties" : {
"percentage" : {
"type" : "number",
"description" : "Процент подов, которых необходимо перезапустить",
"title" : "Процент",
"examples" : [ "10.0" ]
},
"awaitDeletedTimeout" : {
"type" : [ "string", "integer" ],
"description" : "Таймаут ожидания удаления пода перед его созданием при рестарте. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Таймаут ожидания удаления"
}
}
},
"LoopConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки цикла",
"description" : "Настройки шага цикла. Обязательный параметр шага LOOP. Шаг LOOP выполняет итерации по заданной переменной (loop.var) и последовательно выполняет действия тела цикла (loop.body)",
"required" : [ "var", "body" ],
"properties" : {
"var" : {
"$ref" : "#/definitions/LoopVarConfig",
"title" : "Настройки переменной цикла",
"description" : "Настройки переменной цикла",
"required" : [ "name", "start", "finish" ]
},
"body" : {
"type" : "array",
"items" : {
"type" : "string"
},
"title" : "Тело цикла",
"description" : "Перечисление названий последовательно выполняющихся шагов",
"minItems" : 1,
"examples" : [ "sleep" ]
}
}
},
"LoopVarConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки переменной цикла",
"description" : "Настройки переменной цикла",
"required" : [ "name", "start", "finish" ],
"properties" : {
"name" : {
"type" : "string",
"examples" : [ "var" ],
"title" : "Имя переменной"
},
"start" : {
"type" : [ "string", "integer" ],
"examples" : [ "startIndex" ],
"description" : "Выражение",
"format" : "expression",
"title" : "Начальное значение"
},
"finish" : {
"type" : [ "string", "integer" ],
"examples" : [ "finishIndex" ],
"description" : "Выражение",
"format" : "expression",
"title" : "Конечное значение"
},
"step" : {
"type" : [ "string", "integer" ],
"examples" : [ "1" ],
"description" : "Число, на которое будет увеличиваться переменной после каждого шага",
"format" : "expression",
"title" : "Шаг изменения переменной",
"default" : "1"
}
}
},
"StepMqConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки MQ-транспорта",
"description" : "Блок специфических настроек шагов тестирования для protocol=MQ шагов PUT | GET",
"properties" : {
"queue" : {
"type" : "string",
"examples" : [ "SYTESTER.STEPS", "SYTESTER.STEPS@ReplyTOQ@ReplyTOQManager" ],
"title" : "Очередь",
"description" : "Имя очереди для выполнения шага.\nМожет содержать следующие имена через разделительный символ @:\n1. Очередь для отправки\n2. Очередь для ответов (ReplyTOQ, будет записано в MQMD заголовок сообщения)\n3. Менеджер для ответа (ReplyToQManager, будет записано в MQMD заголовок сообщения)\nЕсли значение явно не задано и шаг PUT, то используется очередь request блока transport, если шаг GET - очередь response блока transport\n"
}
}
},
"StepKafkaConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки транспорта Kafka",
"description" : "Блок специфических настроек шагов тестирования для protocol=Kafka шагов PUT | GET | PUT_GET",
"properties" : {
"readThreads" : {
"type" : "integer",
"description" : "Число потоков для чтения ответов из топика. Каждый поток создаёт отдельный KafkaConsumer, Kafka делит партиции топика между ними и читает параллельно. Значение не должно превышать количество партиций топика. Если значение не задано - будет использоваться значение writeThreads.",
"title" : "Количество читающих потоков",
"default" : "1",
"examples" : [ "10" ]
}
}
},
"TpsLoaderConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки TPS-нагрузки",
"description" : "Настройки шага TPS-нагрузки. Обязательный параметр шага TPS_LOADER. В шаге с заданной длительностью выполняется другой шаг с частотой контролируемой настройкой TPS",
"required" : [ "workload" ],
"examples" : [ {
"tps" : {
"start" : 1,
"finish" : 10,
"increment" : {
"value" : 1,
"rate" : "3s"
}
},
"duration" : "30s",
"workload" : "http-put",
"threadCount" : "10",
"asyncMode" : true
} ],
"properties" : {
"tps" : {
"$ref" : "#/definitions/TpsConfig",
"title" : "Настройки TPS",
"description" : "Настройки интервала TPS",
"required" : [ "start" ]
},
"duration" : {
"type" : [ "string", "integer" ],
"description" : "Длительность выполнения TPS-нагрузки. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Длительность"
},
"workload" : {
"type" : "string",
"examples" : [ "step" ],
"description" : "Название выполняемого шага",
"title" : "Рабочая нагрузка"
},
"threadCount" : {
"type" : [ "string", "integer" ],
"default" : "1",
"examples" : [ "10" ],
"description" : "Количество потоков выполняющих нагрузку. По умолчанию нагрузка выполняется в 1 потоке. Влияет только на шаги с asyncMode = false.",
"format" : "expression",
"title" : "Количество потоков"
},
"frameSize" : {
"type" : "string",
"examples" : [ "5s" ]
},
"asyncMode" : {
"type" : [ "string", "integer" ],
"description" : "Параметр влияет на принцип генерации запросов. При значении параметра, равным true, запросы отправляются с заданной скоростью, независимо от того, получены ли ответы на предыдущие запросы (неблокирующий вызов). Иначе - каждый поток-генератор отправляет следующий запрос только после получения ответа на предыдущий (блокирующий вызов). По умолчанию true.",
"title" : "Переключатель модели подачи нагрузки",
"default" : "true",
"examples" : [ "false" ],
"format" : "expression"
},
"errorsToStop" : {
"type" : "integer",
"default" : 100,
"description" : "Максимальное количество ошибок при выполнении нагрузки, после которых шаг завершается.",
"title" : "Количество ошибок",
"examples" : [ "100" ]
},
"ignoreErrorsDuringWarmup" : {
"type" : [ "string", "integer" ],
"description" : "Длительность, во время которой не учитываются ошибки способные остановить нагрузку (`errorsToStop`). В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Отсрочка остановки по количеству ошибок"
}
}
},
"TpsConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки TPS",
"description" : "Настройки интервала TPS",
"required" : [ "start" ],
"properties" : {
"start" : {
"type" : [ "string", "integer" ],
"examples" : [ "100" ],
"description" : "Начальное количество запросов в секунду",
"format" : "expression",
"title" : "Начальный TPS"
},
"max" : {
"type" : [ "string", "integer" ],
"examples" : [ "100" ],
"description" : "Максимальное количество запросов в секунду",
"format" : "expression",
"title" : "Конечный TPS"
},
"stepSize" : {
"type" : [ "string", "integer" ],
"examples" : [ "100" ],
"description" : "Шаг увеличения нагрузки",
"format" : "expression",
"title" : "Значение инкремента",
"default" : "1"
},
"stepTime" : {
"type" : [ "string", "integer" ],
"description" : "Темп выполнения инкремента TPS. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага",
"format" : "expression",
"examples" : [ "10s" ],
"title" : "Темп",
"default" : "1s"
}
}
},
"StepObserver" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Наблюдатель шага",
"description" : "Наблюдатель, которые выполняет мониторинг определенного условия при работе шага тестирования",
"required" : [ "condition" ],
"properties" : {
"condition" : {
"type" : [ "string", "integer" ],
"examples" : [ "\"_steps['tps'].tps.current > 1000\"" ],
"description" : "Наблюдаемое условие шага",
"format" : "expression",
"title" : "Условие"
},
"action" : {
"type" : "string",
"examples" : [ "STOP" ],
"enum" : [ "NONE", "WARN", "STOP", "CONTINUE", "BREAK" ],
"description" : "STOP — остановка тестового плана,\nCONTINUE — переход на следующую итерацию текущего цикла,\nBREAK — завершение выполнения текущего цикла.\nЕсли поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.\nЗначения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению\n",
"title" : "Действие при выполнении условия"
}
}
},
"StepUpdater" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"output" : {
"type" : "string"
},
"type" : {
"type" : "string",
"enum" : [ "MAX", "MIN", "AVG", "LAST" ]
},
"expression" : {
"type" : "string"
}
}
},
"TimerConfig" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"output" : {
"type" : "string"
}
}
},
"CatchErrorConfig" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"expression" : {
"type" : "string"
}
}
},
"Object" : {
"type" : "object",
"additionalProperties" : false,
"properties" : { }
},
"Transport" : {
"type" : "object",
"additionalProperties" : false,
"description" : "Блок транспорта, описывающий параметры подключения для тестовых планов",
"title" : "Конфигурация транспорта",
"examples" : [ {
"name" : "transport1",
"protocol" : "HTTP",
"host" : "localhost",
"port" : 8080,
"request" : "/endpoint",
"http" : {
"method" : "GET"
}
} ],
"required" : [ "name", "protocol" ],
"properties" : {
"name" : {
"type" : "string",
"default" : "transport_name",
"examples" : [ "http-transport" ],
"description" : "Произвольное имя транспорта",
"title" : "Название транспорта"
},
"protocol" : {
"type" : "string",
"examples" : [ "HTTP" ],
"enum" : [ "HTTP", "GRPC", "MQ", "KAFKA", "ACTIVE_MQ", "POSTGRES", "ARTEMIS", "KUBEAPI" ],
"title" : "Протокол транспорта"
},
"host" : {
"type" : "string",
"examples" : [ "127.0.0.1", "sytester-https-stub", "http://sytester-https-stub:8080/endpoint", "https://sytester-https-stub/endpoint" ],
"description" : "IP адрес или доменное имя хоста для подключения. Для протокола HTTP может быть полным url. Обязательный параметр, кроме type=STUB",
"title" : "Хост транспорта"
},
"port" : {
"type" : "integer",
"examples" : [ "6101" ],
"description" : "Для type=STUB и protocol=HTTP порт задается через тэг ConfigMap stubHttpDefaultServerPort, см. Руководство по установке",
"title" : "Порт подключения"
},
"request" : {
"type" : "string",
"examples" : [ "topic_rq", "/request", "/request/${var}?param=${param}" ],
"description" : "Варианты использования:\n1. Для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS - имя очереди\n2. Для protocol=GRPC - имя метода\n3. Для protocol=HTTP - конечная точка\nОбязательный параметр для type=GENERATOR (кроме HTTP протокола)\nДля type=STUB с protocol=HTTP можно задавать шаблонные конечные точки с переменными в path и query params\n",
"title" : "Запрос"
},
"response" : {
"type" : "string",
"examples" : [ "topic_rs" ],
"description" : "Для type=GENERATOR/STEPS - это необязательный параметр, очередь/топик для ответа, указывается когда нужна корреляция ответов с запросами для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS (для синхронных сценариев). В других случаях не заполняется.\nДля type=STUB - это обязательный параметр, очередь/топик для ответа.\n",
"title" : "Ответ"
},
"login" : {
"type" : "string",
"examples" : [ "login" ],
"description" : "Логин, при необходимости авторизации для подключения к серверу",
"title" : "Логин"
},
"password" : {
"type" : "string",
"examples" : [ "password" ],
"description" : "Пароль, при необходимости авторизации для подключения к серверу",
"title" : "Пароль"
},
"ssl" : {
"$ref" : "#/definitions/TransportSslConfig"
},
"http" : {
"$ref" : "#/definitions/TransportHttpConfig",
"title" : "Настройки HTTP",
"description" : "Блок специфических настроек тестового плана при protocol=HTTP"
},
"mq" : {
"$ref" : "#/definitions/TransportMqConfig",
"title" : "Настройки MQ",
"description" : "Блок специфических настроек тестового плана при protocol=MQ|ACTIVE_MQ|ARTEMIS"
},
"kafka" : {
"$ref" : "#/definitions/TransportKafkaConfig",
"title" : "Настройки KAFKA",
"description" : "Блок специфических настроек тестового плана при protocol=KAFKA"
},
"k8s" : {
"$ref" : "#/definitions/TransportK8sConfig",
"title" : "Настройки KUBEAPI",
"description" : "Блок специфических настроек тестового плана при protocol=KUBEAPI"
},
"postgres" : {
"$ref" : "#/definitions/TransportPostgresConfig",
"title" : "Настройки POSTGRES",
"description" : "Блок специфических настроек тестового плана при protocol=POSTGRES"
},
"encryption" : {
"$ref" : "#/definitions/TransportEncryptionConfig",
"description" : "Блок конфигурации шифрования/дешифрования данных для транспорта\npublicKeyPath - путь до сертификата, которым будет проведено шифрование\nprivateKeyPath - путь до приватного ключа, которым будет проведено дешифрование (также используется для подписи сообщения в функции jwtSignRS256)\nkeyId - идентификатор ключа, который будет добавлен в публичную часть шифрованного сообщения\n",
"title" : "Конфигурация шифрования данных"
},
"filter" : {
"type" : "string",
"examples" : [ "request.headers[\"recipientAgentName\"] == \"sber.support_platform.channel_agent\"", "jsonpath(request.body, \"$.result.status.state\") == \"completed\"" ],
"description" : "Фильтр определяет какие сообщения будет прочитаны потребителем (для синхронного генератора из топика response, для заглушки — request). Поддерживается только протокол KAFKA",
"title" : "Фильтр потребителя"
}
}
},
"TransportSslConfig" : {
"type" : "object",
"additionalProperties" : false,
"description" : "Блок настройка SSL-подключения",
"title" : "Настройки SSL",
"properties" : {
"caFile" : {
"type" : "string",
"examples" : [ "path" ],
"description" : "Путь до файла корневого сертификата (для JKS)",
"title" : "Файл CA"
},
"caPass" : {
"type" : "string",
"examples" : [ "password" ],
"description" : "Пароль к файлу доверенных ключей (для JKS)",
"title" : "Пароль CA"
},
"keyFile" : {
"type" : "string",
"examples" : [ "path" ],
"description" : "Путь до файла с клиентским хранилищем (для JKS и сертификатов)",
"title" : "Файл клиентского хранилища"
},
"keyPass" : {
"type" : "string",
"examples" : [ "password" ],
"description" : "Пароль к клиентскому хранилищу (для JKS)",
"title" : "Пароль клиентского хранилища"
},
"keyFilePass" : {
"type" : "string",
"examples" : [ "password" ],
"description" : "Пароль к файлу ключей шифрования (для JKS и одиночного сертификата)",
"title" : "Пароль к файлу ключей шифрования"
},
"certFile" : {
"type" : "string",
"examples" : [ "path" ],
"description" : "Файл клиентского сертификата (для одиночного сертификата)",
"title" : "Файл клиентского сертификата"
},
"chainFile" : {
"type" : "string",
"examples" : [ "path" ],
"description" : "Файл с цепочкой промежуточных CA сертификатов, подписавших клиентский/серверный сертификат (для CRT/PEM). Вместо цепочки может использоваться файл корневого сертификата.",
"title" : "Файл цепочки сертификатов"
},
"peerName" : {
"type" : "string",
"examples" : [ "MQ_CHANNEL" ],
"description" : "Идентификатор канала при подключении по SSL (для protocol=MQ)",
"title" : "Идентификатор канала"
}
}
},
"TransportHttpConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки HTTP",
"description" : "Блок специфических настроек тестового плана при protocol=HTTP",
"properties" : {
"method" : {
"type" : "string",
"default" : "POST",
"examples" : [ "GET" ],
"title" : "HTTP-метод"
}
}
},
"TransportMqConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки MQ",
"description" : "Блок специфических настроек тестового плана при protocol=MQ|ACTIVE_MQ|ARTEMIS",
"properties" : {
"queueManager" : {
"type" : "string",
"examples" : [ "MQ_MANAGER" ],
"description" : "Название менеджера очереди",
"title" : "Менеджер очереди"
},
"channel" : {
"type" : "string",
"examples" : [ "MQ_CHANNEL" ],
"description" : "Канал подключения",
"title" : "Канал"
}
}
},
"TransportKafkaConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки KAFKA",
"description" : "Блок специфических настроек тестового плана при protocol=KAFKA",
"properties" : {
"requestProperties" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
},
"description" : "Параметры продюсера Kafka. Название параметров и их описание доступно по ссылке: https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html",
"title" : "Свойства запроса"
},
"responseProperties" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
},
"description" : "Параметры консьюмера Kafka. Название параметров и их описание доступно по ссылке: https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html",
"title" : "Свойства ответа"
}
}
},
"TransportK8sConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки KUBEAPI",
"description" : "Блок специфических настроек тестового плана при protocol=KUBEAPI",
"properties" : {
"token" : {
"type" : "string",
"title" : "Токен аутентификации для доступа к Kubernetes API",
"description" : "Параметр определяет токен, используемый для выполнения аутентифицированных запросов к Kubernetes API (kube-apiserver).\nПоддерживаются следующие способы задания:\n 1. Значение JWT-токена в кодировке Base64URL (например: eyJhb...).\n 2. Путь к файлу с токеном в файловой системе пода (например, при использовании Secman).\n 3. Имя ключа, содержащего токен, в секрете Kubernetes.\n 4. Если параметр не задан, используется токен Service Account Kubernetes.",
"examples" : [ "eyJhb...", "/k8s/token", "token" ]
},
"namespace" : {
"type" : "string",
"default" : "default",
"examples" : [ "default" ],
"description" : "Название пространства имен в кластере Kubernetes",
"title" : "Неймспейс"
},
"connectionTimeout" : {
"description" : "Таймаут на подключение к Kubernetes. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Если не задавать, используется значение HTTP-клиента Fabric8 (10 секунд)",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Таймаут соединения"
},
"requestTimeout" : {
"description" : "Таймаут запросов чтения ресурсов Kubernetes. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Если не задавать, используется значение HTTP-клиента Fabric8 (10 секунд)",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Таймаут запросов"
},
"uploadRequestTimeout" : {
"description" : "Таймаут запросов загрузки ресурсов Kubernetes. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Если не задавать, используется значение HTTP-клиента Fabric8 (120 секунд)",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Таймаут запросов загрузки"
},
"certs" : {
"$ref" : "#/definitions/TransportCertsConfig",
"description" : "Сертификаты используемые для подключения к k8s",
"title" : "Сертификаты"
}
}
},
"TransportCertsConfig" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"caCert" : {
"type" : "string",
"examples" : [ "path_to_cert" ],
"description" : "Путь до файла корневого сертификата",
"title" : "Корневой сертификат"
},
"clientCertFile" : {
"type" : "string",
"examples" : [ "path_to_cert" ],
"description" : "Путь до файла клиентского сертификата",
"title" : "Клиентский сертификат"
},
"clientKeyFile" : {
"type" : "string",
"examples" : [ "path_to_key" ],
"description" : "Путь до файла c приватным ключом",
"title" : "Клиентский приватный ключ"
}
}
},
"TransportPostgresConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки POSTGRES",
"description" : "Блок специфических настроек тестового плана при protocol=POSTGRES",
"properties" : {
"maximumPoolSize" : {
"type" : "integer",
"examples" : [ "10" ],
"description" : "Максимальное количество подключений в пуле базы данных",
"title" : "Максимальное количество подключений"
},
"minimumIdle" : {
"type" : "integer",
"examples" : [ "5" ],
"description" : "Минимальное количество простоя соединений, которое поддерживает пул базы данных",
"title" : "Минимальное количество простоя соединений"
},
"connectionTimeout" : {
"type" : "integer",
"examples" : [ "30000" ],
"description" : "Время ожидания в пуле базы данных в мс",
"title" : "Время ожидания"
},
"maxLifetime" : {
"type" : "integer",
"examples" : [ "1800000" ],
"description" : "Максимальное время жизни подключения в пуле в мс",
"title" : "Максимальное время жизни"
},
"idleTimeout" : {
"type" : "integer",
"examples" : [ "600000" ],
"description" : "Время жизни подключения в пуле базы данных в мс",
"title" : "Время жизни подключения"
},
"limit" : {
"type" : "integer",
"examples" : [ "100" ],
"description" : "Ограничение количества возвращаемых строк",
"title" : "Ограничение количества возвращаемых строк"
}
}
},
"TransportEncryptionConfig" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"enabled" : {
"type" : "boolean",
"default" : false,
"description" : "Флаг включения шифрования данных при отправке и дешифрования при получении",
"title" : "Включить шифрование"
},
"publicKeyPath" : {
"type" : "string",
"examples" : [ "certs/crt.pem" ],
"description" : "Путь к файлу с публичным ключом (сертификатом) для шифрования данных",
"title" : "Путь к публичному ключу"
},
"privateKeyPath" : {
"type" : "string",
"examples" : [ "certs/key.pem" ],
"description" : "Путь к файлу с приватным ключом для дешифрования данных",
"title" : "Путь к приватному ключу"
},
"keyId" : {
"type" : "string",
"examples" : [ "key-123" ],
"description" : "Уникальный идентификатор ключа (опционально)",
"title" : "ID ключа"
}
},
"required" : [ "enabled" ]
},
"Testdata" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация тестовых данных",
"description" : "Блок тестовых данных, описывающий содержимое тестовых сообщений. Может содержать несколько тестовых данных, ключом для которых является тег name",
"required" : [ "name" ],
"examples" : [ {
"name" : "testdata1",
"body" : "{ \"text\": \"Hello world\" }",
"headers" : {
"Content-Type" : "application/json",
"Accept" : "application/json"
}
} ],
"properties" : {
"name" : {
"type" : "string",
"default" : "testdata_name",
"examples" : [ "testdata_name" ],
"description" : "Произвольное имя тестовых данных",
"title" : "Имя тестовых данных"
},
"body" : {
"type" : "string",
"examples" : [ "\"{'request': '${rq_uid}'}\"" ],
"description" : "Для protocol=MQ в качестве тела сообщения можно задать IBM MQ message, включающее MQMD и MQRFH2 заголовки.\nВ теле сообщения в значении тегов можно использовать переменные.\nОбязательный параметр при type=GENERATOR.\nНеобязательный параметр при type=STUB, по умолчанию ответом будет полученный запрос.\n",
"title" : "Тело сообщения"
},
"headers" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
},
"title" : "Заголовки тестовых данных",
"description" : "Блок, описывающий заголовки сообщения, задаются в виде key:value (key - название тега, value - значение)",
"examples" : [ "application/json" ]
},
"splitter" : {
"type" : "string",
"examples" : [ "\";\" " ],
"description" : "Особенность grpc streaming, разделитель для пакета сообщений",
"title" : "Разделитель"
},
"messageCompare" : {
"$ref" : "#/definitions/TestdataMessageCompare"
}
}
},
"TestdataMessageCompare" : {
"type" : "object",
"additionalProperties" : false,
"description" : "Применяется для type = STEPS.\nВ данном блоке задается эталон заголовка и тела сообщения для их сравнения с полученными после выполнения шага.\nПроверка может быть настроена в следующих вариантах:\n1. steps[].type=GET (получение сообщения на шаге) при protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS|HTTP\n2. steps[].type=PUT (отправка сообщения на шаге) при protocol=HTTP|GRPC\n",
"title" : "Конфигурация сравнения сообщений",
"properties" : {
"compareHeaders" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
},
"title" : "Эталоны заголовков",
"description" : "Задается эталон заголовка в формате key:value. Допустима проверка множества заголовков, каждый задается отдельным выражением key:value. Если эталон задан, то отсутствие какого-либо из перечисленных эталонных заголовков в полученном сообщении или обнаружение расхождения приведет к остановке тестового плана",
"examples" : [ "some-value" ]
},
"compareBody" : {
"type" : "string",
"title" : "Эталон сообщения",
"description" : "Расхождение с полученным сообщением приведет к остановке тестового плана",
"examples" : [ "${rq_uid} " ]
},
"ignoreBodyTags" : {
"type" : "string",
"title" : "Игнорируемые теги",
"description" : "Перечисление тегов полученного сообщения для которых не будет производиться сравнение с эталоном тела сообщения. Применяется для сообщений в формате XML или JSON.",
"examples" : [ "['RqUID']" ]
}
}
},
"MetricsConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация метрик",
"properties" : {
"sendMetrics" : {
"$ref" : "#/definitions/SendMetricsConfig",
"title" : "Настройки отправки метрик",
"description" : "Блок настройки метрик для push модели. Используется для отправки метрик в kafka либо на любой outputs, который поддерживается fluent-bit (для построения расширенных отчетов, например в Grafana)"
},
"getMetrics" : {
"$ref" : "#/definitions/MonitoringConfig",
"title" : "Настройки мониторинга",
"description" : "Настройки мониторинга метрик во время выполнения тестового плана",
"required" : [ "values" ]
}
}
},
"SendMetricsConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки отправки метрик",
"description" : "Блок настройки метрик для push модели. Используется для отправки метрик в kafka либо на любой outputs, который поддерживается fluent-bit (для построения расширенных отчетов, например в Grafana)",
"properties" : {
"metricsServiceName" : {
"type" : "string",
"examples" : [ "your_service" ],
"title" : "Название сервиса метрик",
"description" : "Возможность задать имя метрики. Применяется при type=GENERATOR|STUB. Значение по умолчанию testplan-name."
},
"type" : {
"type" : "array",
"items" : {
"type" : "string",
"enum" : [ "PUSH", "PULL" ]
},
"examples" : [ "PUSH" ],
"title" : "Тип метрик",
"description" : "Тип метрик с которыми будет работать тестовый план - Pull метрики (формат Prometheus) или Push метрики (формат Kafka)."
}
}
},
"MonitoringConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Настройки мониторинга",
"description" : "Настройки мониторинга метрик во время выполнения тестового плана",
"required" : [ "values" ],
"properties" : {
"values" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/Metric"
},
"title" : "Метрики мониторинга",
"minItems" : 1
},
"conditionRules" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/ConditionRule"
},
"title" : "Правила проверки метрик"
},
"source" : {
"$ref" : "#/definitions/MetricSourceConfig",
"title" : "Источник метрик",
"required" : [ "transport" ]
}
}
},
"Metric" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Метрика мониторинга",
"properties" : {
"type" : {
"type" : "string",
"enum" : [ "PROMETHEUS", "K8S" ],
"description" : "PROMETHEUS - метрика из Prometheus\nK8S - метрика Kubernetes-приложения (RAM, CPU)\n",
"title" : "Тип метрики"
},
"alias" : {
"type" : "string",
"examples" : [ "CPU" ],
"title" : "Название метрики"
},
"query" : {
"type" : "string",
"examples" : [ "rate(process_cpu_seconds_total[1m])" ],
"description" : "PromQL-запрос для получения PROMETHEUS-метрики.\nПоддерживаются только запросы с типом результата vector, если возвращается несколько значений, то используется первый элемент\n",
"title" : "Запрос PROMETHEUS-метрики"
},
"period" : {
"description" : "Периодичность запроса метрики. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"examples" : [ "5h35m10s" ],
"title" : "Периодичность запроса метрики",
"default" : "10s"
},
"deployment" : {
"type" : "string",
"title" : "Имя K8S-deployment"
},
"container" : {
"type" : "string",
"description" : "Имя контейнера K8S-pod, по которому собирается метрика. Если не задано, метрика суммируется по всем контейнерам",
"title" : "Имя контейнера"
},
"k8sMetricType" : {
"type" : "string",
"enum" : [ "CPU", "MEMORY" ],
"title" : "Тип K8S-метрики"
},
"source" : {
"type" : "string"
}
}
},
"ConditionRule" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Правило проверки метрик",
"description" : "Правило проверки метрик",
"required" : [ "condition" ],
"properties" : {
"condition" : {
"type" : "string",
"title" : "Условие",
"description" : "Условие срабатывания (использует alias метрики с математическим выражением)",
"examples" : [ "CPU > 0.9 && RAM > 200" ]
},
"action" : {
"type" : "string",
"enum" : [ "NONE", "WARN", "STOP", "CONTINUE", "BREAK" ],
"examples" : [ "STOP" ],
"description" : "Действие при выполнении условия:\nSTOP — остановка тестового плана,\nCONTINUE — переход на следующую итерацию текущего цикла,\nBREAK — завершение выполнения текущего цикла.\nЕсли поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.\nЗначения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению\n",
"title" : "Действие"
},
"pendingPeriod" : {
"examples" : [ "5h35m10s" ],
"description" : " Время, в течение которого условие должно выполняться, чтобы сработало action. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. По умолчанию фиксируется первое выполнение условия",
"format" : "1d2h3m4s5ms",
"type" : [ "string", "integer" ],
"title" : "Период ожидания"
}
}
},
"MetricSourceConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Источник метрик",
"required" : [ "transport" ],
"properties" : {
"transport" : {
"type" : "string",
"description" : "Ссылка на транспорт, где сконфигурирован источник метрик",
"title" : "Транспорт мониторинга",
"examples" : [ "prometheus-transport" ]
}
}
},
"ReportConfig" : {
"type" : "object",
"additionalProperties" : false,
"description" : "Блок настройки формирования автоматических отчетов по результатам тестирования. Отчет будет доступен в zip архиве по кнопке скачать на странице отчета тестового плана",
"title" : "Конфигурация формирования автоматического отчета",
"properties" : {
"create" : {
"type" : "boolean",
"description" : "true - запустить создание отчета после завершение тестового плана, false - не запускать",
"title" : "Флаг формирования",
"examples" : [ "true" ]
},
"git" : {
"$ref" : "#/definitions/GitConfig",
"description" : "Url для выкладки отчета в git",
"examples" : [ "url" ]
},
"grafana" : {
"$ref" : "#/definitions/GrafanaConfig",
"title" : "Конфигурация Grafana",
"description" : "Блок настроек интеграции с grafana для добавления дашбордов в отчеты",
"required" : [ "dashboards" ]
},
"k8s" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/ReportK8sConfig"
},
"description" : "Список выгружаемых ресурсов (Pod, Deployment, ConfigMap, ...)",
"title" : "Список k8s-конфигураций"
},
"info" : {
"$ref" : "#/definitions/InfoConfig",
"title" : "Дополнительная информация",
"description" : "Блок определения дополнительной информации о тесте",
"required" : [ "component", "release", "type" ],
"examples" : [ {
"component" : "polm",
"release" : "5.4",
"type" : "max"
} ]
}
}
},
"GitConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация Git",
"properties" : {
"url" : {
"type" : "string",
"title" : "URL Git"
}
}
},
"GrafanaConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация Grafana",
"description" : "Блок настроек интеграции с grafana для добавления дашбордов в отчеты",
"required" : [ "dashboards" ],
"properties" : {
"dashboards" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/DashboardConfig"
},
"description" : "Список дашбордов, которые необходимо добавить в отчет",
"title" : "Дашборды"
}
}
},
"DashboardConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация дашборда",
"description" : "Конфигурация дашборда, который необходимо добавить в шаблон",
"required" : [ "name", "url" ],
"properties" : {
"name" : {
"type" : "string",
"description" : "Имя дашборда, под которым он будет отображаться в отчете",
"title" : "Имя дашборда"
},
"url" : {
"type" : "string",
"description" : "URL адрес дашборда, который необходимо выгрузить в отчет.\nДоступны следующие переменные:\n* ${startTimeStamp} - начальное время исполнения тестового плана. Обязательный параметр для автоматического формирования промежутка времени, когда выполнялось тестирование\n* ${endTimeStamp} - конечное время исполнения тестового плана. Обязательный параметр для автоматического формирования промежутка времени, когда выполнялось тестирование\n* ${metricsServiceName} - metricsServiceName, указанный в тестовом плане в блоке metrics. Необязательный параметр\n* ${podNames} - список подов, по которым выгружать графики. Для каждого пода, указанного в списке подов podNames, будет выгружен отдельный график\nИспользуется для скачивания нескольких отдельных графиков для одного дашборда, но с разными значения podName\n",
"title" : "Grafana URL",
"examples" : [ "http://vm-ssm-sy-dapp-253.vdc04.sy.dev.sbt:30763/d/sHE-zNzWz/sytester?orgId=1&from=${startTimeStamp}&to=${endTimeStamp}&var-service=${metricsServiceName}&width=3000&height=4000&autofitpanels", "http://vm-ssm-sy-dapp-253.vdc04.sy.dev.sbt:30763/d/pod/kubernetes-compute-resources-pod?orgId=1&var-datasource=prometheus-gatm&var-cluster=http:%2F%2Fvm-ssm-sy-dapp-252.vdc04.sy.dev.sbt%2F%2F&var-namespace=syte-nt&var-pod=${podNames}&var-displayPodLimitRequest=and&var-setMemoryPercentage=None&var-setCPUPercentage=None&from=${startTimeStamp}&to=${endTimeStamp}&width=3000&height=4000&autofitpanels" ]
},
"type" : {
"type" : "string",
"enum" : [ "SYTESTER", "UTILIZATION" ],
"title" : "Тип дашборда",
"description" : "* SYTESTER - стандартный дашборд sytester с графиком подачи нагрузки (tps) и latency\n* UTILIZATION - дашборд утилизации\nЕсли указан без параметра podNames, то будет выгружена утилизация по подам sytester, на которых исполнялся тестовый план.\nЕсли указан с параметром podNames, то будет выгружена утилизация по подам, которые указаны в списке podNames\n"
},
"podNames" : {
"type" : "array",
"items" : {
"type" : "string"
},
"description" : "Список подов, для каждого из которых будет выгружен график grafana при type=UTILIZATION. По умолчанию sytester сам определяет список подов, на которых исполнялся тестовый план. Поддерживаются регулярные выражения",
"title" : "Список подов"
}
}
},
"ReportK8sConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация k8s",
"description" : "Конфигурация выгрузки k8s-ресурсов",
"required" : [ "resources", "transport" ],
"properties" : {
"resources" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/ResourceConfig"
},
"title" : "Список ресурсов"
},
"transport" : {
"type" : "string",
"description" : "Имя транспорта k8s, который использовать для доступа к кластеру k8s для скачивания yaml артефактов",
"title" : "Транспорт"
}
}
},
"ResourceConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Выгружаемый ресурс",
"description" : "Конфигурация выгрузки k8s-ресурса. Доступна выгрузка либо по имени (блок name), либо по меткам (блок labelSelector)",
"properties" : {
"name" : {
"type" : "string",
"title" : "Имя ресурса"
},
"labelSelector" : {
"type" : "object",
"additionalProperties" : {
"type" : "string"
},
"title" : "Селектор по меткам"
},
"resourceType" : {
"$ref" : "#/definitions/ResourceType",
"title" : "Тип ресурса",
"description" : "Тип k8s-ресурса",
"required" : [ "apiVersion", "kind" ]
}
}
},
"InfoConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Дополнительная информация",
"description" : "Блок определения дополнительной информации о тесте",
"required" : [ "component", "release", "type" ],
"examples" : [ {
"component" : "polm",
"release" : "5.4",
"type" : "max"
} ],
"properties" : {
"component" : {
"type" : "string",
"description" : "Идентификатор тестируемого компонента",
"title" : "Компонент"
},
"release" : {
"type" : "string",
"description" : "Номер релиза",
"title" : "Релиз"
},
"type" : {
"type" : "string",
"description" : "Тип теста, например max - поиск максимума",
"title" : "Тип тестирования"
},
"comparedReleases" : {
"type" : "array",
"items" : {
"type" : "string"
},
"description" : "Список релизов для сравнительного отчета. Если в блоке k8s указаны Pod'ы, то будет построена сравнительная таблица по ресурсам контейнеров",
"title" : "Сравниваемые релизы"
}
}
},
"ServiceConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация тестируемого сервиса",
"properties" : {
"k8s" : {
"$ref" : "#/definitions/K8sProps",
"title" : "Конфигурация K8S-сервиса"
},
"openapi" : {
"title" : "OpenAPI-схема тестируемого сервиса"
},
"openapiEndpoint" : {
"type" : "string",
"title" : "OpenAPI-endpoint тестируемого сервиса"
},
"port" : {
"type" : "integer",
"title" : "Порт тестируемого сервиса"
}
}
},
"K8sProps" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"service" : {
"type" : "string"
},
"namespace" : {
"type" : "string"
}
}
},
"StrategiesConfig" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация стратегий",
"properties" : {
"startupTime" : {
"$ref" : "#/definitions/StartupTimeProps",
"title" : "Конфигурация стратегии измерения длительности запуска"
},
"searchMax" : {
"$ref" : "#/definitions/SearchMaxProps",
"title" : "Конфигурация стратегии поиска максимума"
},
"changeReplicas" : {
"$ref" : "#/definitions/ChangeReplicasProps",
"title" : "Конфигурация стратегии изменения количества реплик"
},
"changeMessageSize" : {
"$ref" : "#/definitions/ChangeMessageSizeProps",
"title" : "Конфигурация стратегии изменения размера сообщений"
},
"changeLimits" : {
"$ref" : "#/definitions/ChangeLimitsProps",
"title" : "Конфигурация стратегии изменения потребляемых ресурсов"
},
"stability" : {
"$ref" : "#/definitions/StabilityProps",
"title" : "Конфигурация стратегии теста стабильности"
}
}
},
"StartupTimeProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация стратегии измерения длительности запуска",
"properties" : {
"timeout" : {
"type" : "string",
"title" : "Таймаут запуска",
"description" : "Таймаут запуска тестируемого сервиса",
"default" : "1m"
}
}
},
"SearchMaxProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация стратегии поиска максимума",
"properties" : {
"resourcesProps" : {
"$ref" : "#/definitions/ResourcesProps",
"title" : "Конфигурация потребляемых ресурсов"
},
"avgLatency" : {
"type" : "string",
"title" : "Средняя latency",
"description" : "Ограничение средней latency тестируемого сервиса",
"default" : "3s"
},
"tps" : {
"$ref" : "#/definitions/TpsProps",
"title" : "Конфигурация нагрузки"
},
"duration" : {
"type" : "string",
"title" : "Длительность",
"description" : "Длительность стратегии поиска максимума",
"default" : "20m"
},
"errorPercentage" : {
"type" : "number",
"title" : "Процент ошибки",
"description" : "Ограничение на процент ошибок ответов тестируемого сервиса"
}
}
},
"ResourcesProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация потребляемых ресурсов",
"properties" : {
"cpuPercentage" : {
"type" : "number",
"title" : "Процент потребления CPU",
"default" : 0.9
},
"ramPercentage" : {
"type" : "number",
"title" : "Процент потребления RAM",
"default" : 0.9
}
}
},
"TpsProps" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"start" : {
"type" : "number",
"title" : "Начальная нагрузка",
"default" : 1.0
},
"finish" : {
"type" : "number",
"title" : "Конечная нагрузка",
"default" : 100.0
},
"stepSize" : {
"type" : "number",
"title" : "Шаг нагрузки",
"default" : 1.0
},
"stepTime" : {
"type" : "string",
"title" : "Длительность шага нагрузка",
"default" : "10s"
}
}
},
"ChangeReplicasProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация стратегии изменения количества реплик",
"properties" : {
"minReplicas" : {
"type" : "integer",
"title" : "Минимальное количество реплик",
"default" : 1
},
"maxReplicas" : {
"type" : "integer",
"title" : "Максимальное количество реплик",
"default" : 10
},
"replicasIncrement" : {
"type" : "integer",
"title" : "Шаг изменения количества реплик",
"default" : 1
},
"tps" : {
"type" : "string",
"title" : "Нагрузка",
"description" : "Размер TPS-нагрузки на тестируемый сервис",
"default" : "searchMax.tps * 0.8 * changeReplicas.currentReplicas"
}
}
},
"ChangeMessageSizeProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация стратегии изменения размера сообщений",
"properties" : {
"min" : {
"type" : "integer",
"title" : "Минимальное количество символов",
"default" : 0
},
"max" : {
"type" : "integer",
"title" : "Максимальное количество символов",
"default" : 1000000
},
"iterations" : {
"type" : "integer",
"title" : "Количество итераций",
"default" : 10
},
"tps" : {
"type" : "string",
"title" : "Нагрузка",
"description" : "Размер TPS-нагрузки на тестируемый сервис",
"default" : "searchMax.tps * 0.2"
}
}
},
"ChangeLimitsProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация стратегии изменения потребляемых ресурсов",
"properties" : {
"cpu" : {
"$ref" : "#/definitions/CpuProps",
"title" : "Конфигурация изменения CPU"
},
"ram" : {
"$ref" : "#/definitions/RamProps",
"title" : "Конфигурация изменения RAM"
},
"iterations" : {
"type" : "integer",
"title" : "Количество итераций",
"default" : 10
},
"tps" : {
"type" : "string",
"title" : "Нагрузка",
"description" : "Размер TPS-нагрузки на тестируемый сервис",
"default" : "searchMax.tps * 0.2"
},
"timeout" : {
"type" : "string",
"title" : "Таймаут запуска",
"description" : "Таймаут запуска тестируемого сервиса",
"default" : "10m"
}
}
},
"CpuProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация изменения CPU",
"properties" : {
"min" : {
"type" : "string",
"title" : "Минимальное значение CPU",
"default" : "baseCpu"
},
"max" : {
"type" : "string",
"title" : "Максимальное значение CPU",
"default" : "baseCpu * 5"
}
}
},
"RamProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация изменения RAM",
"properties" : {
"min" : {
"type" : "string",
"title" : "Минимальное значение RAM",
"default" : "baseRam"
},
"max" : {
"type" : "string",
"title" : "Максимальное значение RAM",
"default" : "baseRam * 5"
}
}
},
"StabilityProps" : {
"type" : "object",
"additionalProperties" : false,
"title" : "Конфигурация стратегии теста стабильности",
"properties" : {
"tps" : {
"type" : "string",
"title" : "Нагрузка",
"description" : "Размер TPS-нагрузки на тестируемый сервис",
"default" : "searchMax.tps * 0.8"
},
"duration" : {
"type" : "string",
"title" : "Длительность",
"description" : "Длительность стратегии теста стабильности",
"default" : "1d"
}
}
}
}
}
Схема конфигурации тестового плана SyTester
name: nt-http-gen
type: GENERATOR
generator:
tps:
start: 1
max: 50
testdata:
- data
transportIn:
- http
transport:
- name: http
protocol: HTTP
host: http://localhost:6100/endpoint
testdata:
- name: data
body: <rq><request>resp</request><rquid>${rq_uid}</rquid></rq>
name: nt-http-stub
type: STUB
stub:
type: RANDOM
transportIn:
- http
transport:
- name: http
protocol: HTTP
request: /endpoint
Версия схемы конфигурации тестового плана в формате SemVer 2.0.0. Если задана схема меньшая текущей (6.8.1-260928), то происходит автоматическое преобразование в текущую версию. Если версия больше, тестовый план отвергается
1.0.0
Произвольное название тестового плана
my-testplan
Имя пользователя владеющего тестовым планом
111
1000 символов
MQ-ШЛЮЗ. Проверка взаимодействия GetPrivateLoanDetailsRq от UFS в UCP
Уровень логирования при работе тестового плана
DEBUG
Отсутствие значения означает неограниченное время выполнения теста (до выполнения всех шагов в type = STEPS)
Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
1h
10m
1d12h
300
Поддерживаемые типы тестирования:
* GENERATOR - генерация нагрузки (генератор для Нагрузочного Тестирования)
* STUB - имитация ответов от стороннего сервиса
* STEPS - выполнение шагов тестирования
В зависимости от типа тестирования к атрибутам конфигурации назначаются дополнительные правила валидации:
* при type = GENERATOR обязательным становится блок generator
* при type = STUB обязательным становится блок stub
* при type = STEPS обязательным становится блок steps
GENERATOR
Блок специфических настроек тестового плана при type = GENERATOR
tps:
start: 10
max: 100
stepSize: 10
stepTime: 1m
testdata:
- my-testdata
transportIn:
- http-transport
Блок конфигурации транзакций, выполняемых для генерации нагрузки
Начальное количество транзакций в секунду
1
Максимальное количество транзакций в секунду
5
Интервал увеличения нагрузки. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Шаг увеличения нагрузки
1
Ссылка на транспорт из блока transport, задается как значение тега transport->name. Задает адрес (endpoint) на который генератор будет отсылать запросы
Массив должен содержать, как минимум 1 элементов
transport_name
[transport_name_1, transport_name_2]
Ссылка на транспорт из блока transport, задается как значение тега transport->name. Используется для асинхронных протоколов (protocol=MQ|ARTEMIS|ACTIVE_MQ). Задает адрес (endpoint) на котором генератор будет ожидать ответы
Массив должен содержать, как минимум 1 элементов
transport_name
[transport_name_1, transport_name_2]
Ссылка на тестовые данные из блока testdata, задается как значение тега testdata->name
Массив должен содержать, как минимум 1 элементов
testplan_data
Задает значение, которое будет подставлено вместо выражения ${rqIndex()} в тестовых данных, привязанных к тестовому плану. Является автоинкрементным счетчиком. Используется вместе с maxRequestIndex
1
Задает значение счетчика запросов, по достижении которого работа тестового плана будет прекращена. Используется вместе с startRequestIndex. Пример использования: при startRequestIndex = 1 и maxRequestIndex = 100 будет выполнено 100 транзакций, после этого тестовый план будет остановлен
10
Кол-во попыток совершить повторное подключение при разрыве соединения для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS. Работает вместе с retryDelayTime
1
Время между попытками переподключения. Работает вместе с retryCount. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Таймаут, в течение которого ожидается ответ. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Число статусов подряд в ответных сообщениях, не указанных в списке успешных, после которых тестплан принудительно завершается. Успешные статусы - значения в диапазоне 0-399 и значения из expectedStatus
100
Длительность, во время которой не учитываются ошибки способные остановить нагрузку (errorsToStop). Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Блок для настройки корреляции ответов с запросами. Применяется только для асинхронных протоколов (protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS) при синхронных сценариях"
Задает формат сообщения для поиска значения внутренней переменной rq_uid и statuscode (код ответа). Применяется вместе с rqUIDTag и/или statusCodeTag
Значение rq_uid аналогично со значениями параметра:
NONE - парсинг отключен
XPATH - формат XML. Ожидается выражение в формате xpath 1.0
JSONPATH - формат json. Ожидается выражение в формате JsonPath https://github.com/json-path/JsonPath
HEADER - формат не важен, rq_uid/statusCode заданы в заголовке сообщения (testdatas[].headers)
XMLINJSON - используется в GRPC сообщениях для того, чтобы распарсить xml сообщение из тега body сообщения в формате JSON
JSONINJSON - аналогично XMLIN_JSON только для JSON сообщений
["XPATH"]
Для type=GENERATOR/STEPS:
Задает выражение для извлечения значения корреляционной переменной (rq_uid или uuid) из сообщения-ответа.
Полученное значение используется для корреляции ответа с запросом.
В сообщении-запросе должна присутствовать переменная ${rq_uid} или ${uuid}.
Для type=STUB:
Задает выражение для извлечения значения корреляционной переменной (rq_uid или uuid) из сообщения-запроса.
Полученное значение подставляется в сообщение-ответ вместо переменной ${rq_uid} или ${uuid}.
Применяется вместе с messageParser=XPATH|JSONPATH|HEADER.
После извлечения значения автоматически определяется тип: rq_uid (формат 00[0-9a-f]{14}) или uuid (UUID v4 формат).
Если извлечённое значение содержит префикс/суффикс (например "prefix#${uuid}"), используйте correlationRegex для извлечения чистого значения.
$.contextId
//RQ2
X-Correlation-ID
Опциональное регулярное выражение с одной capture group для извлечения чистого корреляционного значения из строки с префиксом/суффиксом.
Если значение поля, извлечённое по correlationTag, содержит дополнительные символы (например "id#${uuid}"),
используйте correlationRegex для извлечения чистого значения rq_uid или uuid.
Выражение должно содержать ровно одну capture group (в круглых скобках), которая будет использована как корреляционное значение.
Примеры:
- "PREFIX#(.+)" - извлекает ID после разделителя #
- "PREFIX_(.+)_SUFFIX" - извлекает значение между префиксом и суффиксом
- "(.+)" - извлекает всё значение (эквивалентно отсутствию regex)
id#(.+)
channel_agent#([^>]+)
(.*)#id
[DEPRECATED] Используйте correlationTag вместо rqUIDTag.
Задает выражение для поиска значения внутренней переменной rq_uid.
Применяется вместе с messageParser=XPATH|JSONPATH|HEADER.
Сохраняется для обратной совместимости.
/custom2/RQ2/@Attr1
Используется для корреляции ответов с запросами, описание механизма корреляции приведено ниже. Возможные значения:
1. MEMORY_DB – время отправки каждого запроса сохраняется в локальный кеш (LOCAL_CACHE) и внешний кеш (Ignite/Radish/etcd). Также можно использовать алиас IGNITE.
Рекомендуется использовать для SyTester EE для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS
2. LOCAL_CACHE - время отправки каждого запроса сохраняется в локальный кеш.
Рекомендуется использовать:
1) для SyTester CE для всех сценариев
2) для SyTester EE:
2.1) для синхронных протоколов (protocol=HTTP|GRPC),
2.2) для асинхронных протоколов (protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS) когда тест работает на 1 поде генератора
2.3) во всех остальных случаях, когда не нужны метрики задержки и статусы транзакции (в этом случае поведение аналогично none)
3. NONE – время отправки каждого запроса не сохраняется.
Рекомендуется использовать для SyTester CE и EE, при необходимости отсылать запросы без ответов. Метрики не доступны
MEMORY_DB
Задает выражение для поиска значения status_code из ответа. Применяется вместе с messageParser.
Используется для:
1. Понимания статуса вызова: успешно/неуспешно (если не успешно, то увеличится errorsToStop)
2. Формирование метрики статуса транзакции
3. Установки http статуса ответного сообщения на http заглушке
Пример для messageParser=header: "statusCodeTag": "mystatus_code", при условии, что во входящем сообщении есть header c <mystatus_code>333</mystatus_code>, в этом случае statusCode = 333
204
Блок описания работы тестового плана в облаке. Задает характеристики, связанные с работой модулей SyTester в общем и для конкретных протоколов
Количество подов генераторов, на которых будет запущен тестовый план
Если параметр задан, то на поде (-ах) на которых запущен тест не будут запущены другие (следует применять для критичных тестов, для которых нужна полная изоляция)
Если параметр не задан (или задан 0), то на поде может быть запущено более одного теста с одинаковым значением protocol (но не более genMaxNT/max). genMaxNT определяется конкретным протоколом (задается в application.yml - см. Руководство по установке)
2
Количество потоков для отправки сообщений генератором.
Если значение не задано (или задан 0), то количество потоков рассчитывается как целая часть результата выражения: maxTPS/100
10
Блок описания режима периодической нагрузки.
В режиме периодической нагрузки генератор может находиться в режиме нагрузки или в режиме простоя.
Режим нагрузки, длительность конфигурируется параметром loadDuration:
- в режиме нагрузки генератор выдает нагрузку на тестируемый сервис в штатном режиме
- по истечению времени нагрузки, генератор переходит в режим простоя
Режим простоя, длительность конфигурируется параметром loadCooldown:
- в режиме простоя генератор не выполняет никаких действий. Тестплан переходит в статус paused
- по истечения времени простоя, генератор переходит в режим нагрузки. Тестплан переходит в статус, предшествующий статусу paused
Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Начальный режим работы.
Возможные значения:
- true - генератор запускается в режиме нагрузки и подает нагрузку сразу
- false - генератор запускается в режиме простоя и подает нагрузку спустя loadCooldown
true
Блок специфических настроек тестового плана при protocol=HTTP
Определяет максимальное количество одновременных исходящих соединений, которое может быть открыто к конкретному хосту. Когда все соединения заняты, новые запросы становятся в очередь и ожидают освобождения одного из них.
100
Список статусов, которые будут обозначены SyTester как успешные. Если значение не задано, то успешным считается 200 статус
500
Блок специфических настроек тестового плана при protocol=GRPC
Количество потоков для отправки сообщений генератором. Если значение не задано (или задан 0), то количество потоков рассчитывается как целая часть результата выражения: maxTPS/100
100
Блок специфических настроек тестового плана при protocol=MQ
Обрабатывает только те сообщения, где в заголовке usr присутствует указанный тег со значением
RQ
Максимальное число одновременных операций чтения из очереди входящих сообщений
5
Необходимость декодирования тела полученного сообщения из base64
true
Число подключений для очереди с ответами. Если значение не задано, то будет использоваться значение writeThreads
10
Блок специфических настроек тестового плана при protocol=Kafka
Число потоков для чтения ответов из топика. Каждый поток создаёт отдельный KafkaConsumer, Kafka делит партиции топика между ними и читает параллельно. Значение не должно превышать количество партиций топика. Если значение не задано - будет использоваться значение writeThreads.
10
Блок проверки задержки тестового плана на соблюдение целевого значения. Если проверка включена, то во время выполнения тестового плана будет производиться сравнение средней latency с целевым значением (latencyMs), При превышении, тестовый план будет остановлен. Время начала проверки регулируется параметром minRequests
Минимальное количество запросов, после преодоления которых начинается проверка. Параметр необходим для настройки достоверности средней latency. При начале тестирования средняя latency может существенно отличаться от достоверного значения, в связи с малой выборкой. Если значение 0, проверка начинается при первом запросе
10
Значение задержки, превышение которой приведет к остановке ТП. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Список наблюдателей, выполняющих мониторинг, при работе генератора
Наблюдатель описывает ожидаемое событие или состояние(условие) и соответствующую ему действие, которое инициируется при его наступлении.
Наблюдаемое условие генератора
_steps['tps'].tps.current > 15
STOP — остановка тестового плана,
CONTINUE — переход на следующую итерацию текущего цикла,
BREAK — завершение выполнения текущего цикла.
Если поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.
Значения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению
STOP
Блок специфических настроек тестового плана при type = STUB
type: RANDOM
transportIn:
- http
Режим работы:
* Random - заглушка вернет любой из заданных ответов для сервиса, заданного в тестовом плане
* Script - ответ формирует в выражении
* XSLT - заглушка вернет ответ, для которого заданный XSLT шаблон будет соответствовать телу пришедшего запроса
* Sequence - метод возвращает несколько ответов в очереди в ответ на 1 входное сообщение (только для protocol=MQ)
* STORED_XML - deprecated
RANDOM
Ссылка на транспорт из блока transport, задается как значение тега transport->name. Задает адрес (endpoint) на котором будут ожидаться запросы
Массив должен содержать, как минимум 1 элементов
transport_name
Ссылка на транспорт из блока transport, задается как значение тега transport->name. Задает адрес (endpoint) на который будут отсылаться ответы
transport_name
Ссылка на тестовые данные из блока testdata, задается как значение тега testdata->name. Если значение не задано, то заглушка будет работать в режиме echo-сервера (будет возвращать в ответе то, что пришло в запросе)
testplan_data
Script-заглушка формирует ответ в выражении, которое задается в атрибуте stub.script. Запись данных в формируемый ответ осуществляется с помощью переменной response.
"script": |
const result = {
name: "John"
};
response.body = json(result)
response.headers = {
"Content-Type": "application/json"
}
response.statusCode = 200
script: |-
const result = {
var: request.pathParams.var,
query: request.queryParams.param,
rawPath: request.path,
rawQuery: request.query
};
response.body = json(result)
response.headers = {
"Content-Type": "application/json"
}
response.statusCode = 200
Пауза, которая будет применена после прочтения сообщения перед отправкой ответа. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запросе
10s
Задает значение, которое будет подставлено вместо внутренней переменной ${rq_index} в тестовых данных, привязанных к тестовому плану
10
Задает значение счетчика запросов, по достижении которого работа тестового плана будет прекращена
10
Кол-во попыток совершить повторное подключение при разрыве соединения для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS. Работает вместе с retryDelayTime
10
Время между попытками переподключения. Работает вместе с retryCount. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Блок для настройки корреляции ответов с запросами. Применяется только для асинхронных протоколов (protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS) при синхронных сценариях"
Задает формат сообщения для поиска значения внутренней переменной rq_uid и statuscode (код ответа). Применяется вместе с rqUIDTag и/или statusCodeTag
Значение rq_uid аналогично со значениями параметра:
NONE - парсинг отключен
XPATH - формат XML. Ожидается выражение в формате xpath 1.0
JSONPATH - формат json. Ожидается выражение в формате JsonPath https://github.com/json-path/JsonPath
HEADER - формат не важен, rq_uid/statusCode заданы в заголовке сообщения (testdatas[].headers)
XMLINJSON - используется в GRPC сообщениях для того, чтобы распарсить xml сообщение из тега body сообщения в формате JSON
JSONINJSON - аналогично XMLIN_JSON только для JSON сообщений
["XPATH"]
Для type=GENERATOR/STEPS:
Задает выражение для извлечения значения корреляционной переменной (rq_uid или uuid) из сообщения-ответа.
Полученное значение используется для корреляции ответа с запросом.
В сообщении-запросе должна присутствовать переменная ${rq_uid} или ${uuid}.
Для type=STUB:
Задает выражение для извлечения значения корреляционной переменной (rq_uid или uuid) из сообщения-запроса.
Полученное значение подставляется в сообщение-ответ вместо переменной ${rq_uid} или ${uuid}.
Применяется вместе с messageParser=XPATH|JSONPATH|HEADER.
После извлечения значения автоматически определяется тип: rq_uid (формат 00[0-9a-f]{14}) или uuid (UUID v4 формат).
Если извлечённое значение содержит префикс/суффикс (например "prefix#${uuid}"), используйте correlationRegex для извлечения чистого значения.
$.contextId
//RQ2
X-Correlation-ID
Опциональное регулярное выражение с одной capture group для извлечения чистого корреляционного значения из строки с префиксом/суффиксом.
Если значение поля, извлечённое по correlationTag, содержит дополнительные символы (например "id#${uuid}"),
используйте correlationRegex для извлечения чистого значения rq_uid или uuid.
Выражение должно содержать ровно одну capture group (в круглых скобках), которая будет использована как корреляционное значение.
Примеры:
- "PREFIX#(.+)" - извлекает ID после разделителя #
- "PREFIX_(.+)_SUFFIX" - извлекает значение между префиксом и суффиксом
- "(.+)" - извлекает всё значение (эквивалентно отсутствию regex)
id#(.+)
channel_agent#([^>]+)
(.*)#id
[DEPRECATED] Используйте correlationTag вместо rqUIDTag.
Задает выражение для поиска значения внутренней переменной rq_uid.
Применяется вместе с messageParser=XPATH|JSONPATH|HEADER.
Сохраняется для обратной совместимости.
/custom2/RQ2/@Attr1
Используется для корреляции ответов с запросами, описание механизма корреляции приведено ниже. Возможные значения:
1. MEMORY_DB – время отправки каждого запроса сохраняется в локальный кеш (LOCAL_CACHE) и внешний кеш (Ignite/Radish/etcd). Также можно использовать алиас IGNITE.
Рекомендуется использовать для SyTester EE для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS
2. LOCAL_CACHE - время отправки каждого запроса сохраняется в локальный кеш.
Рекомендуется использовать:
1) для SyTester CE для всех сценариев
2) для SyTester EE:
2.1) для синхронных протоколов (protocol=HTTP|GRPC),
2.2) для асинхронных протоколов (protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS) когда тест работает на 1 поде генератора
2.3) во всех остальных случаях, когда не нужны метрики задержки и статусы транзакции (в этом случае поведение аналогично none)
3. NONE – время отправки каждого запроса не сохраняется.
Рекомендуется использовать для SyTester CE и EE, при необходимости отсылать запросы без ответов. Метрики не доступны
MEMORY_DB
Задает выражение для поиска значения status_code из ответа. Применяется вместе с messageParser.
Используется для:
1. Понимания статуса вызова: успешно/неуспешно (если не успешно, то увеличится errorsToStop)
2. Формирование метрики статуса транзакции
3. Установки http статуса ответного сообщения на http заглушке
Пример для messageParser=header: "statusCodeTag": "mystatus_code", при условии, что во входящем сообщении есть header c <mystatus_code>333</mystatus_code>, в этом случае statusCode = 333
204
Блок описания работы тестового плана в облаке. Задает характеристики, связанные с работой модулей SyTester в общем и для конкретных протоколов
Количество подов заглушек
Если protocol=HTTP|GRPC параметр не учитывается и заглушка будет запущена на всех работающих подах
Если параметр задан, то на поде (-ах) на которых запущен тест не будут запущены другие (следует применять для критичных тестов, для которых нужна полная изоляция)
Если параметр не задан (или задан 0), то на поде может быть запущено более одного теста с одинаковым значением protocol (но не более genMaxNT/max). genMaxNT определяется конкретным протоколом (задается в application.yml - см. Руководство по установке)
2
Блок, определяющий настройки работы с очередями
FROM_INCOMING_MESSAGE - заглушка отвечает по Reply, значения ReplyQ/ReplyQM берутся из запроса
FROM_TESTPLAN - заглушка отправляет ответ в очередь/менеджер по списку транспортов, указанных в теге transportOut
FROM_INCOMING_MESSAGE
Обрабатывает только те сообщения, где в заголовке usr присутствует указанный тег со значением
selectorFilter
Максимальное число одновременных операций чтения из очереди входящих сообщений
5
Необходимость декодирования тела полученного сообщения из base64
true
Число подключений для очереди входящих запросов. Если значение не задано, то будет использоваться рассчитано исходя из соотношения: 1 поток - 20 тпс
10
Блок, определяющий настройки работы с Kafka
Число потоков для чтения входящих сообщений из топика. Каждый поток создаёт отдельный KafkaConsumer, Kafka делит партиции топика между ними и читает параллельно. Значение не должно превышать количество партиций топика. Если значение не задано - используется 1 поток.
10
Блок специфических настроек тестового плана при type = STEPS
Список переменных, которые будут инициализированы при запуске тестового плана
Для задания типа переменной необходимо задать значение в определенный атрибут (для целочисленного - intValue и т.п.). Используется значение в порядке приоритета int > float > boolean > string
intValue: 12
name: intVar
stringValue: Hello world!
name: stringVar
countCm
10
1.0
True
abc
Название шага, который будет выполнен при запуске тестового плана
rest-step
Список шагов тестирования. Их порядок не важен
Массив должен содержать, как минимум 1 элементов
step_1
Описание шага
Выполняемое действие для шага:
PUT - отправка сообщения,
GET - получение сообщения (применимо для protocol=MQ|KAFKA и для HTTP с steps->ignite),
PUT_GET - синхронная работа по асинхронным протоколам
SLEEP - задержка,
K8S_APPLY - загрузка Kubernetes-ресурсов,
K8S_DELETE - удаление Kubernetes-ресурсов,
K8S_CHECK - проверка Kubernetes-ресурсов,
K8S_RESTART_PODS - перезагрузка подов,
K8S_AWAIT_CONDITION - ожидание условия для Kubernetes-ресурсов,
LOOP - итерации по заданной переменной с последовательным выполнением тела цикла,
SET_VAR - объявить переменную или изменить значение уже существующей переменной,
SERIAL - последовательно выполнить указанные шаги,
PARALLEL - параллельно выполнить указанные шаги,
TPS_LOADER - выполнение действия с заданным TPS,
EXPRESSION - выполнение выражения
GET
Уровень логирования при работе тестового плана
DEBUG
Ссылка на транспорт из блока transport, задается как значение тега transport->name
transport
Ссылка на тестовые данные из блока testdata, задается как значение тега testdata->name. При stepType=K8S_APPLY в качестве тестовых данных должен быть задан шаблон ресурсов
testdata
Таймаут, в течение которого ожидается ответ.
5s
Блок списка переменных, которые будут сформированы по результату получения ответа на данном шаге. Используются для шагов stepType=GET|PUT. Их можно использовать на последующих шагах в заголовках или теле сообщения. Пример использования: ${varName}
Формирование переменной на основе полученного ответа
Задает выражение для поиска значения varName в сообщении. Может содержать как простые строковые значения (type: header, const), так и xpath и jsonpath пути (type: xpath, jsonpath, jsonInJson, xmlInJson)
first_var
Имя переменной, в которую будет помещено значение после исполнения выражения path
var1
Задает формат сообщения для поиска переменной:
* XPATH - формат xml. Ожидается выражение в формате xpath 1.0
* JSONPATH - формат JSON. Ожидается выражение в формате JsonPath https://github.com/json-path/JsonPath
* XML_IN_JSON - используется в GRPC сообщениях для того, чтобы распарсить xml сообщение из тега body сообщения в формате JSON
* JSON_IN_JSON - аналогично XML_IN_JSON только для JSON сообщений
* HEADER - используется для того, чтобы извлечь значение заголовка, имя тега задается в "path"
* CONST - используется для задания константного значения. Значение задается в "path"
JSONPATH
Блок специфических настроек шагов тестирования для stepType = GET
Пауза, которая будет применена после выполнения шага. Используется для имитации задержки перед следующим шагом. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
Блок специфических настроек шагов тестирования для stepType = PUT
204
Блок специфических настроек шага PUT при protocol=HTTP (не влияет на работу других протоколов)
Определяет максимальное количество одновременных исходящих соединений, которое может быть открыто к конкретному хосту. Когда все соединения заняты, новые запросы становятся в очередь и ожидают освобождения одного из них. По умолчанию задается значение из глобальной конфигурации (100 соединений).
500
Используется для поддержки синхронного сценария для асинхронных вызовов HTTP путем получения ответа через Ignite
Логика работы:
1. Выполняется запрос в тестируемую АС по HTTP
2. Тестируемая АС отвечает (асинхронный ответ по HTTP) в заглушку
3. Заглушка помещает ответ в Ignite
4. Ответ читается из Ignite
Для настройки нужно:
1. В тестовом плане с type=STUB и protocol=HTTP установить requestTimeStorage=storefullrequest и задать rqUIDTag
2. На любом шаге c stepType=PUT в тело сообщения добавить внутреннюю переменную $rq_uid
3. На следующем шаге установить ignite=true иh
3.1 Если stepType=GET, можно настроить steps.timeoutMs.
Также на этом шаге появляется возможность работы с переменными (см. steps.vars) и/или валидации сообщения (см. testdatas[].messageCompare->compareHeaders/compareBody)
3.2 Если stepType=PUT, отправить сообщение (которое заданно в тестовом плане)
true
Блок для настройки корреляции ответов с запросами. Применяется только для асинхронных протоколов (protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS) при синхронных сценариях"
Задает формат сообщения для поиска значения внутренней переменной rq_uid и statuscode (код ответа). Применяется вместе с rqUIDTag и/или statusCodeTag
Значение rq_uid аналогично со значениями параметра:
NONE - парсинг отключен
XPATH - формат XML. Ожидается выражение в формате xpath 1.0
JSONPATH - формат json. Ожидается выражение в формате JsonPath https://github.com/json-path/JsonPath
HEADER - формат не важен, rq_uid/statusCode заданы в заголовке сообщения (testdatas[].headers)
XMLINJSON - используется в GRPC сообщениях для того, чтобы распарсить xml сообщение из тега body сообщения в формате JSON
JSONINJSON - аналогично XMLIN_JSON только для JSON сообщений
["XPATH"]
Для type=GENERATOR/STEPS:
Задает выражение для извлечения значения корреляционной переменной (rq_uid или uuid) из сообщения-ответа.
Полученное значение используется для корреляции ответа с запросом.
В сообщении-запросе должна присутствовать переменная ${rq_uid} или ${uuid}.
Для type=STUB:
Задает выражение для извлечения значения корреляционной переменной (rq_uid или uuid) из сообщения-запроса.
Полученное значение подставляется в сообщение-ответ вместо переменной ${rq_uid} или ${uuid}.
Применяется вместе с messageParser=XPATH|JSONPATH|HEADER.
После извлечения значения автоматически определяется тип: rq_uid (формат 00[0-9a-f]{14}) или uuid (UUID v4 формат).
Если извлечённое значение содержит префикс/суффикс (например "prefix#${uuid}"), используйте correlationRegex для извлечения чистого значения.
$.contextId
//RQ2
X-Correlation-ID
Опциональное регулярное выражение с одной capture group для извлечения чистого корреляционного значения из строки с префиксом/суффиксом.
Если значение поля, извлечённое по correlationTag, содержит дополнительные символы (например "id#${uuid}"),
используйте correlationRegex для извлечения чистого значения rq_uid или uuid.
Выражение должно содержать ровно одну capture group (в круглых скобках), которая будет использована как корреляционное значение.
Примеры:
- "PREFIX#(.+)" - извлекает ID после разделителя #
- "PREFIX_(.+)_SUFFIX" - извлекает значение между префиксом и суффиксом
- "(.+)" - извлекает всё значение (эквивалентно отсутствию regex)
id#(.+)
channel_agent#([^>]+)
(.*)#id
[DEPRECATED] Используйте correlationTag вместо rqUIDTag.
Задает выражение для поиска значения внутренней переменной rq_uid.
Применяется вместе с messageParser=XPATH|JSONPATH|HEADER.
Сохраняется для обратной совместимости.
/custom2/RQ2/@Attr1
Используется для корреляции ответов с запросами, описание механизма корреляции приведено ниже. Возможные значения:
1. MEMORY_DB – время отправки каждого запроса сохраняется в локальный кеш (LOCAL_CACHE) и внешний кеш (Ignite/Radish/etcd). Также можно использовать алиас IGNITE.
Рекомендуется использовать для SyTester EE для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS
2. LOCAL_CACHE - время отправки каждого запроса сохраняется в локальный кеш.
Рекомендуется использовать:
1) для SyTester CE для всех сценариев
2) для SyTester EE:
2.1) для синхронных протоколов (protocol=HTTP|GRPC),
2.2) для асинхронных протоколов (protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS) когда тест работает на 1 поде генератора
2.3) во всех остальных случаях, когда не нужны метрики задержки и статусы транзакции (в этом случае поведение аналогично none)
3. NONE – время отправки каждого запроса не сохраняется.
Рекомендуется использовать для SyTester CE и EE, при необходимости отсылать запросы без ответов. Метрики не доступны
MEMORY_DB
Задает выражение для поиска значения status_code из ответа. Применяется вместе с messageParser.
Используется для:
1. Понимания статуса вызова: успешно/неуспешно (если не успешно, то увеличится errorsToStop)
2. Формирование метрики статуса транзакции
3. Установки http статуса ответного сообщения на http заглушке
Пример для messageParser=header: "statusCodeTag": "mystatus_code", при условии, что во входящем сообщении есть header c <mystatus_code>333</mystatus_code>, в этом случае statusCode = 333
204
Длительность бездействия. Обязательный параметр шага SLEEP. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
Блок специфических настроек шагов тестирования для stepType = K8S_*
Количество выполнений загрузки ресурсов шага K8S_APPLY
countCm
Размер пакета постепенной работы с ресурсами. Используется для шага action=K8S_APPLY|K8S_DELETE|K8S_CHECK|K8S_AWAIT_CONDITION|K8S_CHANGE. Пример: если необходимо создать 25 ресурсов, то сначала будет создано 10, потом еще 10 и потом оставшиеся 5. При указании packageSize = 1 загрузка будет производиться строго по одному элементу, обеспечивая максимальную контролируемость процесса. Внутри одного пакета ресурсы обрабатываются последовательно.
10
Таймаут на обработку пакета. В случае если время обработки пакета будет превышено, оставшиеся ресурсы в пакете обработаны не будут. Используется для шага action=K8SAPPLY|K8SDELETE|K8SCHECK|K8SAWAITCONDITION|K8SCHANGE. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
Типы ресурсов для шагов K8S_DELETE, K8S_CHECK, K8S_CHANGE, K8S_AWAIT_CONDITION
Тип k8s-ресурса
apps/v1
ConfigMap
Селектор по меткам для шагов K8S_DELETE, K8S_CHECK, K8S_CHANGE, K8S_AWAIT_CONDITION, K8S_RESTART_PODS. Селектор меток состоит из нескольких пар key-value, ресурс должен обладать всеми указанными метками
app.kubernetes.io/managed-by: sytester
Все дополнительные атрибуты должны соответствовать следующей схеме
Тип: stringСелектор имени выполняет выборку строго по заданном имени ресурса
sleep-http-stub
С помощью атрибута limit можно ограничить количество выгружаемых ресурсов.
10
Конфигурации проверок шага K8S_CHECK
Проверяется соответствие значения полученного по Jsonpath ожидаемому
Псевдоним проверки, под котором она идентифицируется в отчете
CPU
JsonPath, по которому выполняется поиск проверяемого свойства ресурса
$.status.phase
Ожидаемый результат применения JsonPath
Running
Действие при невыполнении условия. STOP — остановка тестового плана,
CONTINUE — переход на следующую итерацию текущего цикла,
BREAK — завершение выполнения текущего цикла.
Если поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.
Значения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению
STOP
Конфигурации условий шага K8S_AWAIT_CONDITION
Проверяется соответствие значения полученного по Jsonpath ожидаемому в течение заданного таймаута
Псевдоним условие, под котором оно идентифицируется в отчете
CPU
JsonPath, по которому выполняется поиск проверяемого свойства ресурса
$.status.phase
Ожидаемый результат применения JsonPath
Running
Таймаут на ожидание выполнения условия. По умолчания ожидание происходит бесконечно. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
STOP — остановка тестового плана,
CONTINUE — переход на следующую итерацию текущего цикла,
BREAK — завершение выполнения текущего цикла.
Если поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.
Значения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению
STOP
Конфигурации изменений шага K8S_CHANGE
Изменение по jsonpath на заданное значение
Псевдоним изменения, под котором оно идентифицируется в отчете
CPU
JsonPath, по которому выполняется поиск изменяемого свойства ресурса
$.status.phase
Новое значение свойства
${newValue}
Ожидание отсутствия удаленных ресурсов в Kubernetes-кластере шага K8S_DELETE
Таймаут ожидания отсуствие ресурсов. По умолчания ожидание происходит бесконечно. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
STOP — остановка тестового плана,
CONTINUE — переход на следующую итерацию текущего цикла,
BREAK — завершение выполнения текущего цикла.
Если поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.
Значения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению
STOP
Конфигурация перезапуска подов шага K8SRESTARTPODS
Процент подов, которых необходимо перезапустить
10.0
Таймаут ожидания удаления пода перед его созданием при рестарте. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
Необходимость удаления созданных ресурсов шага K8S_APPLY после завершения тестового плана. По умолчанию очистка выключена
true
Настройки шага цикла. Обязательный параметр шага LOOP. Шаг LOOP выполняет итерации по заданной переменной (loop.var) и последовательно выполняет действия тела цикла (loop.body)
Настройки переменной цикла
var
Выражение
startIndex
Выражение
finishIndex
Число, на которое будет увеличиваться переменной после каждого шага
1
Перечисление названий последовательно выполняющихся шагов
Массив должен содержать, как минимум 1 элементов
sleep
Установка значения переменной. Обязательный параметр шага SET_VAR. Для задания типа переменной необходимо задать значение в определенный атрибут (для целочисленного - intValue и т.п.). Используется значение в порядке приоритета int > float > boolean > string
intValue: 12
name: intVar
stringValue: Hello world!
name: stringVar
countCm
10
1.0
True
abc
Список названий шагов, которые будут вызываться последовательно. Обязательный параметр шага SERIAL
Массив должен содержать, как минимум 1 элементов
post-step
Блок специфических настроек шагов тестирования для protocol=MQ шагов PUT | GET
Имя очереди для выполнения шага.
Может содержать следующие имена через разделительный символ @:
1. Очередь для отправки
2. Очередь для ответов (ReplyTOQ, будет записано в MQMD заголовок сообщения)
3. Менеджер для ответа (ReplyToQManager, будет записано в MQMD заголовок сообщения)
Если значение явно не задано и шаг PUT, то используется очередь request блока transport, если шаг GET - очередь response блока transport
SYTESTER.STEPS
SYTESTER.STEPS@ReplyTOQ@ReplyTOQManager
Блок специфических настроек шагов тестирования для protocol=Kafka шагов PUT | GET | PUT_GET
Число потоков для чтения ответов из топика. Каждый поток создаёт отдельный KafkaConsumer, Kafka делит партиции топика между ними и читает параллельно. Значение не должно превышать количество партиций топика. Если значение не задано - будет использоваться значение writeThreads.
10
Настройки шага TPS-нагрузки. Обязательный параметр шага TPS_LOADER. В шаге с заданной длительностью выполняется другой шаг с частотой контролируемой настройкой TPS
tps:
start: 1
finish: 10
increment:
value: 1
rate: 3s
duration: 30s
workload: http-put
threadCount: '10'
asyncMode: true
Настройки интервала TPS
Начальное количество запросов в секунду
100
Максимальное количество запросов в секунду
100
Шаг увеличения нагрузки
100
Темп выполнения инкремента TPS. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
Длительность выполнения TPS-нагрузки. В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
Название выполняемого шага
step
Количество потоков выполняющих нагрузку. По умолчанию нагрузка выполняется в 1 потоке. Влияет только на шаги с asyncMode = false.
10
5s
Параметр влияет на принцип генерации запросов. При значении параметра, равным true, запросы отправляются с заданной скоростью, независимо от того, получены ли ответы на предыдущие запросы (неблокирующий вызов). Иначе - каждый поток-генератор отправляет следующий запрос только после получения ответа на предыдущий (блокирующий вызов). По умолчанию true.
false
Максимальное количество ошибок при выполнении нагрузки, после которых шаг завершается.
100
Длительность, во время которой не учитываются ошибки способные остановить нагрузку (errorsToStop). В качестве значения можно задать как статичное, так и вычисляемое в выражении значение. Статичное значение или результат выражения должен удовлетворять формату: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Значение вычисляется при каждом запуске шага
10s
Опциональное действие при ошибке. Выполняемый шаг прерывается в любом случае.
STOP — остановка тестового плана,
CONTINUE — переход на следующую итерацию текущего цикла,
BREAK — завершение выполнения текущего цикла.
Если поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.
Значения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению
Список наблюдателей, выполняющих мониторинг, при работе шага
Наблюдатель, которые выполняет мониторинг определенного условия при работе шага тестирования
Наблюдаемое условие шага
"_steps['tps'].tps.current > 1000"
STOP — остановка тестового плана,
CONTINUE — переход на следующую итерацию текущего цикла,
BREAK — завершение выполнения текущего цикла.
Если поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.
Значения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению
STOP
Выражение выполняемое в шаге EXPRESSION
clean('http-request')
Объект для хранения пар ключ-значение клиента.
Содержимое объекта полностью контролируется пользователем и не влияет на работу тестового плана
metadata:
firstProperty: 10
secondProperty: string
Все дополнительные атрибуты должны соответствовать следующей схеме
Количество генераторов для распределенной работы тестового плана
1
Блок транспорта, описывающий параметры подключения для тестовых планов
name: transport1
protocol: HTTP
host: localhost
port: 8080
request: /endpoint
http:
method: GET
Произвольное имя транспорта
http-transport
HTTP
IP адрес или доменное имя хоста для подключения. Для протокола HTTP может быть полным url. Обязательный параметр, кроме type=STUB
127.0.0.1
sytester-https-stub
http://sytester-https-stub:8080/endpoint
https://sytester-https-stub/endpoint
Для type=STUB и protocol=HTTP порт задается через тэг ConfigMap stubHttpDefaultServerPort, см. Руководство по установке
6101
Варианты использования:
1. Для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS - имя очереди
2. Для protocol=GRPC - имя метода
3. Для protocol=HTTP - конечная точка
Обязательный параметр для type=GENERATOR (кроме HTTP протокола)
Для type=STUB с protocol=HTTP можно задавать шаблонные конечные точки с переменными в path и query params
topic_rq
/request
/request/${var}?param=${param}
Для type=GENERATOR/STEPS - это необязательный параметр, очередь/топик для ответа, указывается когда нужна корреляция ответов с запросами для protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS (для синхронных сценариев). В других случаях не заполняется.
Для type=STUB - это обязательный параметр, очередь/топик для ответа.
topic_rs
Логин, при необходимости авторизации для подключения к серверу
login
Пароль, при необходимости авторизации для подключения к серверу
password
Блок настройка SSL-подключения
Путь до файла корневого сертификата (для JKS)
path
Пароль к файлу доверенных ключей (для JKS)
password
Путь до файла с клиентским хранилищем (для JKS и сертификатов)
path
Пароль к клиентскому хранилищу (для JKS)
password
Пароль к файлу ключей шифрования (для JKS и одиночного сертификата)
password
Файл клиентского сертификата (для одиночного сертификата)
path
Файл с цепочкой промежуточных CA сертификатов, подписавших клиентский/серверный сертификат (для CRT/PEM). Вместо цепочки может использоваться файл корневого сертификата.
path
Идентификатор канала при подключении по SSL (для protocol=MQ)
MQ_CHANNEL
Блок специфических настроек тестового плана при protocol=HTTP
GET
Блок специфических настроек тестового плана при protocol=MQ|ACTIVE_MQ|ARTEMIS
Название менеджера очереди
MQ_MANAGER
Канал подключения
MQ_CHANNEL
Блок специфических настроек тестового плана при protocol=KAFKA
Параметры продюсера Kafka. Название параметров и их описание доступно по ссылке: https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html
Все дополнительные атрибуты должны соответствовать следующей схеме
Тип: stringПараметры консьюмера Kafka. Название параметров и их описание доступно по ссылке: https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html
Все дополнительные атрибуты должны соответствовать следующей схеме
Тип: stringБлок специфических настроек тестового плана при protocol=KUBEAPI
Параметр определяет токен, используемый для выполнения аутентифицированных запросов к Kubernetes API (kube-apiserver).
Поддерживаются следующие способы задания:
1. Значение JWT-токена в кодировке Base64URL (например: eyJhb...).
2. Путь к файлу с токеном в файловой системе пода (например, при использовании Secman).
3. Имя ключа, содержащего токен, в секрете Kubernetes.
4. Если параметр не задан, используется токен Service Account Kubernetes.
eyJhb...
/k8s/token
token
Название пространства имен в кластере Kubernetes
default
Таймаут на подключение к Kubernetes. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Если не задавать, используется значение HTTP-клиента Fabric8 (10 секунд)
5h35m10s
Таймаут запросов чтения ресурсов Kubernetes. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Если не задавать, используется значение HTTP-клиента Fabric8 (10 секунд)
5h35m10s
Таймаут запросов загрузки ресурсов Kubernetes. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. Если не задавать, используется значение HTTP-клиента Fabric8 (120 секунд)
5h35m10s
Сертификаты используемые для подключения к k8s
Путь до файла корневого сертификата
path_to_cert
Путь до файла клиентского сертификата
path_to_cert
Путь до файла c приватным ключом
path_to_key
Блок специфических настроек тестового плана при protocol=POSTGRES
Максимальное количество подключений в пуле базы данных
10
Минимальное количество простоя соединений, которое поддерживает пул базы данных
5
Время ожидания в пуле базы данных в мс
30000
Максимальное время жизни подключения в пуле в мс
1800000
Время жизни подключения в пуле базы данных в мс
600000
Ограничение количества возвращаемых строк
100
Блок конфигурации шифрования/дешифрования данных для транспорта
publicKeyPath - путь до сертификата, которым будет проведено шифрование
privateKeyPath - путь до приватного ключа, которым будет проведено дешифрование (также используется для подписи сообщения в функции jwtSignRS256)
keyId - идентификатор ключа, который будет добавлен в публичную часть шифрованного сообщения
Флаг включения шифрования данных при отправке и дешифрования при получении
Путь к файлу с публичным ключом (сертификатом) для шифрования данных
certs/crt.pem
Путь к файлу с приватным ключом для дешифрования данных
certs/key.pem
Уникальный идентификатор ключа (опционально)
key-123
Фильтр определяет какие сообщения будет прочитаны потребителем (для синхронного генератора из топика response, для заглушки — request). Поддерживается только протокол KAFKA
request.headers["recipientAgentName"] == "sber.support_platform.channel_agent"
jsonpath(request.body, "$.result.status.state") == "completed"
Блок тестовых данных, описывающий содержимое тестовых сообщений. Может содержать несколько тестовых данных, ключом для которых является тег name
name: testdata1
body: '{ "text": "Hello world" }'
headers:
Content-Type: application/json
Accept: application/json
Произвольное имя тестовых данных
testdata_name
Для protocol=MQ в качестве тела сообщения можно задать IBM MQ message, включающее MQMD и MQRFH2 заголовки.
В теле сообщения в значении тегов можно использовать переменные.
Обязательный параметр при type=GENERATOR.
Необязательный параметр при type=STUB, по умолчанию ответом будет полученный запрос.
"{'request': '${rq_uid}'}"
Блок, описывающий заголовки сообщения, задаются в виде key:value (key - название тега, value - значение)
application/json
Все дополнительные атрибуты должны соответствовать следующей схеме
Тип: stringОсобенность grpc streaming, разделитель для пакета сообщений
";"
Применяется для type = STEPS.
В данном блоке задается эталон заголовка и тела сообщения для их сравнения с полученными после выполнения шага.
Проверка может быть настроена в следующих вариантах:
1. steps[].type=GET (получение сообщения на шаге) при protocol=MQ|KAFKA|ACTIVE_MQ|ARTEMIS|HTTP
2. steps[].type=PUT (отправка сообщения на шаге) при protocol=HTTP|GRPC
Задается эталон заголовка в формате key:value. Допустима проверка множества заголовков, каждый задается отдельным выражением key:value. Если эталон задан, то отсутствие какого-либо из перечисленных эталонных заголовков в полученном сообщении или обнаружение расхождения приведет к остановке тестового плана
some-value
Все дополнительные атрибуты должны соответствовать следующей схеме
Тип: stringРасхождение с полученным сообщением приведет к остановке тестового плана
<messageResponse><RqUID>${rq_uid}</RqUID></messageResponse>
Перечисление тегов полученного сообщения для которых не будет производиться сравнение с эталоном тела сообщения. Применяется для сообщений в формате XML или JSON.
['RqUID']
Блок настройки метрик для push модели. Используется для отправки метрик в kafka либо на любой outputs, который поддерживается fluent-bit (для построения расширенных отчетов, например в Grafana)
Возможность задать имя метрики. Применяется при type=GENERATOR|STUB. Значение по умолчанию testplan-name.
your_service
Тип метрик с которыми будет работать тестовый план - Pull метрики (формат Prometheus) или Push метрики (формат Kafka).
PUSH
Настройки мониторинга метрик во время выполнения тестового плана
Массив должен содержать, как минимум 1 элементов
PROMETHEUS - метрика из Prometheus
K8S - метрика Kubernetes-приложения (RAM, CPU)
CPU
PromQL-запрос для получения PROMETHEUS-метрики.
Поддерживаются только запросы с типом результата vector, если возвращается несколько значений, то используется первый элемент
rate(process_cpu_seconds_total[1m])
Периодичность запроса метрики. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд
5h35m10s
Имя контейнера K8S-pod, по которому собирается метрика. Если не задано, метрика суммируется по всем контейнерам
Правило проверки метрик
Условие срабатывания (использует alias метрики с математическим выражением)
CPU > 0.9 && RAM > 200
Действие при выполнении условия:
STOP — остановка тестового плана,
CONTINUE — переход на следующую итерацию текущего цикла,
BREAK — завершение выполнения текущего цикла.
Если поле не указано, то текущий шаг пошагового тестирования (type=STEPS) автоматически завершается.
Значения NONE и WARN устаревшие. При этих значениях поведение аналогично незаданному значению
STOP
Время, в течение которого условие должно выполняться, чтобы сработало action. Поддерживаются только статичные значения. Формат: d — дни, h — часы, m — минуты по умолчанию, s — секунды, ms — миллисекунды. Целое число трактуется как количество секунд. По умолчанию фиксируется первое выполнение условия
5h35m10s
Ссылка на транспорт, где сконфигурирован источник метрик
prometheus-transport
Блок настройки формирования автоматических отчетов по результатам тестирования. Отчет будет доступен в zip архиве по кнопке скачать на странице отчета тестового плана
true - запустить создание отчета после завершение тестового плана, false - не запускать
true
Url для выкладки отчета в git
url
Блок настроек интеграции с grafana для добавления дашбордов в отчеты
Список дашбордов, которые необходимо добавить в отчет
Конфигурация дашборда, который необходимо добавить в шаблон
Имя дашборда, под которым он будет отображаться в отчете
URL адрес дашборда, который необходимо выгрузить в отчет.
Доступны следующие переменные:
* ${startTimeStamp} - начальное время исполнения тестового плана. Обязательный параметр для автоматического формирования промежутка времени, когда выполнялось тестирование
* ${endTimeStamp} - конечное время исполнения тестового плана. Обязательный параметр для автоматического формирования промежутка времени, когда выполнялось тестирование
* ${metricsServiceName} - metricsServiceName, указанный в тестовом плане в блоке metrics. Необязательный параметр
* ${podNames} - список подов, по которым выгружать графики. Для каждого пода, указанного в списке подов podNames, будет выгружен отдельный график
Используется для скачивания нескольких отдельных графиков для одного дашборда, но с разными значения podName
http://vm-ssm-sy-dapp-253.vdc04.sy.dev.sbt:30763/d/sHE-zNzWz/sytester?orgId=1&from=${startTimeStamp}&to=${endTimeStamp}&var-service=${metricsServiceName}&width=3000&height=4000&autofitpanels
http://vm-ssm-sy-dapp-253.vdc04.sy.dev.sbt:30763/d/pod/kubernetes-compute-resources-pod?orgId=1&var-datasource=prometheus-gatm&var-cluster=http:%2F%2Fvm-ssm-sy-dapp-252.vdc04.sy.dev.sbt%2F%2F&var-namespace=syte-nt&var-pod=${podNames}&var-displayPodLimitRequest=and&var-setMemoryPercentage=None&var-setCPUPercentage=None&from=${startTimeStamp}&to=${endTimeStamp}&width=3000&height=4000&autofitpanels
Список подов, для каждого из которых будет выгружен график grafana при type=UTILIZATION. По умолчанию sytester сам определяет список подов, на которых исполнялся тестовый план. Поддерживаются регулярные выражения
Список выгружаемых ресурсов (Pod, Deployment, ConfigMap, ...)
Конфигурация выгрузки k8s-ресурсов
Конфигурация выгрузки k8s-ресурса. Доступна выгрузка либо по имени (блок name), либо по меткам (блок labelSelector)
Все дополнительные атрибуты должны соответствовать следующей схеме
Тип: stringТип k8s-ресурса
apps/v1
ConfigMap
Имя транспорта k8s, который использовать для доступа к кластеру k8s для скачивания yaml артефактов
Блок определения дополнительной информации о тесте
component: polm
release: '5.4'
type: max
Идентификатор тестируемого компонента
Номер релиза
Тип теста, например max - поиск максимума
Список релизов для сравнительного отчета. Если в блоке k8s указаны Pod'ы, то будет построена сравнительная таблица по ресурсам контейнеров
Таймаут запуска тестируемого сервиса
Ограничение средней latency тестируемого сервиса
Длительность стратегии поиска максимума
Ограничение на процент ошибок ответов тестируемого сервиса
Размер TPS-нагрузки на тестируемый сервис
Размер TPS-нагрузки на тестируемый сервис
Размер TPS-нагрузки на тестируемый сервис
Таймаут запуска тестируемого сервиса
Размер TPS-нагрузки на тестируемый сервис
Длительность стратегии теста стабильности
Объект для хранения пар ключ-значение клиента.
Содержимое объекта полностью контролируется пользователем и не влияет на работу тестового плана
metadata:
firstProperty: 10
secondProperty: string
Все дополнительные атрибуты должны соответствовать следующей схеме