Hi,
Seems a good approach for DSL features, Java/Kotlin as language seems
good too.
Probably need:
* add a new page on manual to describe and explain how to create DSL
plan (with your samples below)
* and (perhaps) indicate that is a 'beta' features, and will be improve
in next version of JMeter.
Milamber
On 06/06/2023 21:20, Vladimir Sitnikov wrote:
I've been improving tests, and I realized there's a small change that
brings a decent way to build test plans.
I've updated PR https://github.com/apache/jmeter/pull/678
The PR includes samples for both Kotlin and Java
(see OpenModelThreadGroupConfigElementTest
and OpenModelThreadGroupConfigElementJavaTest).
I think we can merge it and make incremental improvements later.
The good part is that DSL is usable for all the components with no
modifications.
I might miss certain cases, however, it looks nice, at least for testing
JMeter itself.
WDYT?
Here's Java code:
HashTree tree = testTree(b -> {
b.add(TestPlan.class, tp -> {
b.add(OpenModelThreadGroup.class, tg -> {
tg.setName("Thread Group");
// 5 samples within 100ms
// Then 2 sec pause to let all the threads to finish,
especially the ones that start at 99ms
tg.setScheduleString("rate(50 / sec) random_arrivals(100 ms)
pause(2 s)");
b.add(listener);
b.add(CounterConfig.class, c -> {
c.setVarName("counter");
c.setIncrement(1);
});
b.add(DebugSampler.class, dbg -> {
dbg.setName("${counter}");
dbg.setDisplayJMeterProperties(false);
dbg.setDisplayJMeterVariables(false);
dbg.setDisplaySystemProperties(false);
});
});
});
});
Here's Kotlin code:
val tree = testTree {
TestPlan::class {
OpenModelThreadGroup::class {
name = "Thread Group"
// 5 samples within 100ms
// Then 2 sec pause to let all the threads to finish,
especially the ones that start at 99ms
scheduleString = "rate(50 / sec) random_arrivals(100 ms)
pause(2 s)"
listener()
CounterConfig::class {
varName = "counter"
increment = 1
}
DebugSampler::class {
name = "\${counter}"
isDisplayJMeterProperties = false
isDisplayJMeterVariables = false
isDisplaySystemProperties = false
}
}
}
}
Vladimir