publicclassSomeScenarioextendsAbstractScenario{
int errorCount = 0;
publicbooleanhelloWorld(){
this.log.info("Hello World!");
}
}
Легко отлаживаемые методы классов
publicclassSomeScenarioextendsAbstractScenario{
int errorCount = 0;
publicbooleanhelloWorld(){
this.log.info("Hello World!");
}
}
Которые вызывать в lambda-выражениях
publicclassSomeScenarioextendsAbstractScenario{
int errorCount = 0;
publicbooleanhelloWorld(){
this.log.info("Hello World!");
}
}
publicclassZeroTest{
@Testpublicvoidzero()throws IOException {
TestPlanStats stats = testPlan(
threadGroup(1, 1,
jsr223Sampler("zero", v -> {
new SomeScenario(v).helloWorld();
}))).run();
}
}
JUnit удобен для отладки, запуска, ... JMeter Java-DSL
TestId/RunId/*Id или Start+StopTime для сравнения тестов
4.Start/Stop-time и их фиксация при отладке
Grafana и сравнение метрик из Prometheus, Victoria, InfluxDB
Jenkins и фиксация моментов старта и завершения теста
JUnit для фиксации Start/Stop-time при отладке
Grafana и сравнение метрик Prometheus, InfluxDB, ...
Grafana и сравнение метрик Prometheus, InfluxDB, ...
1. Отобразить таблицу по первому тесту:
- "Start" и "Stop", тип "tag"/"label", формат unixTimeStamp
2. При клике по строке первой таблицы сохраняем в URL:
- from=Start, to=Stop, Start1=Start
3. Отобразить таблицу по второму тесту
- "Start" и "Stop", тип "tag"/"label", формат unixTimeStamp
- Start1 - дополнительная колонка из переменной Start1
- Offset - вычисляемая колонка Start1-Start
4. При клике по строке второй таблицы сохраняем в URL:
- Offset=Offset
5. Отобразить метрики по первому и второму тестам
- по первому просто от from до to
- по второму со смещением Offset
Как сохранить Start/Stop-time для каождого запуска теста?
JUnit удобен для простых в анализе тестов с параметрами
Надежные и простые тесты на циклах и потоках
7.@RepeatedTest для тестов масштабируемости
@Execution(ExecutionMode.SAME_THREAD)publicclassALotOfLiteMember{
static LinkedBlockingQueue<HazelcastInstance> queueHz =
new LinkedBlockingQueue<>();
static LinkedBlockingQueue<Integer> queueStop =
new LinkedBlockingQueue<>();
@RepeatedTest(40)publicvoidConnectToHazelcast()throws InterruptedException {
var config = new ConfigBuilder().buildConfig();
var hazelcastInstance =
Hazelcast.newHazelcastInstance(config);
queueHz.put(hazelcastInstance);
queueStop.poll(30, TimeUnit.SECONDS);
}
}
40 итераций с паузами по 30 секунд между ними
@Execution(ExecutionMode.SAME_THREAD)publicclassALotOfLiteMember{
static LinkedBlockingQueue<HazelcastInstance> queueHz =
new LinkedBlockingQueue<>();
static LinkedBlockingQueue<Integer> queueStop =
new LinkedBlockingQueue<>();
@RepeatedTest(40)publicvoidConnectToHazelcast()
throws InterruptedException {
var config = new ConfigBuilder().buildConfig();
var hazelcastInstance =
Hazelcast.newHazelcastInstance(config);
queueHz.put(hazelcastInstance);
queueStop.poll(30, TimeUnit.SECONDS);
}
}
8.@Execution(ExecutionMode.CONCURRENT)
@Execution(ExecutionMode.CONCURRENT)publicclassClusterBench{
static Cluster cluster = new ClusterImpl();
@RepeatedTest(30)publicvoidgetOptionalParam(){
int loop = 10000 * 2;
for (int i = 0; i < loop; i++) {
cluster.getOptionalParam(i);
} } }
Можно тестировать в несколько потоков
JUnit удобен для простых тестов с итерациями и паузами
Начни свой день с кофе
Начни свой тест с JUnit !
JUnit для нагрузки: «Начни свой тест с JUnit!»
Чем JUnit полезен нагрузочнику
Gatling и его отладка c @Test
JMeter-Java-DSL и его отладка c @Test
Start/Stop-time и их фиксация при отладке
TestId/RunId/*Id и его генерация при отладке
@ParameterizedTest или параметры как код
@RepeatedTest для тестов масштабируемости
@Execution(ExecutionMode.CONCURRENT) для многопоточности
Смирнов Вячеслав | Miro, qa_load, smirnovqa
polarnik.github.io/junit-for-load-testing/
Повышаю качество более десяти лет. Занимаюсь системой дистанционного банковского обслуживания юридических лиц. Основной профиль моей работы — тестирование производительности. Развиваю сообщество инженеров по тестированию производительности, помогая коллегам в telegram чате «QA — Load & Performance».