Всем привет!
Обновил пример gatling-скриптов для демонстрации различных моделей нагрузки.
Открытая модель нагрузки
Сценарий:
* Gatling Grafana Report: Gatling - open model
* openmodel-incrementuserspersec
Обратите внимание, как при открытой модели нагрузки растет количество одновременно работающих сценариев после точки деградации
Закрытая модель нагрузки
Сценарий:
Который рекомендую использовать вместо открытой модели
* Gatling Grafana Report: Gatling - closed model
* closemodel-incrementconcurrentusers
Обратите внимание на ровный по RPS профиль нагрузки, это trottle. И что после точки деградации количество параллельных сценариев (а следовательно потоков в Gatling) не растёт.
Значит Gatling не упадет по Out Of Memory Error под конец теста. А нагрузка та же самая.
По ссылкам доступны отчёты: Grafana и HTML.
Репозиторий:
https://github.com/polarnik/gatling-report-example
Обновил пример gatling-скриптов для демонстрации различных моделей нагрузки.
Открытая модель нагрузки
Сценарий:
io.qaload.gatling.reportExample.simulation.OpenModel_IncrementUsersPerSec
* Gatling Grafana Report: Gatling - open model
* openmodel-incrementuserspersec
Обратите внимание, как при открытой модели нагрузки растет количество одновременно работающих сценариев после точки деградации
Закрытая модель нагрузки
Сценарий:
io.qaload.gatling.reportExample.simulation.CloseModel_IncrementConcurrentUsers + trottle
Который рекомендую использовать вместо открытой модели
* Gatling Grafana Report: Gatling - closed model
* closemodel-incrementconcurrentusers
Обратите внимание на ровный по RPS профиль нагрузки, это trottle. И что после точки деградации количество параллельных сценариев (а следовательно потоков в Gatling) не растёт.
Значит Gatling не упадет по Out Of Memory Error под конец теста. А нагрузка та же самая.
По ссылкам доступны отчёты: Grafana и HTML.
Репозиторий:
https://github.com/polarnik/gatling-report-example
Forwarded from Александра Муратова
Всем привет! написали статью по анализу производительности БД Oracle с помощью OEM. Статья будет полезна тем, кто у кого нет большого опыта работы с OEM. https://habr.com/ru/company/tinkoff/blog/525436/
Хабр
Мониторинг БД Oracle с помощью OEM
Привет! Меня зовут Александра, я работаю в команде тестирования производительности. В этой статье расскажу базовые сведения об OEM от Oracle. Статья будет полезна для тех, кто только знакомится с...
Forwarded from Sergei Chepkasov
Всем привет!
Провели воркшоп на гейзенбаге по тестированию производительности с gatling и gitlab, для воркшопа подготовлено множество материалов, которые могут помочь в самостоятельном изучении этих инструментов.
Все материалы доступны в публичном репозитории: https://gitlab.com/tinkoffperfworkshop
Первую часть воркшопа можно повторить самостоятельно по шагам из шпаргалки: https://gitlab.com/tinkoffperfworkshop/part-1/cheat-sheet
Во второй части созданы отдельные репозитории, в них также есть ридми с инструкциями: https://gitlab.com/tinkoffperfworkshop/part-2
Что есть интересного:
1. Разворачиваем окружение для тестов локально в контейнерах: influxdb, vector, loki, prometheus, cadvisor, portainer, grafana, gitlab-runner
2. Создаем скрипты gatling для различных протоколов: http, jdbc, grpc
3. Создаем CI джобы для gitlab
4. Подключаем агент в gitlab.com
5. Проводим и мониторим тесты
Провели воркшоп на гейзенбаге по тестированию производительности с gatling и gitlab, для воркшопа подготовлено множество материалов, которые могут помочь в самостоятельном изучении этих инструментов.
Все материалы доступны в публичном репозитории: https://gitlab.com/tinkoffperfworkshop
Первую часть воркшопа можно повторить самостоятельно по шагам из шпаргалки: https://gitlab.com/tinkoffperfworkshop/part-1/cheat-sheet
Во второй части созданы отдельные репозитории, в них также есть ридми с инструкциями: https://gitlab.com/tinkoffperfworkshop/part-2
Что есть интересного:
1. Разворачиваем окружение для тестов локально в контейнерах: influxdb, vector, loki, prometheus, cadvisor, portainer, grafana, gitlab-runner
2. Создаем скрипты gatling для различных протоколов: http, jdbc, grpc
3. Создаем CI джобы для gitlab
4. Подключаем агент в gitlab.com
5. Проводим и мониторим тесты
GitLab
TinkoffPerfWorkshop · GitLab
Tinkoff performance workshop on Heisenbug
Forwarded from Maksimall89
Всем привет, как и обещал краткий мануал-faq на что смотреть, когда пишешь свой отчёт мечты и анализируешь проблемы с производительностью
https://habr.com/ru/company/tinkoff/blog/514314/
https://habr.com/ru/company/tinkoff/blog/514314/
Хабр
Анализ результатов нагрузочного тестирования
С каждым днем в мире становится все больше и больше инструментов для проведения нагрузочного тестирования. Собственно, и сам интерес к этой теме начинает возрастать. Основная задача инструмента...
TestTrend meetup
2 декабря 2020 года
Программа митапа:
1️⃣ Владимир Плизга, ЦФТ, “И мне ничего за это не будет.” Как внедрять тестовое поведение в чистовой код?
Рассказ с примерами, демoнстацией и сравнением
- AspectJ
- Byteman
- jMint
🗝 про Side Effect Injection
🖼 Слайды к докладу
2️⃣ Артём Козленко, ЦФТ, Атомарность в UI-тестах
Рассказ с примерами и демонстрацией того, как можно
- упростить тесты и ускорить их
- использовать Mock-и для этого
- сделать тесты более стабильными
🗝 про Целевую проверку
3️⃣ Вячеслав Смирнов, ВТБ, Три этапа поиска максимальной производительности
Рассказ с примерами реализации и схемами работы:
- Прогревающего теста
- Теста MaxPerf
- Теста стабильности
🗝 про применение таймеров для разных тестов в Apache.JMeter и Gatling
🖼 Слайды к докладу
🎥 Запись: https://youtu.be/rCHJ7iQr6To
Где есть и сами доклады и ответы на вопросы.
Часть ответов на вопросы осталась за кадром в чате: https://www.tg-me.com/testtrend_cft/884
Мне очень понравилось. Участникам тоже. Отзывы классные
2 декабря 2020 года
Программа митапа:
1️⃣ Владимир Плизга, ЦФТ, “И мне ничего за это не будет.” Как внедрять тестовое поведение в чистовой код?
Рассказ с примерами, демoнстацией и сравнением
- AspectJ
- Byteman
- jMint
🗝 про Side Effect Injection
🖼 Слайды к докладу
2️⃣ Артём Козленко, ЦФТ, Атомарность в UI-тестах
Рассказ с примерами и демонстрацией того, как можно
- упростить тесты и ускорить их
- использовать Mock-и для этого
- сделать тесты более стабильными
🗝 про Целевую проверку
3️⃣ Вячеслав Смирнов, ВТБ, Три этапа поиска максимальной производительности
Рассказ с примерами реализации и схемами работы:
- Прогревающего теста
- Теста MaxPerf
- Теста стабильности
🗝 про применение таймеров для разных тестов в Apache.JMeter и Gatling
🖼 Слайды к докладу
🎥 Запись: https://youtu.be/rCHJ7iQr6To
Где есть и сами доклады и ответы на вопросы.
Часть ответов на вопросы осталась за кадром в чате: https://www.tg-me.com/testtrend_cft/884
Мне очень понравилось. Участникам тоже. Отзывы классные
Не так давно вышел новый jmeter 5.4. Добавили GraphQL Sampler и новый InfluxDBClient, который пишет "raw" results. Для тех кому интересно вот release notes и ссылочка на скачивание:
https://jmeter.apache.org/changes.html
https://jmeter.apache.org/download_jmeter.cgi
https://jmeter.apache.org/changes.html
https://jmeter.apache.org/download_jmeter.cgi
jmeter.apache.org
Apache JMeter
-
Changes
-
Changes
Forwarded from Viktor Ganeles
Ребята, я тут выступил на конфе от OTUS
Рассказываю, как мы поэтапно оптимизировали систему
https://m.youtube.com/watch?v=FU3zTrRqMys&t=11700s
Я начинаюсь в 03:15:00
Рассказываю, как мы поэтапно оптимизировали систему
https://m.youtube.com/watch?v=FU3zTrRqMys&t=11700s
Я начинаюсь в 03:15:00
Всем привет!
Обзор того, как мы делились опытом и помогали друг другу за две недели. #дайджест
⏱Максим Евлентьев долго пытался получить в Grafana значения Percentile, такие как JMeter HTML Report, ему помогали все:
▫️ Попробовали backend_influxdb.send_interval=1
▫️ Строили гипотезы как считается статистика
▫️ Функции last("pct99.0"), mean("pct99.0"), percentile("pct99.0",99), percentile("mean",99) не дали нужной точности, минимальная погрешность - 20% у mean("pct99.0")
✅ Пришли к необходимости использования сырых данных:
▫️ использовать Novatech-плагин, что шлет сырые данные
▫️ JMeter 5.4, который может писать сырые данные
▫️ Telegraf как Proxy для надежности вставки сырых данных
❗️Но помните - сырые данные замедляют InfluxDB, альтернативы сырым данным:
▫️ Clickhouse и InfluxDB Сontinious Querie для аггрегации сырых данных
▫️ Наоборот увеличить шаг отправки данных с 1с до 30с для точности и простоты аггрегаций
📊 Обсудили сравнение двух запусков тестов :
▫️ Проект influxdb-timeshift-proxy
▫️ Просто настройку Query Option / Time Shift в Grafana
▫️ Язык Flux + функцию timeshift
▫️ Хранилище ClickHouse + timeshift
▫️ Плагин MetaQuery для Grafana имеет функцию TimeShift
▫️ По сырым CSV-данным и заливкой сырых логов SendLogToInfluxDB (от Степана)
▫️ По сырым данным заливаемым с jsr223-listner-ом
▫️ Roman указал на проект autohome-compareQueries-datasource который работает с Grafana 6.5.3
▫️ Простой вариант с MergeResults + стандартный html отчёт + готовый скрипт для Jenkins
▫️ Предложен проект carrier-io, в котором есть Grafana-доска со сравнением
😀 Шутили
Разработки:
🆕 Sergey Bronnikov реализовал свой perfmon-agent на языке C. Если кому нужно - обращайтесь к @ligurio
🆕 Степан реализовал SendLogToInfluxDB для отправки JTL/CSV логов JMeter в InfluxDB
Доклады:
🎥 Виктор выступил с докладом "Пример оптимизации производительности в 32 раза"
Gatling:
▫️Отладка HTTP-запросов в Gatling логированием и через проксирование в Fiddler
▫️Разделение Gatling-статистики по двум системам:
▫️по двум базам данным InfluxDB через разные порты
▫️ по двум разным серверам InfluxDB
Обзор того, как мы делились опытом и помогали друг другу за две недели. #дайджест
⏱Максим Евлентьев долго пытался получить в Grafana значения Percentile, такие как JMeter HTML Report, ему помогали все:
▫️ Попробовали backend_influxdb.send_interval=1
▫️ Строили гипотезы как считается статистика
▫️ Функции last("pct99.0"), mean("pct99.0"), percentile("pct99.0",99), percentile("mean",99) не дали нужной точности, минимальная погрешность - 20% у mean("pct99.0")
✅ Пришли к необходимости использования сырых данных:
▫️ использовать Novatech-плагин, что шлет сырые данные
▫️ JMeter 5.4, который может писать сырые данные
▫️ Telegraf как Proxy для надежности вставки сырых данных
❗️Но помните - сырые данные замедляют InfluxDB, альтернативы сырым данным:
▫️ Clickhouse и InfluxDB Сontinious Querie для аггрегации сырых данных
▫️ Наоборот увеличить шаг отправки данных с 1с до 30с для точности и простоты аггрегаций
📊 Обсудили сравнение двух запусков тестов :
▫️ Проект influxdb-timeshift-proxy
▫️ Просто настройку Query Option / Time Shift в Grafana
▫️ Язык Flux + функцию timeshift
▫️ Хранилище ClickHouse + timeshift
▫️ Плагин MetaQuery для Grafana имеет функцию TimeShift
▫️ По сырым CSV-данным и заливкой сырых логов SendLogToInfluxDB (от Степана)
▫️ По сырым данным заливаемым с jsr223-listner-ом
▫️ Roman указал на проект autohome-compareQueries-datasource который работает с Grafana 6.5.3
▫️ Простой вариант с MergeResults + стандартный html отчёт + готовый скрипт для Jenkins
▫️ Предложен проект carrier-io, в котором есть Grafana-доска со сравнением
😀 Шутили
Разработки:
🆕 Sergey Bronnikov реализовал свой perfmon-agent на языке C. Если кому нужно - обращайтесь к @ligurio
🆕 Степан реализовал SendLogToInfluxDB для отправки JTL/CSV логов JMeter в InfluxDB
Доклады:
🎥 Виктор выступил с докладом "Пример оптимизации производительности в 32 раза"
Gatling:
▫️Отладка HTTP-запросов в Gatling логированием и через проксирование в Fiddler
▫️Разделение Gatling-статистики по двум системам:
▫️по двум базам данным InfluxDB через разные порты
▫️ по двум разным серверам InfluxDB
Telegram
Максим Евлентьев in QA — Load & Performance
Изменил в файле jmeter.properties у backend_influxdb.send_interval= с 5 на 1
Смотрю по консоль, данные все равно отправляются с интервалом в 5 секунд, подскажите кто сталкивался, может ещё где-то нужно изменить значение для изменения интервала отправки данных…
Смотрю по консоль, данные все равно отправляются с интервалом в 5 секунд, подскажите кто сталкивался, может ещё где-то нужно изменить значение для изменения интервала отправки данных…
JMeter:
▫️обсуждали как на связке Grafana + InfluxDB сделать отчеты для JMeter такие же как в Yandex.Tank, Кирилл предложил свой jmeterReports.
▫️поняли, что плагин jp@gc - Transactions per Second учитывает подзапросы, и значения TPS получаются выше, чем в Summary Report / Throughput для TOTAL
▫️получали дату из интервала через ${__RandomDate(,2020-12-09,2021-12-09,,)}
▫️настройка профиля нагрузки со стандартной Thread Group
▫️скачивание огромного ответа на SQL-запрос с OS Process Sampler
▫️подбирали количество потоков в JMeter для увеличения TPS
▫️выбирали сайт и способ для поиска пределов JMeter
▫️выясняли причины Response code:Non HTTP response code: org.apache.http.conn.HttpHostConnectException
▫️заливали Connect Time из сырых JTL/CSV-логов JMeter в InfluxDB c помощью проекта SendLogToInfluxDB
▫️игнорировали ошибку NullPointerException: null при использовании openJDK 15.0.1 и JMeter 5.3, 5.4 на MacOS, которая исправилась с переходом на AdoptOpenJDK
▫️осваивали работу с HTTP(S) Test Script Recorder, Fiddler, Proxyman и конверторами для записи скриптов
▫️убирали ошибку java.lang.OutOfMemoryError: Metaspace in thread удалением -XX:MaxMetaspaceSize=256m из параметров запуска и профилировали JMeter c JProfiler, Java Flight Recorder и AsyncProfiler
▫️меняли Xmx Xms без правки jmeter.bat
▫️беуспешно пытались сделать дробный малый RPS с ThroughputShapingTimer (это невозможно, тут нужен Constant Throughput Timer)
▫️удивлялись, что в JMeter есть Autosave и отмена редактирования Ctrl+Z
Также интересные обсуждения:
1️⃣ Выстраивание коммуникации на проекте НТ, советы бывалых
2️⃣ Рассчет количества WebSocket-подключений с одной станции AWS
3️⃣ Расчет модели нагрузки, поиск ПЧ (пиковый час)
4️⃣ Разбор AWR для Oracle
5️⃣ Спор нужна ли загрузка статики?
❌Она не влияет на backend в некоторых системах
✅ Она может загружать сеть и диск
✅ Может отдаваться самим беком и даже приводить к OutOfMemory
✅ Может быть не настроено клиентское кеширование на сервере и статика - узкое место
▫️обсуждали как на связке Grafana + InfluxDB сделать отчеты для JMeter такие же как в Yandex.Tank, Кирилл предложил свой jmeterReports.
▫️поняли, что плагин jp@gc - Transactions per Second учитывает подзапросы, и значения TPS получаются выше, чем в Summary Report / Throughput для TOTAL
▫️получали дату из интервала через ${__RandomDate(,2020-12-09,2021-12-09,,)}
▫️настройка профиля нагрузки со стандартной Thread Group
▫️скачивание огромного ответа на SQL-запрос с OS Process Sampler
▫️подбирали количество потоков в JMeter для увеличения TPS
▫️выбирали сайт и способ для поиска пределов JMeter
▫️выясняли причины Response code:Non HTTP response code: org.apache.http.conn.HttpHostConnectException
▫️заливали Connect Time из сырых JTL/CSV-логов JMeter в InfluxDB c помощью проекта SendLogToInfluxDB
▫️игнорировали ошибку NullPointerException: null при использовании openJDK 15.0.1 и JMeter 5.3, 5.4 на MacOS, которая исправилась с переходом на AdoptOpenJDK
▫️осваивали работу с HTTP(S) Test Script Recorder, Fiddler, Proxyman и конверторами для записи скриптов
▫️убирали ошибку java.lang.OutOfMemoryError: Metaspace in thread удалением -XX:MaxMetaspaceSize=256m из параметров запуска и профилировали JMeter c JProfiler, Java Flight Recorder и AsyncProfiler
▫️меняли Xmx Xms без правки jmeter.bat
▫️беуспешно пытались сделать дробный малый RPS с ThroughputShapingTimer (это невозможно, тут нужен Constant Throughput Timer)
▫️удивлялись, что в JMeter есть Autosave и отмена редактирования Ctrl+Z
Также интересные обсуждения:
1️⃣ Выстраивание коммуникации на проекте НТ, советы бывалых
2️⃣ Рассчет количества WebSocket-подключений с одной станции AWS
3️⃣ Расчет модели нагрузки, поиск ПЧ (пиковый час)
4️⃣ Разбор AWR для Oracle
5️⃣ Спор нужна ли загрузка статики?
❌Она не влияет на backend в некоторых системах
✅ Она может загружать сеть и диск
✅ Может отдаваться самим беком и даже приводить к OutOfMemory
✅ Может быть не настроено клиентское кеширование на сервере и статика - узкое место
Telegram
Максим Евлентьев in QA — Load & Performance
Всем привет. Вопрос по графикам в Графана. Импортировал себе несколько дашбордов. Теперь пытаюсь построить свой.
Но ни как не могу понять, как создать вот такой вот график, когда выводится просто данные и при этом не выбран ни один график в Visualization.
Но ни как не могу понять, как создать вот такой вот график, когда выводится просто данные и при этом не выбран ни один график в Visualization.
Всем привет! Выпускаем очередной краткий #дайджест обсуждений за неделю (21-28 декабря):
▫️Успешно реализовали дробные РПС с двумя видами таймеров в JMeter. Получили очень точные результаты, но на dummy sampler'ах. Даже провели небольшое исследование! Пришли к тому, что гнаться за супер точными РПСами - ни к чему.
▫️Узнавали умеет ли JMeter работать с local storage. Ответ: нет, не умеет, но умеет его имитировать.
▫️Разобрались с тем, как вручную собрать отчет в Gatling, если тест был прерван.
▫️Мимолетно заметили, что появился Gatling 3.5.0 со Scala 2.13.
▫️Делились опытом по поводу того, на тему учета неуспешных запросов в РПС.
▫️Пытались решить проблему с запуском фреймоврка и плавно перетекли в обсуждение docker'a.
▫️Ремонтировали дашборд для Gatling от @smirnovqa.
▫️Разбирались в реализации SSE на Gatling.
▫️Помогали решать тестовое задание. История без успеха, зато тестовое оптимизировали!
▫️Настраивали задержку в персентилях на wiremock.
▫️Закладывали время выполнения сценария с помощью интуиции.
▫️Учились читать readme к генератору отчетов и дашбордам (но еще была проблема в кириллице в пути к jmeter).
▫️Составляли чек-лист для общения с заказчиком нагрузки.
▫️Обсудили разницу "виртуалок" и "железных" машин.
▫️Искали целые числа, которые потерялись при запросе из Grafana в Prometheus.
▫️Оптимизировали потребление памяти при загрузке файлов на сервер в JMeter. Спойлер: косяк был в нагружаемой системе (но не только!).
Полезности:
1️⃣ @instaHipsta рекомендует инструмент для сравнения больших xml .
2️⃣ И снова @instaHipsta заметил интересную особенность Module Controller в JMeter.
3️⃣ Рекомендация @smirnovqa с автоматическим контролем SLA.
4️⃣ @smirnovqa поделился шаблоном методики нагрузочного тестирования.
5️⃣ У @annabella0131 родился опросник по серверным характеристикам для клиента.
6️⃣ @eugenis поделился методом обхода fileUpload, как следствие - экономия памяти в JMeter
▫️Успешно реализовали дробные РПС с двумя видами таймеров в JMeter. Получили очень точные результаты, но на dummy sampler'ах. Даже провели небольшое исследование! Пришли к тому, что гнаться за супер точными РПСами - ни к чему.
▫️Узнавали умеет ли JMeter работать с local storage. Ответ: нет, не умеет, но умеет его имитировать.
▫️Разобрались с тем, как вручную собрать отчет в Gatling, если тест был прерван.
▫️Мимолетно заметили, что появился Gatling 3.5.0 со Scala 2.13.
▫️Делились опытом по поводу того, на тему учета неуспешных запросов в РПС.
▫️Пытались решить проблему с запуском фреймоврка и плавно перетекли в обсуждение docker'a.
▫️Ремонтировали дашборд для Gatling от @smirnovqa.
▫️Разбирались в реализации SSE на Gatling.
▫️Помогали решать тестовое задание. История без успеха, зато тестовое оптимизировали!
▫️Настраивали задержку в персентилях на wiremock.
▫️Закладывали время выполнения сценария с помощью интуиции.
▫️Учились читать readme к генератору отчетов и дашбордам (но еще была проблема в кириллице в пути к jmeter).
▫️Составляли чек-лист для общения с заказчиком нагрузки.
▫️Обсудили разницу "виртуалок" и "железных" машин.
▫️Искали целые числа, которые потерялись при запросе из Grafana в Prometheus.
▫️Оптимизировали потребление памяти при загрузке файлов на сервер в JMeter. Спойлер: косяк был в нагружаемой системе (но не только!).
Полезности:
1️⃣ @instaHipsta рекомендует инструмент для сравнения больших xml .
2️⃣ И снова @instaHipsta заметил интересную особенность Module Controller в JMeter.
3️⃣ Рекомендация @smirnovqa с автоматическим контролем SLA.
4️⃣ @smirnovqa поделился шаблоном методики нагрузочного тестирования.
5️⃣ У @annabella0131 родился опросник по серверным характеристикам для клиента.
6️⃣ @eugenis поделился методом обхода fileUpload, как следствие - экономия памяти в JMeter
Telegram
Kirill Yurkov in QA — Load & Performance
На самом деле проблема подачи низких рпс - решаема, просто тут главное попробовать ряд решений (выбор лучшего, универсального - нет).
Я сделал тестовый пример, пока на Dummy Sampler, в котором 9 разных подходов к реализации низкого рпс, в примере дастигал…
Я сделал тестовый пример, пока на Dummy Sampler, в котором 9 разных подходов к реализации низкого рпс, в примере дастигал…
Всем привет! Выпускаем очередной краткий #дайджест обсуждений за две недели (29 декабря-12 января):
▫️Разбирали JMeter и формат времени в Java:
YY, YMD - магические константы, а yyyy - формат для года
m - малое, минуты, M - большое, месяцы
▫️Заметили, что галочка Generate Parent Sample в Transaction Controller не дает возможности записать статистику по вложенным запросам в Elasticsearch Backend Listener(delirius325)
▫️Разбор результатов нагрузки Microsoft Exchange через JMeter и MS Graph API, где со временем замедляется работа. На графиках прослеживается как при закрытой модели нагрузки снижается RPS 📉при увеличении времени отклика 📈
▫️Когда лучше фиксировать результат, ⏱ в момент отправки запроса, а когда в момент получения ответа:
▫️Почему запуск тестов JMeter Non-GUI лучше JMeter GUI:
* разная работа кода, таймеров
* меньший расход оперативной памяти
* CI/CD-запуск
* меньше шансов сломать большой JMX-файл
▫️Случайно удалились записи от Виктора 🤷♂️
▫️Обсуждали подход к тестированию асинхронного сервиса, в котором есть ограничение сверху на интенсивность операций
▫️Анализ аномалий в результатах Yandex.Tank и гипотеза по ускорению теста: нужна настройка станции
▫️Составление методики тестирования REST API интерфейсом с учетом генерации, использования и восстановления данных системы
▫️Обсуждение статьи Нагрузочное тестирование выполнять сложно, а инструменты далеки от совершенства. Почему?, в которой автор задался целью повторения действий пользователя с максимальной реалистичностью при подаче нагрузки. Обсуждение интересно историями, когда действительно стоит отказаться от готового инструмента нагрузки в пользу разработки своего, а когда нет
▫️Интересное обсуждение о совмещении ролей ФТ, АТ, НТ на проекте.
▫️Жаркое обсуждение того, как лучше хранить, редактировать и запускать исходный код проекта JMeter, с учетом особенностей:
* в команде несколько человек и удобны Include Controller
* когда удобно собирать свой дистрибутив
* когда удобно использовать maven
* когда неудобно генерировать JMX/XML-файл, а когда можно
▫️Что делать если хочется отрисовать в Grafana более 3400 точек на графике, а не получается
Спасибо, что делитесь опытом!
Пишите в @qa_load, читайте @qaload
▫️Разбирали JMeter и формат времени в Java:
YY, YMD - магические константы, а yyyy - формат для года
m - малое, минуты, M - большое, месяцы
▫️Заметили, что галочка Generate Parent Sample в Transaction Controller не дает возможности записать статистику по вложенным запросам в Elasticsearch Backend Listener(delirius325)
▫️Разбор результатов нагрузки Microsoft Exchange через JMeter и MS Graph API, где со временем замедляется работа. На графиках прослеживается как при закрытой модели нагрузки снижается RPS 📉при увеличении времени отклика 📈
▫️Когда лучше фиксировать результат, ⏱ в момент отправки запроса, а когда в момент получения ответа:
# Save the start time stamp instead of the end▫️И более общий вопрос: RPS - это Request Per Second или Responce Per Second?
# This also affects the timestamp stored in result files
sampleresult.timestamp.start=true
▫️Почему запуск тестов JMeter Non-GUI лучше JMeter GUI:
* разная работа кода, таймеров
* меньший расход оперативной памяти
* CI/CD-запуск
* меньше шансов сломать большой JMX-файл
▫️Случайно удалились записи от Виктора 🤷♂️
▫️Обсуждали подход к тестированию асинхронного сервиса, в котором есть ограничение сверху на интенсивность операций
▫️Анализ аномалий в результатах Yandex.Tank и гипотеза по ускорению теста: нужна настройка станции
▫️Составление методики тестирования REST API интерфейсом с учетом генерации, использования и восстановления данных системы
▫️Обсуждение статьи Нагрузочное тестирование выполнять сложно, а инструменты далеки от совершенства. Почему?, в которой автор задался целью повторения действий пользователя с максимальной реалистичностью при подаче нагрузки. Обсуждение интересно историями, когда действительно стоит отказаться от готового инструмента нагрузки в пользу разработки своего, а когда нет
▫️Интересное обсуждение о совмещении ролей ФТ, АТ, НТ на проекте.
▫️Жаркое обсуждение того, как лучше хранить, редактировать и запускать исходный код проекта JMeter, с учетом особенностей:
* в команде несколько человек и удобны Include Controller
* когда удобно собирать свой дистрибутив
* когда удобно использовать maven
* когда неудобно генерировать JMX/XML-файл, а когда можно
▫️Что делать если хочется отрисовать в Grafana более 3400 точек на графике, а не получается
Спасибо, что делитесь опытом!
Пишите в @qa_load, читайте @qaload
Telegram
Alexey Kübler-Ross in QA — Load & Performance
Коллеги, срочный вопрос, мне кажется что наткнулся на пасхалочку в jmeter.
Выполните пожалуйста в фанкшен хэлпере функцию __time(YY,)
Выполните пожалуйста в фанкшен хэлпере функцию __time(YY,)
Всем привет! Выпускаем очередной #дайджест обсуждений за неделю +- (13 января-18 января):
Вопросы, на которые пока нет ответов:
▫️Написание запроса к InfluxDB для отображения RPS как в JMeter. Задача у автора вопроса так и не решилась, получилось RPS/10. ❗️
▫️Как оценить сколько документ весит при открытии в Google Chrome ❓
▫️Вопрос по OpenShift. Если не поднимаются поды OpenShift при исчерпании Limits по памяти, то можно ли поды поставить на паузу пока ресурсы не освободятся? ❓
По Apache.JMeter
1️⃣ Разбор ошибки SocketException: Socket operation on nonsocket: connect., которая есть в JMeter 5.2 и которой нет в JMeter 5.4. Возможно причина в исправлении "Make httpclient4.time_to_live defaults to 60000 to be closer to typical browser behavior", с версии JMeter 5.3 соединение живет не 2 сек, а 60 сек по умолчанию.
2️⃣ Написание запроса к InfluxDB для отображения AggregateReport как в JMeter. Обсудили, что точную таблицу получить не получится. Был предложен вариант с формированием таблицы с помощью JMeterPluginsCMD Command Line Tool
3️⃣ Загрузка файла в Apache.JMeter с названием на кириллице, где изначально имя отображалось как ????????? а для отправки запроса использовалась Body Data. В решении проблемы помогло использование Прокси сервера, и использование вкладки File Upload вместо Body Data.
4️⃣ Использование Throughput Contoller и Throughput Weighted Switch в тестах Apache.JMeter. Обсуждение, когда они помогают, а когда усложняют тест
5️⃣ Как удобно можно хранить groovy файлы используя jmeter-maven-plugin для организации проекта, для обращения к ним в jmx? Описание предлагаемого способа
6️⃣ Накопление списка/массива значений от PostProcessor в JMeter с помощью
8️⃣ Обсудили отправку символов UTF-8 и конкретно умлаутов (диакритические символы) в JMeter. Автор вопроса верно нашел ответ.
9️⃣ Обсуждение того, как собирается отчет при распределенном запуске Apache.JMeter . Если кратко, то статистика аккумулируется master-узлом. А если запускать тест без master-узла, то отчет собирается в InfluxDB
🔟 Способы удаления сущностей, созданных в ходе тестирования
Когда:
- после теста (Tear Down)
- перед следующим тестом (Setup Thread)
- в отдельном скрипте после или перед тестом
Как:
- удалять запросами
- восстановлением из резервной копии
О Gatling:
1️⃣ Замечена ошибка в документации Gatling по установке:
Интересные обсуждения и заметки:
😄 Мемы о тестировании производительности
📈 Разбирались, как посчитать утилизацию CPU в Docker, если на графике 300%
📱 Настройка Charles для iOS-устройства. Проблема была в настройках iOS в разрешении всех прав сертификату
⏱Обсудили инструмент для написания тестов производительности в виде модульных тестов (на участки кода) JMH
📦Сколько kubernetes-ов столько и подходов к подбору количества под и их характеристик. И вот тут начало обсуждения того, кто как это делал или делает
Спасибо, что делитесь опытом!
Вопросы, на которые пока нет ответов:
▫️Написание запроса к InfluxDB для отображения RPS как в JMeter. Задача у автора вопроса так и не решилась, получилось RPS/10. ❗️
▫️Как оценить сколько документ весит при открытии в Google Chrome ❓
▫️Вопрос по OpenShift. Если не поднимаются поды OpenShift при исчерпании Limits по памяти, то можно ли поды поставить на паузу пока ресурсы не освободятся? ❓
По Apache.JMeter
1️⃣ Разбор ошибки SocketException: Socket operation on nonsocket: connect., которая есть в JMeter 5.2 и которой нет в JMeter 5.4. Возможно причина в исправлении "Make httpclient4.time_to_live defaults to 60000 to be closer to typical browser behavior", с версии JMeter 5.3 соединение живет не 2 сек, а 60 сек по умолчанию.
2️⃣ Написание запроса к InfluxDB для отображения AggregateReport как в JMeter. Обсудили, что точную таблицу получить не получится. Был предложен вариант с формированием таблицы с помощью JMeterPluginsCMD Command Line Tool
3️⃣ Загрузка файла в Apache.JMeter с названием на кириллице, где изначально имя отображалось как ????????? а для отправки запроса использовалась Body Data. В решении проблемы помогло использование Прокси сервера, и использование вкладки File Upload вместо Body Data.
4️⃣ Использование Throughput Contoller и Throughput Weighted Switch в тестах Apache.JMeter. Обсуждение, когда они помогают, а когда усложняют тест
5️⃣ Как удобно можно хранить groovy файлы используя jmeter-maven-plugin для организации проекта, для обращения к ним в jmx? Описание предлагаемого способа
6️⃣ Накопление списка/массива значений от PostProcessor в JMeter с помощью
vars.putObject
7️⃣ Вспомнили, что такое шаг нагрузки и как сделать заданное количество транзакций в минуту в JMeter с помощью Flow Control Action и Constant Throughput Timer8️⃣ Обсудили отправку символов UTF-8 и конкретно умлаутов (диакритические символы) в JMeter. Автор вопроса верно нашел ответ.
9️⃣ Обсуждение того, как собирается отчет при распределенном запуске Apache.JMeter . Если кратко, то статистика аккумулируется master-узлом. А если запускать тест без master-узла, то отчет собирается в InfluxDB
🔟 Способы удаления сущностей, созданных в ходе тестирования
Когда:
- после теста (Tear Down)
- перед следующим тестом (Setup Thread)
- в отдельном скрипте после или перед тестом
Как:
- удалять запросами
- восстановлением из резервной копии
О Gatling:
1️⃣ Замечена ошибка в документации Gatling по установке:
Since 3.0, Gatling requires Scala 2.12. Gatling is not compatible with Scala 2.11 nor Scala 2.13.Написано, что нужна Scala 2.12, при этом на странице быстрого старта указано все корректно, что нужна версия Scala 2.13.4 для Gatling 3.5.0:
Merge the following code snippet in your build.sbt fileУдобно смотреть версию scala по файлу build.sbt проекта gatling-sbt-plugin-demo для нужной версии Gatling.
enablePlugins(GatlingPlugin)
scalaVersion := "2.13.4"
scalacOptions := Seq(
"-encoding", "UTF-8", "-target:jvm-1.8",
"-deprecation", "-feature", "-unchecked",
"-language:implicitConversions", "-language:postfixOps")
val gatlingVersion = "3.5.0"
...
Интересные обсуждения и заметки:
😄 Мемы о тестировании производительности
📈 Разбирались, как посчитать утилизацию CPU в Docker, если на графике 300%
📱 Настройка Charles для iOS-устройства. Проблема была в настройках iOS в разрешении всех прав сертификату
⏱Обсудили инструмент для написания тестов производительности в виде модульных тестов (на участки кода) JMH
📦Сколько kubernetes-ов столько и подходов к подбору количества под и их характеристик. И вот тут начало обсуждения того, кто как это делал или делает
Спасибо, что делитесь опытом!
Telegram
Klim in QA — Load & Performance
Страница быстрого старта с Gatling, которую упомянул выше: https://gatling.io/open-source/
Очередной #дайджест обсуждений в чате @qa_load
🔺Рассказ от Степана Фомичева о том, как можно повернуть собеседование в свою сторону. И отвечая на вопрос о нагруженных системах продемонстрировать компетенции.
🔺Интересная задача с Gatling, где @aka_Slip хотел сделать паузу в начале сценария, но получал ошибку компиляции. Причина оказалась в том, что nothingFor доступен только для открытой модели нагрузки.
По опыту скажу, что в версии 3.3.1 сделать паузу вначале сценария не получится никак - ее можно передать, но она игнорируется. И если очень нужно сделать паузу вначале сценария, то можно так:
🔹Для запуска распределенного теста JMeter в режиме Master-Slave Максиму Никифорову понадобилась обычная сеть, запустить тест через VPN с закрытыми портами не удалось. Пусть его опыт поможет другим быстрее запускать распределенные тесты.
🔹Попытка разбора ошибок вида
* javax.net.ssl.SSLException/
🔹Рассказ о том, что функция __UUID (The UUID function returns a pseudo random type 4 Universally Unique IDentifier (UUID)) не подходит, если нужно сформировать UUID v1 со временем и MAC-адресом. И вопрос: как поместить значение в переменную? Ответ был про возможность выполнения
🔹Вопрос про конкурентную запись значений в Property в Apache.JMeter.
Вопрос решился при корректном использовании кавычек, и применении функции
Вообще Property - это HashMap, это не ThreadSafe-структура, и не предназначена для многопоточной записи/обновления/удаления значений. Но читать значения в несколько потоков можно. Для многопоточной записи лучше использовать ConcurrentHashMap, которую можно положить в Property в начале теста, в Setup Thread Group, а потом можно много раз считывать и уже с таким объектом работать многопоточно.
Пример:
//Setup Thread Group: Положить Map в Property
🔹Особенности регулярных выражений в JMeter и PHP/Perl. В частности в JMeter нет поддержки выражений
🔹Обработка ошибочных JSR223 Sampler (с ошибками выполнения/компиляции):
* С JSR223 PostProcessor такие Sampler не отловить - они не выполняются вообще в случае ошибки в Sampler!
* Можно попробовать JSR223 Sampler после текущего Sampler, при включенной опции Continue on error в Thread Group
* Можно выполнять проверку в JSR223 Listener
🔹О невозможнсти отправить метрики в Backend Listener по подзапросам если в Transaction Controller стоит галочка Generate Parent Sampler. Галочку придется снять.
▪️Про новый JVM Profiler от Uber
▪️Как нагрузить сайт на внешнем хостинге?
* через корпоративный прокси
* через внешнего провайдера
* ... вернее всего с нагрузочного агента внутри хостинга
но все очень зависит от целей тестирования
🔹Нерешенная проблема про использование ключей из kstore.jks для JMeter из Docker:
SSLManager:
Non HTTP response message:
🔺Рассказ от Степана Фомичева о том, как можно повернуть собеседование в свою сторону. И отвечая на вопрос о нагруженных системах продемонстрировать компетенции.
🔺Интересная задача с Gatling, где @aka_Slip хотел сделать паузу в начале сценария, но получал ошибку компиляции. Причина оказалась в том, что nothingFor доступен только для открытой модели нагрузки.
По опыту скажу, что в версии 3.3.1 сделать паузу вначале сценария не получится никак - ее можно передать, но она игнорируется. И если очень нужно сделать паузу вначале сценария, то можно так:
pause(DELAY seconds)
в начале каждого сценария. Да, это костыль. Но единственное, что работает.🔹Для запуска распределенного теста JMeter в режиме Master-Slave Максиму Никифорову понадобилась обычная сеть, запустить тест через VPN с закрытыми портами не удалось. Пусть его опыт поможет другим быстрее запускать распределенные тесты.
🔹Попытка разбора ошибок вида
Non HTTP Response Code
:* javax.net.ssl.SSLException/
Couldn't kikstart handshaking
* javax.net.ssl.SSLException/readHandshakeRecord
* javax.net.ssl.SSLException/Connection Reset
Были сделаны разные гипотезы: помогло или нет и в чем была причина - пока вопрос🔹Рассказ о том, что функция __UUID (The UUID function returns a pseudo random type 4 Universally Unique IDentifier (UUID)) не подходит, если нужно сформировать UUID v1 со временем и MAC-адресом. И вопрос: как поместить значение в переменную? Ответ был про возможность выполнения
vars.put
🔹Вопрос про конкурентную запись значений в Property в Apache.JMeter.
Вопрос решился при корректном использовании кавычек, и применении функции
${__P(prop_name)}
взамен кода props.get("prop_name")
.Вообще Property - это HashMap, это не ThreadSafe-структура, и не предназначена для многопоточной записи/обновления/удаления значений. Но читать значения в несколько потоков можно. Для многопоточной записи лучше использовать ConcurrentHashMap, которую можно положить в Property в начале теста, в Setup Thread Group, а потом можно много раз считывать и уже с таким объектом работать многопоточно.
Пример:
//Setup Thread Group: Положить Map в Property
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
def map = new ConcurrentHashMap<String, String>();
props.put("map", map)
//Thread Group: Обновить значениеimport java.util.concurrent.ConcurrentHashMap;
ConcurrentHashMap map = props.get('map');
def auth_token = vars.get('auth_token');
map.put('token', auth_token);
//Thread Group: Получить значение и положить его в переменнуюimport java.util.concurrent.ConcurrentHashMap;
ConcurrentHashMap map = props.get('map');
def auth_token = map.get('token');
vars.put('auth_token', auth_token);
🔹Подключение к #ActiveMQ🔹Особенности регулярных выражений в JMeter и PHP/Perl. В частности в JMeter нет поддержки выражений
(?<=regexp)
🔸Как закидывать данные из #LoadRunner в #InfluxDB во время теста🔹Обработка ошибочных JSR223 Sampler (с ошибками выполнения/компиляции):
* С JSR223 PostProcessor такие Sampler не отловить - они не выполняются вообще в случае ошибки в Sampler!
* Можно попробовать JSR223 Sampler после текущего Sampler, при включенной опции Continue on error в Thread Group
* Можно выполнять проверку в JSR223 Listener
🔹О невозможнсти отправить метрики в Backend Listener по подзапросам если в Transaction Controller стоит галочка Generate Parent Sampler. Галочку придется снять.
▪️Про новый JVM Profiler от Uber
▪️Как нагрузить сайт на внешнем хостинге?
* через корпоративный прокси
* через внешнего провайдера
* ... вернее всего с нагрузочного агента внутри хостинга
но все очень зависит от целей тестирования
🔹Нерешенная проблема про использование ключей из kstore.jks для JMeter из Docker:
SSLManager:
Problem loading keystore: No key(s) found
и Non HTTP response message:
Received fatal alert: handshake_failure
(запросы не доходят до системы)🔹SampleResult.setIgnore()
не работает для PostProcessor + TransactionController в 5.4. Это дефект, который починят в версии JMeter 5.4.1Telegram
Степа Фомичев in QA — Load & Performance
Кстати, это оффтоп, но был смешной случай недавно, звонила hr и спрашивала, с насколько нагружёнными системами я работал в единицах пользователей, и я минуты через 2 только понял что по привычке ей объясняю почему неправильно измерять нагрузку в пользователях
🔹Иногда, если не удается загрузить jar/класс в JMeter поможет загрузка его из JMX-сценария, через Add directory or jar to classpath в Test Plan.
🔹Причиной постепенного увеличения времени отклика и снижения TPS в тесте стабильности может быть использование If Controller с javascript вместо groovy.
И к нам присоединился @serputko, который дал ценный комментарий по этой проблеме, а ранее упоминался в чате, как автор performance-testing-framework. И также пришла большая группа людей.
🔹Наработки: кастомный JSR223-Listener для отправки ошибок в отдельную таблицу #InfluxDB от Кирилла
🔸Обсуждение возможностей обработки и логирования ошибок в #LoadRunner. Нужно выставлять
🔸И вопросы по закрытию ошибочных транзакций по имени в LoadRunner. И сложные случаи: открытии/закрытии транзакции, которая должна была закрыться при ошибке, но в обработчике ошибки тоже произошла ошибка.
▪️Мониторинг Mosquitto (MQTT брокер от Eclipse Foundation, написанный на C/C++).
Какой-то готовой возможности мониторинга этого сервиса не нашел.
И если бы задался целью его мониторинга, то настроил бы логирование и парсил бы логи.
▪️Вопрос по отображению данных из Linux/systat (CSV, TSV) в Grafana.
🔹Проблема с Cookie в JMeter. Решилась добавлением Cookie Manager вместо ручного парсинга заголовков
▪️Обсуждение моков/заглушек, в которых можно выставить нужные задержки на ответ:
* https://mockoon.com
* https://mock-server.com
▪️Округление до целых чисел в InfluxDB 2 на #Flux
🔹Функции с параметрами с помощью функции Groovy для реализации простых условий. Пример:
🔸Как сделать запуск LoadRunner сценария плавным за счет Rump Up. В картинках и деталях.
🔺Обсуждение вариантов отправки HTTP-запросов с разных IP-адресов
* VPN, разные серверы, много + никакой настройки
* поле IP/Hostname в HTTP Request + настройка сетевой карты на много IP
* использование заголовка X-Forward-For + настройка сервера приложений на прием заголовка
🔺Вопрос по требованиям к времени отклика. Можно ли считать время 1 сек приемлемым? И интересные ответы
🔹Обсуждение родного HTML Report для Apache.JMeter
* считаю его отличным отчетом
* многие считают его плохим и не нужным
▪️Вывод многострочных текстов в #Grafana (v7). Да, такое возможно
▪️Обход Google reCAPTCHA в нагрузочном сценарии с помощью специальных ключей #reCAPTCHA
🔹Причиной постепенного увеличения времени отклика и снижения TPS в тесте стабильности может быть использование If Controller с javascript вместо groovy.
И к нам присоединился @serputko, который дал ценный комментарий по этой проблеме, а ранее упоминался в чате, как автор performance-testing-framework. И также пришла большая группа людей.
🔹Наработки: кастомный JSR223-Listener для отправки ошибок в отдельную таблицу #InfluxDB от Кирилла
🔸Обсуждение возможностей обработки и логирования ошибок в #LoadRunner. Нужно выставлять
lr_continue_on_error
. Использовать try
в LoadRunner/C не получилось.🔸И вопросы по закрытию ошибочных транзакций по имени в LoadRunner. И сложные случаи: открытии/закрытии транзакции, которая должна была закрыться при ошибке, но в обработчике ошибки тоже произошла ошибка.
▪️Мониторинг Mosquitto (MQTT брокер от Eclipse Foundation, написанный на C/C++).
Какой-то готовой возможности мониторинга этого сервиса не нашел.
И если бы задался целью его мониторинга, то настроил бы логирование и парсил бы логи.
▪️Вопрос по отображению данных из Linux/systat (CSV, TSV) в Grafana.
🔹Проблема с Cookie в JMeter. Решилась добавлением Cookie Manager вместо ручного парсинга заголовков
Set-Cookie
.▪️Обсуждение моков/заглушек, в которых можно выставить нужные задержки на ответ:
* https://mockoon.com
* https://mock-server.com
▪️Округление до целых чисел в InfluxDB 2 на #Flux
🔹Функции с параметрами с помощью функции Groovy для реализации простых условий. Пример:
${__groovy(def t = ${test_duration}; t-600 <=0 ? 1 : t-600)▪️Визуализация отчетов Yandex.Tank с InfluxDB и Grafana
🔸Как сделать запуск LoadRunner сценария плавным за счет Rump Up. В картинках и деталях.
🔺Обсуждение вариантов отправки HTTP-запросов с разных IP-адресов
* VPN, разные серверы, много + никакой настройки
* поле IP/Hostname в HTTP Request + настройка сетевой карты на много IP
* использование заголовка X-Forward-For + настройка сервера приложений на прием заголовка
🔺Вопрос по требованиям к времени отклика. Можно ли считать время 1 сек приемлемым? И интересные ответы
🔹Обсуждение родного HTML Report для Apache.JMeter
* считаю его отличным отчетом
* многие считают его плохим и не нужным
▪️Вывод многострочных текстов в #Grafana (v7). Да, такое возможно
▪️Обход Google reCAPTCHA в нагрузочном сценарии с помощью специальных ключей #reCAPTCHA
Telegram
Степа Фомичев in QA — Load & Performance
Попробуйте в test plan добавить jar нужный через add directory or jar to classpath
#дайджест сообщений чата @qa_load
🔺Каким простым инструментом можно подать 150 RPS? ab, k6, wrk, gatling, siege. Я бы и JMeter посмотрел, чтобы не гадать, как анализировать отчёт новой утилиты
🔺 Как для Yandex.Tank заполнить параметр
🔺Как на языке #flux для InfluxDB сделать выборку количества потоков для JMeter и обсуждение самого языка. А выборе между
🔺Как в #Grafana не отображать на графике точки со значением больше
🔹 Ценное замечание по запуску распределенного теста с JMeter, master и агенты должны быть в одной сети.
🔹 Ошибки при открытии jmx-файла, сделанного с нестандартными плагинами JMeter в новом JMeter без плагинов. Такие ошибки - норма. Чтобы их не было можно:
- использовать плагины только с сайта jmeter-plugins.org, тогда их можно будет установить автоматики при открытии JMeter GUI предварительно установив менеджер плагинов;
- хранить архив JMeter со всеми плагинами;
- или использовать jmeter maven plugin и хранить вместе с jmx-файлом pom.xml с описанием нужных зависимостей.
🔹 Запрос, записанный через JMeter Script Recorder, не работает в сценарии, почему так может быть (плюс второе обсуждение на эту же тему):
▫️ код 403: не добавлен HTTP Cookie Manager;
▫️ код 403: нужна аутентификация, ее также надо добавить в сценарии;
▫️ код 403: при записи процесса аутентификации по паролю, пароль записался как ****** или остался пустым, вместо корректного текста пароля;
▫️ код 403: для запроса используется CSRF-токен, который нужно скоррелировать;
▫️ код 500, а иногда 200: запрос нельзя выполнить по другим причинам, например, нельзя удалить объект А, потому что объект Б ссылается на А.
🔹Warning в логе JMeter про NullPointerException - влияет на список последних открытых проектов, появилось в версии 5.4
🔹Консольный запуск JMeter не выполняет запросы, выводит в консоль:
🔹Как в конфигурационном файле #InfluxDB настроить templates для #Graphite Endpoint, чтобы можно было передавать в influxdb три поля: Group, Controller, Request. Можно сделать template на три значения
🔺Вопрос по отправке запросов в сервис внутри #Kubernetes. Я бы также обратил внимание на статью Exposing an External IP Address to Access an Application in a Cluster
🔸Вопрос по JMESpath в Gatling, как получить первый элемент выборки. Ответ получился как в примере
🔸Как задать javaOptions для Gatling через build.sbt
🔹Вопрос по тестированию #WebSocket на .NETCore (#SignalR) с JMeter. В обсуждении обратили внимание на особый символ-разделитель сообщений, который можно задать лишь через функцию __char
🔹Как в JMeter 5.3+ выключить подсветку кода? Ответ - перейти на тему Windows
📣Конференция по тестированию Heisenbug ищет спикеров!
🔺Каким простым инструментом можно подать 150 RPS? ab, k6, wrk, gatling, siege. Я бы и JMeter посмотрел, чтобы не гадать, как анализировать отчёт новой утилиты
🔺 Как для Yandex.Tank заполнить параметр
pandora_cmd
, если бинарник pandora находится в корне проекта❓ Вопрос без ответа. Я бы указал полный путь🔺Как на языке #flux для InfluxDB сделать выборку количества потоков для JMeter и обсуждение самого языка. А выборе между
argegateWindow
с гибким aggregation_interval
и сырыми данными предпочтение у аггрегации, так как Grafana все равно не может отображает на графике больше точек, чем ширина экрана и не отображает время с точностью выше секунды🔺Как в #Grafana не отображать на графике точки со значением больше
Y_max
при выборке из InfluxDB. Был предложен вариант решения на #flux с промежуточной переменной, в которую сохраняется перцентиль от данных и по нему выполняется фильтрация. Был выбран вариант решения с помощью средств Grafana, исходники которой были изменены 🧐 чтобы поле Y-max оси Y поддерживало переменные🔹 Ценное замечание по запуску распределенного теста с JMeter, master и агенты должны быть в одной сети.
🔹 Ошибки при открытии jmx-файла, сделанного с нестандартными плагинами JMeter в новом JMeter без плагинов. Такие ошибки - норма. Чтобы их не было можно:
- использовать плагины только с сайта jmeter-plugins.org, тогда их можно будет установить автоматики при открытии JMeter GUI предварительно установив менеджер плагинов;
- хранить архив JMeter со всеми плагинами;
- или использовать jmeter maven plugin и хранить вместе с jmx-файлом pom.xml с описанием нужных зависимостей.
🔹 Запрос, записанный через JMeter Script Recorder, не работает в сценарии, почему так может быть (плюс второе обсуждение на эту же тему):
▫️ код 403: не добавлен HTTP Cookie Manager;
▫️ код 403: нужна аутентификация, ее также надо добавить в сценарии;
▫️ код 403: при записи процесса аутентификации по паролю, пароль записался как ****** или остался пустым, вместо корректного текста пароля;
▫️ код 403: для запроса используется CSRF-токен, который нужно скоррелировать;
▫️ код 500, а иногда 200: запрос нельзя выполнить по другим причинам, например, нельзя удалить объект А, потому что объект Б ссылается на А.
🔹Warning в логе JMeter про NullPointerException - влияет на список последних открытых проектов, появилось в версии 5.4
🔹Консольный запуск JMeter не выполняет запросы, выводит в консоль:
summary = 0 in 00:00:00 = ******/s Avg:0 Min: 9223372036854775807 Max: -9223372036854775808 Err:0 (0.00%)
. Причина была в том, что скрипт не находил файлы для CSV Dataset Config, расположенные в сетевом каталоге, который монтировался, вероятно, при интерактивной RDP-сессии🔹Как в конфигурационном файле #InfluxDB настроить templates для #Graphite Endpoint, чтобы можно было передавать в influxdb три поля: Group, Controller, Request. Можно сделать template на три значения
*.*.*
а соответствующие теги назвать group.controller.request
. Также был предложен вариант не разделять поля на три - оставить одно поле, в котором будут все три значения разделенные пробелом, и использовать регулярные выражения для фильтрации🔺Вопрос по отправке запросов в сервис внутри #Kubernetes. Я бы также обратил внимание на статью Exposing an External IP Address to Access an Application in a Cluster
🔸Вопрос по JMESpath в Gatling, как получить первый элемент выборки. Ответ получился как в примере
🔸Как задать javaOptions для Gatling через build.sbt
🔹Вопрос по тестированию #WebSocket на .NETCore (#SignalR) с JMeter. В обсуждении обратили внимание на особый символ-разделитель сообщений, который можно задать лишь через функцию __char
🔹Как в JMeter 5.3+ выключить подсветку кода? Ответ - перейти на тему Windows
📣Конференция по тестированию Heisenbug ищет спикеров!
Telegram
Степа Фомичев in QA — Load & Performance
Ребят, всем добрый день. Кто-нибудь знает простой способ нагрузить в 150 рпс http метод без сложных инструментов? Мб что-то консольное. что справится с такой нагрузкой
🔹Почему "User-Defined Cookies" в HTTP Cookie Manager не перетирается при получении ответа от сервера с заголовком Set Cookie, а приводит к появлению двух Cookie (дублирование)? Проблему получилось обойти задав Path для "User-Defined Cookies" не
🔸Gatling OSS может выполнять распределенный тест и Gatling Frontline тоже. Отличие в том, что для Gatling OSS из коробки не поставляется Grafana Dashboard, который отображает результаты распределенного теста, а для Frontline такая отчетность есть. Если k6 (open source версию) получится запустить распределённо, то денег также не потребуют.
🔺Нужно ли загружать статику (шрифты, js, css, картинки) при записи скрипта? Мнения (-) разделились (+): обсуждение очень интересное. Усредненный ответ - да нужно, важно правильно подобрать пропорцию. А в обсуждении отмечено, что если понятие юзер заменить понятием бизнес-сценарий, который состоит из операций, то становится проще. И допустим сценарий, где у пользователя вся статика берется из кеша браузера - запрашивать ее не надо, а есть сценарий, где она скачивается. У сценариев может быть разная интенсивность.
🔹Если в сценарии нужно выполнить три операции с разными интенсивностями 20 RPS, 30 RPS и 40 RPS, то как это сделать?
▫️Для независимых операций - сделать три отдельные Thread Group.
▫️Для зависимых - нужно будет или настроить передачу данных между Thread Group
▫️... или объединить операции в одну Thread Group и использовать Throughput Controller - будет базовая интенсивность 40 RPS, но первая операция будет выполняться с вероятностью 20/40, а вторая 30/40.
❓Что почитать про мониторинг #OpenShift? Вопрос пока без ответа
🔹Запуск JMeter в #Kubernetes - лучше выделить для нагрузочных станций отдельное пространство с taint.
🔺Как управлять нагрузкой на N сервисов? Написать N простых сценариев лучше, чем написать один, но сложный
🔸Вопрос по настройке Monitoring Plugin для Yandex.Tank. Остался без ответа. Описан в документации
🔸Для подачи нагрузки на IBM.MQ в Gatling нужен JMS Plugin
🔸В Gatling нет консольного графика с количеством пользователей, есть только консольный прогресс выполнения
🔹Как задать Working Directory в JMeter? Думаю так:
🔹При работе с Simple Data Writer удобно задать jmeter.save.saveservice.base_prefix =
Это был #дайджест обсуждений в чате @qa_load
/
а более строгий: /co/authenticate
🔹Тестирование потокового видео #WebRTC с JMeter. Посоветовали использовать HLSPlugin и KITE🔸Gatling OSS может выполнять распределенный тест и Gatling Frontline тоже. Отличие в том, что для Gatling OSS из коробки не поставляется Grafana Dashboard, который отображает результаты распределенного теста, а для Frontline такая отчетность есть. Если k6 (open source версию) получится запустить распределённо, то денег также не потребуют.
🔺Нужно ли загружать статику (шрифты, js, css, картинки) при записи скрипта? Мнения (-) разделились (+): обсуждение очень интересное. Усредненный ответ - да нужно, важно правильно подобрать пропорцию. А в обсуждении отмечено, что если понятие юзер заменить понятием бизнес-сценарий, который состоит из операций, то становится проще. И допустим сценарий, где у пользователя вся статика берется из кеша браузера - запрашивать ее не надо, а есть сценарий, где она скачивается. У сценариев может быть разная интенсивность.
🔹Если в сценарии нужно выполнить три операции с разными интенсивностями 20 RPS, 30 RPS и 40 RPS, то как это сделать?
▫️Для независимых операций - сделать три отдельные Thread Group.
▫️Для зависимых - нужно будет или настроить передачу данных между Thread Group
▫️... или объединить операции в одну Thread Group и использовать Throughput Controller - будет базовая интенсивность 40 RPS, но первая операция будет выполняться с вероятностью 20/40, а вторая 30/40.
❓Что почитать про мониторинг #OpenShift? Вопрос пока без ответа
🔹Запуск JMeter в #Kubernetes - лучше выделить для нагрузочных станций отдельное пространство с taint.
🔺Как управлять нагрузкой на N сервисов? Написать N простых сценариев лучше, чем написать один, но сложный
🔸Вопрос по настройке Monitoring Plugin для Yandex.Tank. Остался без ответа. Описан в документации
🔸Для подачи нагрузки на IBM.MQ в Gatling нужен JMS Plugin
🔸В Gatling нет консольного графика с количеством пользователей, есть только консольный прогресс выполнения
🔹Как задать Working Directory в JMeter? Думаю так:
cd /tmp ; /opt/jmeter/bin/jmeter ...
- вот тут рабочим каталогом будет /tmp🔹При работе с Simple Data Writer удобно задать jmeter.save.saveservice.base_prefix =
./
вместо ~/
... пока все, а то что-то очень много сообщенийЭто был #дайджест обсуждений в чате @qa_load
Telegram
Mikhail Sedov in QA — Load & Performance
Добрый день, товарищи!
Подскжите пожалуйста насчет использования cookies в JMeter.
Использую в скрипте "HTTP Cookie Manager" и задаю в поле "User-Defined Cookies" этого компонента cookie "did = none". Затем в ответ на HTTPS запрос получаю команду "SET-COOKIE…
Подскжите пожалуйста насчет использования cookies в JMeter.
Использую в скрипте "HTTP Cookie Manager" и задаю в поле "User-Defined Cookies" этого компонента cookie "did = none". Затем в ответ на HTTPS запрос получаю команду "SET-COOKIE…
Всем привет!
Материалы доклада по мониторингу JVM:
https://polarnik.github.io/JVM-performance-monitoring
Рассказывал про:
- технологии мониторинга
- агенты #jolokia и #jmx_exporter
- JMX/RMI и #JSR-160
- утилиту #jmc
- составление конфигов
- накладные расходы на мониторинг
Материал готовился для митапа Neat Talk 11
Материалы доклада по мониторингу JVM:
https://polarnik.github.io/JVM-performance-monitoring
Рассказывал про:
- технологии мониторинга
- агенты #jolokia и #jmx_exporter
- JMX/RMI и #JSR-160
- утилиту #jmc
- составление конфигов
- накладные расходы на мониторинг
Материал готовился для митапа Neat Talk 11
Приветствую вас, дорогие любители высоких нагрузок!
Мы определились с датами, платформой и темой первого мероприятия в свободной форме.
По результатам голосования - победила тема "Построение тестирования производительности с нуля".
По данной теме мы расскажем:
- Необходимость тестирования производительности на проекте
- Как стартануть проект в продуктовой/аутсорс команде
- Интеграция проекта в процесс рабработки и взаимодействие между участниками проекта
- Какие инструменты использовать
- Конечная точка развития тестирования производительности на проекте
Наши Спикеры:
- Смирнов Вячеслав. Исследователь артефактов НТ из банка ВТБ.
- Кирилл Юрков. Выстраивает НТ с нуля в компании "Самокат".
- Степан Фомичев. Работал перфоманс инженером в аутсорс компании, на данный момент разрабатывает инстурмент НТ Boomq.
- Рогожников Максим. Отвечает за внедрение тестирования производительности в команды разработки продуктов Tinkoff.ru
- Ахальцев Иоанн. Make Performance Great Again, разработка инструмента тестирования производительности Tinkoff Cosmos.
Рассмотрим связанные с темой вопросы из чата:
- Сервисный и продуктовый подход в тестировании производительности
- Обязанности перформанс инженера
- Зоны росты
и многие другие
Обсуждение произойдёт прямо в этом чате 25.03.2021 в 19:00 при помощи нового обновления Telegram и Голосовых чатов 2.0.
Обязательно проверьте, что вы обновили клиенты Telegram, котроый поддерживают новые Голосовые чаты. (Апдейты после 19 марта).
Следите за нашими анонсами!
Мы определились с датами, платформой и темой первого мероприятия в свободной форме.
По результатам голосования - победила тема "Построение тестирования производительности с нуля".
По данной теме мы расскажем:
- Необходимость тестирования производительности на проекте
- Как стартануть проект в продуктовой/аутсорс команде
- Интеграция проекта в процесс рабработки и взаимодействие между участниками проекта
- Какие инструменты использовать
- Конечная точка развития тестирования производительности на проекте
Наши Спикеры:
- Смирнов Вячеслав. Исследователь артефактов НТ из банка ВТБ.
- Кирилл Юрков. Выстраивает НТ с нуля в компании "Самокат".
- Степан Фомичев. Работал перфоманс инженером в аутсорс компании, на данный момент разрабатывает инстурмент НТ Boomq.
- Рогожников Максим. Отвечает за внедрение тестирования производительности в команды разработки продуктов Tinkoff.ru
- Ахальцев Иоанн. Make Performance Great Again, разработка инструмента тестирования производительности Tinkoff Cosmos.
Рассмотрим связанные с темой вопросы из чата:
- Сервисный и продуктовый подход в тестировании производительности
- Обязанности перформанс инженера
- Зоны росты
и многие другие
Обсуждение произойдёт прямо в этом чате 25.03.2021 в 19:00 при помощи нового обновления Telegram и Голосовых чатов 2.0.
Обязательно проверьте, что вы обновили клиенты Telegram, котроый поддерживают новые Голосовые чаты. (Апдейты после 19 марта).
Следите за нашими анонсами!
Запись с диалога. Поговорили о том как разворачивать НТ с нуля и не только.