📢 Load & Performance
886 subscribers
32 photos
3 files
98 links
Избранные материалы о тестировании производительности.
Чат и источник тем: @qa_load
Download Telegram
Очередной #дайджест обсуждений в чате @qa_load

🔺Рассказ от Степана Фомичева о том, как можно повернуть собеседование в свою сторону. И отвечая на вопрос о нагруженных системах продемонстрировать компетенции.

🔺Интересная задача с 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.1
🔹Иногда, если не удается загрузить jar/класс в JMeter поможет загрузка его из JMX-сценария, через Add directory or jar to classpath в Test Plan.

🔹Причиной постепенного увеличения времени отклика и снижения 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
#дайджест сообщений чата @qa_load

🔺Каким простым инструментом можно подать 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 ищет спикеров!
🔹Почему "User-Defined Cookies" в HTTP Cookie Manager не перетирается при получении ответа от сервера с заголовком Set Cookie, а приводит к появлению двух Cookie (дублирование)? Проблему получилось обойти задав Path для "User-Defined Cookies" не / а более строгий: /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
Всем привет!
Материалы доклада по мониторингу 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 марта).

Следите за нашими анонсами!
Запись с диалога. Поговорили о том как разворачивать НТ с нуля и не только.
Тестирование производительности с 0-ля (25 марта 2021 года)
QA — Load & Performance
1:56 знакомство
5:10 отличия аутсорса, аутстаффа и продуктовой разработки
18:27 почему аутстафф а не найм
22:35 НТ можно внедрить в планирование релизов
25:15 НТ тянет за собой культуру разработки вообще
26:35 о заинтересованности в НТ
29:00 об обосновании необходимости и возможности НТ
34:40 связи автоматизации АТ и НТ
36:42 принципы и инструменты НТ
46:24 с чего начать тестирование
59:37 как оценить успешность нагрузки
1:02:42 как быть с методикой
1:05:40 как интегрировать НТ в разработку
1:14:55 долгое НТ стоит выносить в отдельный пайплайн
1:17:30 о тестировании с помощью микробенчмарков
1:20:55 конечная точка развития НТ
1:22:10 об автоматизации построения отчётов
1:29:02 о более тесном взаимодействии с продуктом
1:30:34 рутина автоматизирована
1:32:40 вопросы чата
1:32:47 опыт и советы насчёт НТ микросервисов
1:38:16 как автоматизировать отчёт
1:40:10 ещё раз про тестирование микросервисов
1:40:50 ещё раз, во что развивать НТ
1:44:15 о тестировании на проде
1:46:04 о развитии НТ в проекте и НТ инженеров
Forwarded from Valeria K.
Коллеги, в следующий вторник Илья Космодемьянский и Андрей Сальников из dataegret.ru будут беседовать в голосовом чате с Алексеем Ваховым, техническим директором UCHi.RU о том, как обеспечить стабильность работы баз данных при активной разработке и о том что происходило в компании когда в Апреле прошлого года количество пользователей платформы, одновременно находящихся на сайте, возросло от 30 000 до 240 000.

Планируется интерактивная сессия в формате посиделок, с вопросами из “зала”. Будем рады ответить на вопросы и послушать ваши истории об организации работы с опенсорсом. Присоединяйтесь! bit.ly/DataEgret_chat
30 марта в 19:00 МСК
Материалы доклада "Мониторинг производительности JVM"
Смирнов Вячеслав, ВТБ

Готовилось для Neat Talks 11 (18.03.2021)
Видео: https://youtu.be/31XdtPJ_v5Y?t=3205
Слайды: https://polarnik.github.io/JVM-performance-monitoring/
Если какой-то слайд не отображается, обновите страницу, это HTML-документ
Слайды одним pdf-документом: https://drive.google.com/file/d/1PMisWJ_DkEjRn0V6JDFjbAOfR4qs0l1M/view?usp=sharing
Анонс!
Многие помнят, что чуть больше месяца назад мы записывали здесь пробный выпуск "подкаста" по теме "Построение НТ с нуля" (его можно найти здесь https://t.me/qa_load/45851).
Мы собрали фидбэк, постарались его учесть и готовим следующий выпуск после майских праздников (дата будет уточняться), на тему "Рынок НТ, вакансии и требования".
Чтобы сделать выпуск более живым и актуальным, предлагаем вам, как и в прошлый раз, накидать вопросов в секцию Q/A
(а если еще не голосовали за темы, то и там можно выбрать варианты) https://app.sli.do/event/kam0un2a/live/polls.
https://dump-ekb.ru/testing-qa
14 мая @gim6626 (Дмитрий Винокуров, Miro) будет выступать на конференции DUMP в Екатеринбурге
с темой:
Путь от одного человека до распределённой команды нагрузочного тестирования

А @ant_nch (Антон Нечеухин, Miro) с темой
Структура QA в крупной компании
который ранее выступал на DUMP с темой
Достоверный нагрузочный тест c учетом непредвиденных нюансов
https://youtu.be/oNdVWREIfoY

Темы интересные
Билет на Online-трансляцию стоит 3500 рублей
💥Анонсируем второй выпуск подкаста, теперь темой обсуждения будет "Рынок НТ, от вакансий до собеседований".

На повестке:
- обсудим разницы грейдов,
- поговорим о зарплатах,
- расскажем как сами проводим собеседования
- а еще о жизни нагрузочника вне финтеха и многое другое

Постараемся пригласить коллег от HR и в конце бонусом проведем пробное собеседование рандомному желающему из чата (если такие будут).

Дата подкаста - 19.05.21. Точное время анонсируем используя новый функционал телеграмма - "отложенные войс чаты", в верхней части чата появится временная мета до начала подкаста. Сделаем это заранее, так что не пропустите :)

Формат - как и в прошлый раз войс чат телеграмма, запись выложим.

Ждем всех!
Подкаст запущен! Присоединяйтесь
Рынок НТ от вакансий до собеседований
QA — Load & Performance
Запись сегодняшнего подкаста. Будем рады любому фидбеку. Временные метки постараемся внести в ближайшее время - они появятся в этом сообщении. Всем классных вакансий 🎧
Друзья!

Приглашаем вас на 7-ю ежегодную конференцию по нагрузочному тестированию, которая состоится 16 сентября 2021 года в Москве (оффлайн и онлайн форматы).

Кому будет интересно:
- инженеру в области нагрузочного тестирования,
- разработчику высокопроизводительных приложений,
- руководителю ИТ-департамента,
- менеджеру ИТ-проектов;

Что вы узнаете:
- как решать проблемы высокопроизводительных систем,
- оригинальные технологические подходы к процессу тестирования производительности ИТ-систем,
- новые методики и свежие идеи для повышения отказоустойчивости ИТ-систем,
- успешные практические советы и кейсы,
- современные технологии и новые тенденции нагрузочного тестирования,
- последние новости из этой области от профессионалов и лидеров рынка тестирования,

Регистрируйтесь, мы ждем вас http://perfconf.ru/
Конференция по тестированию Heisenbug ищет спикеров 🔥

Вам есть о чем рассказать и что обсудить с коллегами по цеху? Тогда вам нужно подать заявку на участие в конференции! Осенний Heisenbug пройдет в гибридном формате: онлайн+офлайн.

Темы, которые будут интересны:
✔️Функциональное тестирование;
✔️Нагрузочное тестирование;
✔️SDET;
✔️DevOps в тестировании.

Но не ограничивайте себя этим списком — вы можете подать заявку с любой темой из области тестирования. 

Если все-таки сомневаетесь, то программный комитет всегда готов обсудить актуальность темы и помочь выбрать правильный вектор доклада. Плюс, ребята помогут с прокачкой ваших ораторских навыков, если у вас мало опыта в публичных выступлениях.

👉 Подать заявку и узнать подробности можно на сайте.
Вопросы присылайте на почту program@heisenbug.ru
Материалы доклада
Профилирование #JVM в #Kubernetes

https://heisenbug-piter.ru/2021/spb/talks/7xxou7lmwvn6xnfrx4atnd/
Слайды доступны на странице доклада.
Или так: https://polarnik.github.io/JVM-profiling-in-Kubernetes/

В тему доклада было обсуждение в подкасте Битовая каска (29 апр. 2021 г):
Профилирование приложений: https://youtu.be/hUW7-pTOlaI
Всем привет! Есть новости для тех, кто раздумывает посетить конференцию по нагрузке в Москве, 16 сентября этого года.

Начну с хорошей. Для участников сообщества скидка на билеты будет 50%. Надо быть физическим лицом, и ввести промокод
50% от 12 000 = 6 000 рублей за offline билет

Таких промокодов пока 10 только, поэтому если
▫️16 сентября будет свободное время
▫️и будет возможность быть в Москве
▫️и есть 6000 рублей на билет
то пройдите опрос ниже.

В понедельник раздадим промокоды среди тех, что выбрал вариант "Мне будет нужен промокод на скидку"

+1 к дипломатии, +10 к потенциальным участникам
ссылка на голосование:
https://t.me/qa_load/55797

Ссылка на саму конфу:
https://perfconf.ru/
Forwarded from Venera Kasimova
Доброе утро! Сегодня и завтра 8-9 июля пройдет PG Day'21 Russia. Участие бесплатное. Начало в 10:00 МСК, трансляцию можно посмотреть на YouTube. Для общения со спикерами и другими участниками подключайтесь к Slack каналу конференции.