Size: a a a

QA — Load & Performance

2020 August 13

VG

Viktor Ganeles in QA — Load & Performance
будем честны. Не так уж часто эта правда нужна.
либо у нас низкая интенсивность и всё "по-честному", либо у нас высокая интенсивность, и если уж мы хотим график - нам всё равно нужна агрегация, ибо график на 100500 точек строить никому не нужно.
источник

S7

Sam 7 in QA — Load & Performance
Всем привет. Есть потребность отправки джиметрового отчета пост запросом. Проблема в том, что на момент отправки отчет не сформирован полностью. Пробовал проверять список открытых файлов, пробовал чекать размер отчета (чтобы понять что он готов), но оп всему похоже, что джиметр заканчивает запись после завершения логики в tearDown. В связи с чем вопрос - кто то решал подобную задачу? Т к я сейчас вижу один выход - написать на джаве либу, которую будет стартовать джиметр в сетапе. Эта либа будет слушать например юдп порт, на который я в tearDown буду слать имя отчета. Далее эта либа будет проверять готов ли отчет и отправлять пост запрос.
источник

KY

Kirill Yurkov in QA — Load & Performance
Viktor Ganeles
будем честны. Не так уж часто эта правда нужна.
либо у нас низкая интенсивность и всё "по-честному", либо у нас высокая интенсивность, и если уж мы хотим график - нам всё равно нужна агрегация, ибо график на 100500 точек строить никому не нужно.
итого - 99 персентиль случаев данное решение покрывает :D
источник

VG

Viktor Ganeles in QA — Load & Performance
в tearDown дёргай osSampler, который запускется в отдельном процессе, мониторит готовность отчёта и засылает его wget-ом
источник

VG

Viktor Ganeles in QA — Load & Performance
Sam 7
Всем привет. Есть потребность отправки джиметрового отчета пост запросом. Проблема в том, что на момент отправки отчет не сформирован полностью. Пробовал проверять список открытых файлов, пробовал чекать размер отчета (чтобы понять что он готов), но оп всему похоже, что джиметр заканчивает запись после завершения логики в tearDown. В связи с чем вопрос - кто то решал подобную задачу? Т к я сейчас вижу один выход - написать на джаве либу, которую будет стартовать джиметр в сетапе. Эта либа будет слушать например юдп порт, на который я в tearDown буду слать имя отчета. Далее эта либа будет проверять готов ли отчет и отправлять пост запрос.
это тебе выше было
источник

VG

Viktor Ganeles in QA — Load & Performance
Kirill Yurkov
итого - 99 персентиль случаев данное решение покрывает :D
я к 90-му привык, но не суть важно :)
источник

A

Alex in QA — Load & Performance
Sam 7
Всем привет. Есть потребность отправки джиметрового отчета пост запросом. Проблема в том, что на момент отправки отчет не сформирован полностью. Пробовал проверять список открытых файлов, пробовал чекать размер отчета (чтобы понять что он готов), но оп всему похоже, что джиметр заканчивает запись после завершения логики в tearDown. В связи с чем вопрос - кто то решал подобную задачу? Т к я сейчас вижу один выход - написать на джаве либу, которую будет стартовать джиметр в сетапе. Эта либа будет слушать например юдп порт, на который я в tearDown буду слать имя отчета. Далее эта либа будет проверять готов ли отчет и отправлять пост запрос.
а почему нельзя просто прогнать тест, сгенерить отчет, а потом вгетом заслать отчет?
источник

VG

Viktor Ganeles in QA — Load & Performance
Sam 7
Всем привет. Есть потребность отправки джиметрового отчета пост запросом. Проблема в том, что на момент отправки отчет не сформирован полностью. Пробовал проверять список открытых файлов, пробовал чекать размер отчета (чтобы понять что он готов), но оп всему похоже, что джиметр заканчивает запись после завершения логики в tearDown. В связи с чем вопрос - кто то решал подобную задачу? Т к я сейчас вижу один выход - написать на джаве либу, которую будет стартовать джиметр в сетапе. Эта либа будет слушать например юдп порт, на который я в tearDown буду слать имя отчета. Далее эта либа будет проверять готов ли отчет и отправлять пост запрос.
для windows есть команда "start", которая выполняет задачу в отдельном процессе, соответственно osSampler дёргает
"start WhaitAndSendReport.bat" и сразу завершается.

а  WhaitAndSendReport.bat (невидимый для жметра) ждёт, пока отчёт сгенерится и засылает результат.
источник

СФ

Степа Фомичев... in QA — Load & Performance
Sam 7
Всем привет. Есть потребность отправки джиметрового отчета пост запросом. Проблема в том, что на момент отправки отчет не сформирован полностью. Пробовал проверять список открытых файлов, пробовал чекать размер отчета (чтобы понять что он готов), но оп всему похоже, что джиметр заканчивает запись после завершения логики в tearDown. В связи с чем вопрос - кто то решал подобную задачу? Т к я сейчас вижу один выход - написать на джаве либу, которую будет стартовать джиметр в сетапе. Эта либа будет слушать например юдп порт, на который я в tearDown буду слать имя отчета. Далее эта либа будет проверять готов ли отчет и отправлять пост запрос.
Отчёт посылается лисенером же?
источник

VG

Viktor Ganeles in QA — Load & Performance
Alex
а почему нельзя просто прогнать тест, сгенерить отчет, а потом вгетом заслать отчет?
сэм не хочет делать это руками, хочет что бы отчёт автоматом по завершению теста засылался
источник

ВС

Вячеслав Смирнов... in QA — Load & Performance
Kirill Yurkov
есть такая проблема но, применимо к jmeter там не совсем всё так плохо.
во-первых jmeter высчитывает каждую метрику на ходу и пакует её в 5-ти секундный интервал, усредненную, но это метрики по голым данным персентилей и медиан каждого запроса внутри этого интервала, а не 99 персентиль от среднего или агрегированного значения.
во-вторых для уменьшения степени усреднения этой агрегации можно менять частоту отправки данных в инфлюкс
в-третьих, безусловно, надо ловить метрики отклонений помимо перснетилей и тогда можно будет говорить о +- хорошем и показательном мониторинге)
Согласен. В JMeter и Gatling перцентили нужны. Стандарт визуализации тут задаёт Gatling.

Я когда попробовал тот же подход применить для визуализации размера Eden Space в JVM, то столкнулся с проблемой, долговременного хранения перцентилей.

От JVM поступают значения в моменте. Чтобы их отобразить за 3-4 дня, с тем же визуальным рядом, как в Gatling, то просто хранить две метрики - среднее и отклонение от среднего. А хранить перцентили сложно. Для каждой гранулярности нужно хранить свой перцентиль.
источник

KY

Kirill Yurkov in QA — Load & Performance
Sam 7
Всем привет. Есть потребность отправки джиметрового отчета пост запросом. Проблема в том, что на момент отправки отчет не сформирован полностью. Пробовал проверять список открытых файлов, пробовал чекать размер отчета (чтобы понять что он готов), но оп всему похоже, что джиметр заканчивает запись после завершения логики в tearDown. В связи с чем вопрос - кто то решал подобную задачу? Т к я сейчас вижу один выход - написать на джаве либу, которую будет стартовать джиметр в сетапе. Эта либа будет слушать например юдп порт, на который я в tearDown буду слать имя отчета. Далее эта либа будет проверять готов ли отчет и отправлять пост запрос.
я в jenkins читал файл логов заранее зная сколько раз его нужно прочитать. jmeter пишет каждые ~30 сек туда. итого длительность теста/30 сек + 1 почти гарантирует тебе то что он стопнулся.
после окончания делал генерацию отчета
источник

СФ

Степа Фомичев... in QA — Load & Performance
import org.apache.jmeter.testelement.TestStateListener;
import org.apache.jorphan.collections.SearchByClass;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterContext;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jorphan.collections.HashTree;
import java.lang.reflect.Field;

JMeterContext ctx = JMeterContextService.getContext();
StandardJMeterEngine engine = ctx.getEngine();

Field f = engine.getClass().getDeclaredField("test");
f.setAccessible(true);

HashTree hash = (HashTree) f.get(engine);

SearchByClass<TestStateListener> testListeners = new SearchByClass<>(TestStateListener.class); // TL - S&E
hash.traverse(testListeners);

for (TestStateListener listener : testListeners.getSearchResults()) {
   try {
       log.info(listener.toString());
       listener.testEnded();
   } catch (Exception ex) {
       log.warn("Error encountered during shutdown of " + listener.toString(), ex);
   }
}
источник

СФ

Степа Фомичев... in QA — Load & Performance
Вот так я у себя сделал, в jsr sampler`e в tear down thred group, после чего посылал все что мне нужно
источник

СФ

Степа Фомичев... in QA — Load & Performance
Грязновато, но для моего кейса лучше решения не нашел
источник

ВС

Вячеслав Смирнов... in QA — Load & Performance
Недавно делал dashboard по JMeter. Чтобы не усреднять перцентили, на график стал выводить перцентиль 95 линией толщины 1, и максимум от перцентиля 95 за 120 сек линией толщины 4. Получилось понятно команде, вопросов не вызвало:

Ступени перцентилей, а под ними биение значений.
источник

KY

Kirill Yurkov in QA — Load & Performance
Степа Фомичев
import org.apache.jmeter.testelement.TestStateListener;
import org.apache.jorphan.collections.SearchByClass;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterContext;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jorphan.collections.HashTree;
import java.lang.reflect.Field;

JMeterContext ctx = JMeterContextService.getContext();
StandardJMeterEngine engine = ctx.getEngine();

Field f = engine.getClass().getDeclaredField("test");
f.setAccessible(true);

HashTree hash = (HashTree) f.get(engine);

SearchByClass<TestStateListener> testListeners = new SearchByClass<>(TestStateListener.class); // TL - S&E
hash.traverse(testListeners);

for (TestStateListener listener : testListeners.getSearchResults()) {
   try {
       log.info(listener.toString());
       listener.testEnded();
   } catch (Exception ex) {
       log.warn("Error encountered during shutdown of " + listener.toString(), ex);
   }
}
не понял, что код делает?)
источник

СФ

Степа Фомичев... in QA — Load & Performance
Я закрываю все лисенеры, они делают флаш в файл перед закрытием, и я могу работать с файлами, точно зная что они завершенные до завершения процесса meter
источник

KY

Kirill Yurkov in QA — Load & Performance
Степа Фомичев
Я закрываю все лисенеры, они делают флаш в файл перед закрытием, и я могу работать с файлами, точно зная что они завершенные до завершения процесса meter
годно
источник

KY

Kirill Yurkov in QA — Load & Performance
Степа Фомичев
import org.apache.jmeter.testelement.TestStateListener;
import org.apache.jorphan.collections.SearchByClass;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterContext;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jorphan.collections.HashTree;
import java.lang.reflect.Field;

JMeterContext ctx = JMeterContextService.getContext();
StandardJMeterEngine engine = ctx.getEngine();

Field f = engine.getClass().getDeclaredField("test");
f.setAccessible(true);

HashTree hash = (HashTree) f.get(engine);

SearchByClass<TestStateListener> testListeners = new SearchByClass<>(TestStateListener.class); // TL - S&E
hash.traverse(testListeners);

for (TestStateListener listener : testListeners.getSearchResults()) {
   try {
       log.info(listener.toString());
       listener.testEnded();
   } catch (Exception ex) {
       log.warn("Error encountered during shutdown of " + listener.toString(), ex);
   }
}
#jmeter #listener_close
источник