Similar presentations:
SyTester - облачный инструмент нагрузочного тестирования
1.
SyTesterОблачный инструмент нагрузочного
тестирования
00.00.2024
2.
История создания SyTester. Как было в Сбере до 2019 годаИнтеграционной сервисная шины на базе ПО IBM Message Broker
АС 2
АС 1
MQ
MQ
Enterprise Service Bus
АС 3
MQ
Основные протоколы/технологии: IBM MQ, HTTP, Kafka, JDBC
165 автоматизированных систем
2500 сервисов
9000 TPS
HTTP
Kafka
LoadRunner как основной инструмент НТ
АС 4
АС N
3.
История создания SyTester. Как стало после 2019-2021K8s/OSE
gRPC, Kafka,
Artemis MQ,
JDBC, HTTP
GW
Интеграционные сервисы переведены на Synapse - ИТ-платформу для
эффективной разработки и интеграции ПО
Основные протоколы/технологии: gRPC, Kafka, Artemis MQ, JDBC, HTTP
GW
GW
Команда нагрузочного тестирования начала использовать SyTester
Business
Logic
4.
Проблемы с проведением НТ до SyTesterПроблемы асинхронных протоколов
Проблема централизованного управления
Проблемы с высокой нагрузкой
Сложность вхождения для новых тестировщиков
5.
Архитектура SyTester. Enterprise EditionNamespace k8s/OSE
Управляющий
модуль
Ignite
PostgreSQL
Тестовые
планы, логи
id: timestamp
АС 1
АС 1
Модуль генератор
АС 17
АС 1
Модуль заглушка
User 1
User N
HTTP, GRPC, IBM MQ,
KAFKA, ACTIVE_MQ,
ARTEMIS
Тестируе
мая АС 1
HTTP, GRPC, IBM MQ,
KAFKA, ACTIVE_MQ,
ARTEMIS
Тестируе
мая АС N
6.
Архитектура SyTester. Community EditionНоутбук/Рабочая станция
Управляющий
модуль
Модуль генератор
HTTP, GRPC, IBM MQ,
KAFKA, ACTIVE_MQ,
ARTEMIS
Тестируе
мая АС 1
Модуль заглушка
HTTP, GRPC, IBM MQ,
KAFKA, ACTIVE_MQ,
ARTEMIS
Тестируе
мая АС N
7.
Варианты использования SyTesterЛокальный запуск (Community Edition)
• java -jar SyTester-1.0-exec.jar. GUI: http://localhost:8787/
Запуск в кластере Kubernetes/OpenShift (Enterprise Edition)
• GUI: http://hostname:8787/
8.
Пример GUI SyTester9.
Пример дашборда с метриками10.
Пример встроенного отчета11.
Основные возможности SyTesterНагрузочное тестирование
• В роли генератора
• В роли заглушки
• В роли генератора и заглушки
Интеграционное тестирование
• Выполнение тестовых сценариев по шагам с возможностью конфигурирования
Отладочное тестирование для сервисов в Service Mesh Istio (Remote Debug)
• Работает в режиме proxy с использованием функционала управления трафиком Virtual Service
12.
В каких случая применять SyTester?Нагрузочное тестирование интеграционных сервисов (сервисы интеграционных шин либо микросервисы)
• синхронных сценариев с использованием асинхронных протоколов
• синхронных сценарием с использованием синхронных протоколов
• асинхронных сценариев
Нагрузочное тестирование веб-приложений, монолитных АС
Интеграционное тестирование сложных сценариев и отладка микросервсов в кластере
Когда нужен масштабируемый облачный инструмент НТ, но в целях безопасности кластера k8s/OSE располагаются в
локальной сети предприятия
13.
Поддерживаемые протоколы и технологии SyTesterIBM MQ
+ SSL
Active MQ
+SSL
Artemis
MQ
+SSL
gRPC
+ SSL
Rest
+ SSL
Kafka
+ SSL
14.
НТ для IBM MQ1. Selectors
2. ReplyToQ и ReplyToQMgr
3. Message expiry
15.
Ключевые особенности SyTester CE и EE1. API для CI/CD
2. Кроссплатформенность
3. Генератор + заглушка с задержками
4. GUI: создание + конфигурирование + мониторинг
5. Метрики из коробки: имя сервиса, длительность транзакции, статус транзакции + встроенный мониторинг
16.
Ключевые особенности SyTester EE1. Масштабирование
2. Корреляция
3. Ролевая модель
4. Единая точка мониторинга
5. Интеграционное тестирование и работа в режиме proxy
17.
Безопасность (для Enterprise Edition)1. Интеграция с Platform V KCSE KeyCloak.SE и аналогом Keycloak (идентификации и аутентификации пользователей)
2. Интеграция с Platform V Secret Management и аналогом SecMan (хранение секретов)
3. Интеграция с Platform V Audit SE (аудит событий)
18.
Основные параметры для тестирования для CE и EE1. Длительность теста + online корректировка
2. TPS: постоянный, лесенкой, вариативный + online корректировка
3. Метрики на генераторе и заглушке
4. Логи online и offline
5. Остановка нагрузки после заданного количества ошибок
6. Настройка ответов для заглушки
7. Возможность задавать количество попыток подключения для IBM MQ, Kafka, Artemis MQ, Active MQ ??
19.
Тонкости настройки SyTester1. logLevel – детализация логирования работы генератора и заглушки. Когда ТП отлажен, рекомендуется использовать
значение ERROR, в этом случае в логи пишутся только ошибки.
2. writeThreads - для всех протоколов. Задает количество виртуальных пользователей для всех протоколов (для MQ –
новые конекты к серверу MQ, для REST – новые сессии к рест серверу) + пепреименовать
Задает число потоков для отправки запросов генератором. Изменяя параметр, в зависимости от кол-ва ядер
процессора/процессоров, можно добиться большей производительности генератора.
1. maxConnections – используется только для REST. Задает максимальное число соединений. Позволяет для REST увеличить
производительность.
2. Если оба парметра по дефолту – достигается макс производительность для достижения требуемого тпс. Чтобы задать
точное кол-во нужно задать writeThreads (в коде в этом случае задать maxConnections =1)
20.
Сравнение основных инструментов НТНа каком языке написан
SyTester
Apache JMeter
Java
Java
Apache License 2.0
Тип лицензии
Возможность запуска в
облаке
Возможность локального
запуска
Единая точка контроля
запущенных тестов
SaaS
(K8s/OpenShift)
Проприетарное ПО (В РФ официальный
сайт не доступен)
SaaS
Yandex Load Testing
Gatling
K6
Go
Scala
Go
Проприетарное ПО (продукт в
стадии Preview, пока не
тарифицируется)
SaaS
Gatling – opensource
Gatling Enterprise - проприетарное ПО
Gatling -K8s/OpenShift без
централизованного контроля
Проприетарное ПО (есть stand
alone )
SaaS
Gatling Enterprise -SaaS
✓
✓
Возможность контроля за всеми
Контроль только за своими
запущенными тестами
тестами. Запуск тестов через GUI
не рекомендован
IBM MQ, Active MQ, Artemis MQ,
Поддерживаемые
Kafka, Rest, gRPS
протоколы для генератора
и заглушки
Возможность добавить
свой протокол
Возможность
масштабироваться
Интеграционное
тестирование (тест из
нескольких шагов)
Возможность
использовать как
заглушку для протоколов
из коробки
Кроссплатформенность
(для локального запуска)
K8s/OpenShift без
централизованного контроля
LoadRunner
Rest, FTP, JDBC, LDAP, JMS,
SMTP, TCP, Java
✓
✕
✓
✓
Возможность контроля за всеми
запущенными тестами
✓
Gatling Enterprise
✓
FTP, IMAP, Kafka, LDAP, Rest, MQTT, MAPI,
POP3, Oracle, SAP, ODBC, и др.
Rest, gRPS
Поддерживает самое больше кол-во
протоколов из коробки
Pandora custom guns (разработка
на Go)
Есть готовые Third Party Plugins.
Можно разработать самостоятельно
✓
gRPC, WebSocket, Server-Sent-Events,
JMS
Rest, gRPS, WebSockets из
коробки. Остальные как
расширения (Kafka, RabbitMQ и
др.)
При запуске в облаке за счет
поднятия новых подов
server mode
LoadRunner Controller
✓
✓
✓
✓
✓
✓
✕
✓
✓
✓
✕
✓
✕
Как генератор и как заглушка
✕
✕
✕
Только как генератор
✓
✓
21.
Пример тестовых планов для подачи нагрузки “лесенкой”Gatling, ТП на java
import java.time.Duration;
import java.util.*;
import io.gatling.javaapi.core.*;
import io.gatling.javaapi.http.*;
import io.gatling.javaapi.jdbc.*;
import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.*;
import static io.gatling.javaapi.jdbc.JdbcDsl.*;
public class MyComputerTest7 extends Simulation {
{
HttpProtocolBuilder httpProtocol = http
.baseUrl("http://computer-database.gatling.io")
.inferHtmlResources()
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/w
ebp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7")
.upgradeInsecureRequestsHeader("1")
.userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36");
ScenarioBuilder scn = scenario("MyComputerTest")
.exec(
http("request_0")
.get("/computers/381")
);
setUp(scn.injectOpen(
constantUsersPerSec(200).during(20),
constantUsersPerSec(400).during(20),
constantUsersPerSec(600).during(20),
constantUsersPerSec(800).during(20),
constantUsersPerSec(1000).during(20),
constantUsersPerSec(1200).during(20),
constantUsersPerSec(1000).during(20),
constantUsersPerSec(1200).during(20),
constantUsersPerSec(1400).during(20),
constantUsersPerSec(1600).during(20),
constantUsersPerSec(1800).during(20),
constantUsersPerSec(2000).during(20)
)).protocols(httpProtocol);
}
}
K6, ТП на Javascript
import http from 'k6/http';
export const options = {
discardResponseBodies: true,
scenarios: {
contacts: {
executor: 'constant-arrival-rate',
duration: '30s',
rate: 100,
timeUnit: '1s',
preAllocatedVUs: 2,
maxVUs: 50,
},
contacts2: {
executor: 'constant-arrival-rate',
duration: '30s',
rate: 200,
startTime: '30s',
timeUnit: '1s',
preAllocatedVUs: 10,
maxVUs: 50,
},
contacts3: {
executor: 'constant-arrival-rate',
duration: '30s',
rate: 300,
startTime: '60s',
timeUnit: '1s',
preAllocatedVUs: 20,
maxVUs: 50,
},
},
};
export default function () {
const url = 'http://sytester-http-stub-pub2-tribe-sy-dev-sytenode3.apps.ocp.devpub.solution.sbt/test/';
const payload = JSON.stringify({
'rq': '001006a963ff74c413f469ff0c5d3123',
});
const params = {
headers: {
'Content-Type': 'application/json',
},
};
http.post(url, payload, params);
}
SyTester, ТП на json
{
"transport": [
{
"name": "transport_name",
"protocol": "HTTP",
"host": "http://localhost:8080/request"
}
],
"testdata": {
"testplan_data": {
"request": {
"default": "{'rq': '001006a963ff74c413f469ff0c5d3f88'}"
}
}
},
"testplan": [
{
"name": "testplan_generator",
"testdata": "testplan_data",
"transport_in": [
"transport_name"
],
"startTPS": 100,
"maxTPS": 4000,
"stepSize": 200,
"stepTimeMs": 10000
}
]
}
22.
Демонстрация работы CE• Скачать SyTester-1.0-exec.jar и sytester.sh с https://gitverse.ru/sbertech
• Запустить sytester.sh
• Создать ТП из GUI
• Запустить ТП
• Посмотреть отчеты работы
23.
Полезные ссылки• Документация: https://client.sbertech.ru/docs/public/SEI/3.11/SYTE/3.11/
• JAR файл для локального запуска: ?????????????????????????????
24.
Спасибо!Обратная связь: ????????????????????????????????????????
24