forked from abstracta/jmeter-java-dsl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcore.puml
455 lines (333 loc) · 9.67 KB
/
core.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
@startuml
!include style.puml
class JmeterDsl {
..
}
package core {
interface DslTestElement {
HashTree buildTreeUnder(HashTree parent, BuildTreeContext context)
void showInGui()
}
class BuildTreeContext {
Map<String, Object> entries
Map<DslVisualizer, Supplier<Component>> visualizers
}
interface TreeContextEndListener {
void execute(BuildTreeContext context, HashTree tree)
}
BuildTreeContext --> "parent" BuildTreeContext
BuildTreeContext --> "*" TreeContextEndListener
class DslTestPlan {
TestPlanStats run()
TestPlanStats runIn(DslJmeterEngine engine)
void saveAsJmx(String filePath)
{static} DslTestPlan fromJmx(String filePath)
}
interface TestPlanChild extends DslTestElement
interface DslJmeterEngine {
TestPlanStats run(DslTestPlan testPlan)
}
package testelements {
abstract class BaseTestElement implements DslTestElement {
String name
Class guiClass
TestElement buildTestElement()
}
abstract class TestElementContainer extends BaseTestElement {
void addChildren(DslTestElement[] children)
}
interface MultiLevelTestElement extends TestPlanChild
abstract class DslJsr223TestElement extends BaseTestElement {
String language
abstract DslJsr223TestElement buildJsr223TestElement()
}
abstract class DslScopedTestElement extends BaseTestElement {
Scope scope;
String scopeVariable
}
enum Scope {
ALL
MAIN_SAMPLE
SUB_SAMPLES
}
DslScopedTestElement ..> Scope
TestElementContainer -up-> "*" DslTestElement
DslJsr223TestElement --> DslScriptBuilder
}
package threadgroups {
interface DslThreadGroup extends TestPlanChild
abstract class BaseThreadGroup extends TestElementContainer implements DslThreadGroup {
SampleErrorAction sampleErrorAction
}
interface ThreadGroupChild extends DslTestElement
enum SampleErrorAction {
CONTINUE,
START_NEXT_ITERATION,
STOP_THREAD,
STOP_TEST,
STOP_TEST_NOW
}
class DslDefaultThreadGroup extends BaseThreadGroup {
List<Stage> stages
}
class Stage {
int threads
int iterations
Duration duration
}
class RpsThreadGroup extends BaseThreadGroup {
List<TimerSchedule> schedules
EventType counting
int initThreads
int maxThreads
double spareThreads
}
class TimerSchedule {
double fromRps
double toRps
Duration duration
}
enum EventType {
REQUESTS
ITERATIONS
}
abstract class DslSimpleThreadGroup extends BaseThreadGroup {
int iterations
int threads
}
class DslSetupThreadGroup extends DslSimpleThreadGroup
class DslTeardownThreadGroup extends DslSimpleThreadGroup
BaseThreadGroup ..> SampleErrorAction
DslThreadGroup ..> ThreadGroupChild
DslThreadGroup ..> Stage
RpsThreadGroup ..> TimerSchedule
RpsThreadGroup ..> EventType
}
package engines {
class EmbeddedJmeterEngine implements DslJmeterEngine
class JmeterEnvironment {
File homeDir
}
class DistributedJmeterEngine extends EmbeddedJmeterEngine
EmbeddedJmeterEngine ..> JmeterEnvironment
}
package configs {
interface DslConfig extends MultiLevelTestElement
abstract class BaseConfigElement extends BaseTestElement implements DslConfig
class DslCsvDataSet extends BaseConfigElement {
String file
String delimiter
String encoding
String[] variableNames
boolean ignoreFirstLine
boolean stopThread
Sharing shareMode
}
enum Sharing {
ALL_THREADS
THREAD_GROUP
THREAD
}
class DslVariables extends BaseConfigElement {
Map<String, String> vars
}
DslCsvDataSet ..> Sharing
}
package controllers {
interface DslController extends ThreadGroupChild
abstract class BaseController extends TestElementContainer implements DslController
class DslTransactionController extends BaseController
class PercentController extends BaseController {
float percent
}
class DslIfController extends BaseController
class DslForEachController extends BaseController
class DslWhileController extends BaseController
class ForLoopController extends BaseController {
int count
}
}
package samplers {
interface DslSampler
abstract class BaseSampler extends TestElementContainer implements DslSampler
interface SamplerChild extends DslTestElement
DslSampler ..> SamplerChild
class DslDummySampler extends BaseSampler {
String responseBody
boolean successful
String responseCode
String responseMessage
Duration responseTime
boolean simulateResponseTime
String url
String requestBody
}
}
package preprocessors {
interface DslPreProcessor extends MultiLevelTestElement
class DslJsr223PreProcessor extends DslJsr223TestElement implements DslPreProcessor
interface PreProcessorScript extends Jsr223Script
class PreProcessorVars extends Jsr223ScriptVars
}
package postprocessors {
interface DslPostProcessor extends MultiLevelTestElement
class DslJsr223PostProcessor extends DslJsr223TestElement implements DslPostProcessor
interface PostProcessorScript extends Jsr223Script
class PostProcessorVars extends Jsr223ScriptVars
abstract class DslVariableExtractor extends DslScopedTestElement implements DslPostProcessor {
String varName
int matchNumber
String defaultValue
}
class DslRegexExtractor extends DslVariableExtractor {
String regex
String template
ExtractorTargetField fieldToCheck
}
enum ExtractorTargetField {
RESPONSE_BODY
RESPONSE_BODY_UNESCAPED
RESPONSE_BODY_AS_DOCUMENT
RESPONSE_HEADERS
REQUEST_HEADERS
REQUEST_URL
RESPONSE_CODE
RESPONSE_MESSAGE
}
class DslBoundaryExtractor extends DslVariableExtractor {
String leftBoundary
String rightBoundary
ExtractorTargetField fieldToCheck
}
DslRegexExtractor ..> ExtractorTargetField
DslBoundaryExtractor ..> ExtractorTargetField
class DslJsonExtractor extends DslVariableExtractor {
String jmesPath
}
class DslDebugPostProcessor extends BaseTestElement implements DslPostProcessor {
boolean includeSamplerProperties
boolean includeVariables
boolean includeJmeterProperties
boolean includeSystemProperties
}
}
package assertions {
interface DslAssertion extends MultiLevelTestElement
class DslResponseAssertion extends DslScopedTestElement implements DslAssertion {
AssertionTargetField fieldToTest
boolean ignoreStatus
String[] testStrings
TestStringStrategy testStrategy
boolean invertCheck
boolean anyMatch
}
enum AssertionTargetField {
RESPONSE_BODY
RESPONSE_BODY_AS_DOCUMENT
RESPONSE_CODE
RESPONSE_MESSAGE
RESPONSE_HEADERS
REQUEST_HEADERS
REQUEST_URL
REQUEST_BODY
}
enum TestStringStrategy {
SUBSTRING
EQUALS
CONTAINS_REGEX
MATCHES_REGEX
}
DslResponseAssertion ..> AssertionTargetField
DslResponseAssertion ..> TestStringStrategy
}
package timers {
interface DslTimer extends MultiLevelTestElement
class DslUniformRandomTimer extends BaseTestElement implements DslTimer {
long minimumMillis
long maximumMillis
}
}
package listeners {
interface DslListener extends MultiLevelTestElement
abstract class BaseListener extends BaseTestElement implements DslListener
class JtlWriter extends BaseListener {
String jtlFilePath
}
class ResponseFileSaver extends BaseListener {
String fileNamePrefix
}
class HtmlReporter extends BaseListener {
File reportDirectory
}
abstract class DslBackendListener extends BaseListener {
String url
Class listenerClass
int queueSize
Arguments buildListenerArguments()
}
class InfluxDbBackendListener extends DslBackendListener {
String token
String title
}
abstract class DslVisualizer extends BaseListener
class DslViewResultsTree extends DslVisualizer {
int resultsLimit
}
}
package util {
class DslScriptBuilder {
int scriptId
DslScript script
Class varsClass
Map<String, String> varsNameMapping
String scriptString
String build()
String buildAsProperty()
}
interface DslScript {
Object run(DslScriptVars vars)
}
abstract class DslScriptVars {
SampleResult prev
JMeterContext ctx
JMeterVariables vars
Properties props
Sampler sampler
Logger log
}
class PropertyScriptBuilder extends DslScriptBuilder
interface PropertyScript extends DslScript
class PropertyScriptVars extends DslScriptVars
interface Jsr223Script extends DslScript {
void run(Jsr223ScriptVars vars)
}
abstract class Jsr223ScriptVars extends DslScriptVars {
String Label
}
}
DslTestPlan ..> TestPlanChild
DslTestPlan ..> EmbeddedJmeterEngine
DslTestElement ..> BuildTreeContext
DslTestPlan -up-|> TestElementContainer
DslSampler .up.|> ThreadGroupChild
MultiLevelTestElement .up.|> ThreadGroupChild
MultiLevelTestElement .up.|> SamplerChild
DslIfController --> PropertyScriptBuilder
DslWhileController --> PropertyScriptBuilder
}
package org.apache.jmeter {
class HashTree
interface TestElement
}
package http {
}
package java {
}
package codegeneration {
}
JmeterDsl ..> core
JmeterDsl ..> http
JmeterDsl ..> java
core ..> codegeneration
core ..> org.apache.jmeter
@enduml