Skip to content

Commit 01f37d1

Browse files
committed
add jMeter stress test for /object/input
1 parent d615b08 commit 01f37d1

4 files changed

Lines changed: 494 additions & 0 deletions

File tree

Lines changed: 359 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,359 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.3">
3+
<hashTree>
4+
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="BBData API input stress test" enabled="true">
5+
<stringProp name="TestPlan.comments"></stringProp>
6+
<boolProp name="TestPlan.functional_mode">false</boolProp>
7+
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
8+
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
9+
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
10+
<collectionProp name="Arguments.arguments">
11+
<elementProp name="protocol" elementType="Argument">
12+
<stringProp name="Argument.name">protocol</stringProp>
13+
<stringProp name="Argument.value">http</stringProp>
14+
<stringProp name="Argument.metadata">=</stringProp>
15+
</elementProp>
16+
<elementProp name="host" elementType="Argument">
17+
<stringProp name="Argument.name">host</stringProp>
18+
<stringProp name="Argument.value">localhost</stringProp>
19+
<stringProp name="Argument.metadata">=</stringProp>
20+
</elementProp>
21+
<elementProp name="port" elementType="Argument">
22+
<stringProp name="Argument.name">port</stringProp>
23+
<stringProp name="Argument.value"></stringProp>
24+
<stringProp name="Argument.metadata">=</stringProp>
25+
</elementProp>
26+
<elementProp name="threads" elementType="Argument">
27+
<stringProp name="Argument.name">threads</stringProp>
28+
<stringProp name="Argument.value">4</stringProp>
29+
<stringProp name="Argument.metadata">=</stringProp>
30+
</elementProp>
31+
<elementProp name="loops" elementType="Argument">
32+
<stringProp name="Argument.name">loops</stringProp>
33+
<stringProp name="Argument.value">100</stringProp>
34+
<stringProp name="Argument.metadata">=</stringProp>
35+
</elementProp>
36+
<elementProp name="period" elementType="Argument">
37+
<stringProp name="Argument.name">period</stringProp>
38+
<stringProp name="Argument.value">0.1</stringProp>
39+
<stringProp name="Argument.metadata">=</stringProp>
40+
</elementProp>
41+
<elementProp name="id_inc" elementType="Argument">
42+
<stringProp name="Argument.name">id_inc</stringProp>
43+
<stringProp name="Argument.value">0</stringProp>
44+
<stringProp name="Argument.metadata">=</stringProp>
45+
</elementProp>
46+
<elementProp name="token_start" elementType="Argument">
47+
<stringProp name="Argument.name">token_start</stringProp>
48+
<stringProp name="Argument.value">012345678901234567890123456789</stringProp>
49+
<stringProp name="Argument.metadata">=</stringProp>
50+
</elementProp>
51+
<elementProp name="token_pad" elementType="Argument">
52+
<stringProp name="Argument.name">token_pad</stringProp>
53+
<stringProp name="Argument.value">a</stringProp>
54+
<stringProp name="Argument.metadata">=</stringProp>
55+
</elementProp>
56+
<elementProp name="value" elementType="Argument">
57+
<stringProp name="Argument.name">value</stringProp>
58+
<stringProp name="Argument.value">1</stringProp>
59+
<stringProp name="Argument.metadata">=</stringProp>
60+
</elementProp>
61+
<elementProp name="out_file" elementType="Argument">
62+
<stringProp name="Argument.name">out_file</stringProp>
63+
<stringProp name="Argument.value">stress-test-results.jtl</stringProp>
64+
<stringProp name="Argument.metadata">=</stringProp>
65+
</elementProp>
66+
</collectionProp>
67+
</elementProp>
68+
<stringProp name="TestPlan.user_define_classpath"></stringProp>
69+
</TestPlan>
70+
<hashTree>
71+
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
72+
<stringProp name="ThreadGroup.on_sample_error">stoptestnow</stringProp>
73+
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
74+
<boolProp name="LoopController.continue_forever">false</boolProp>
75+
<stringProp name="LoopController.loops">${__P(loops, ${loops})}</stringProp>
76+
</elementProp>
77+
<stringProp name="ThreadGroup.num_threads">${__P(threads, ${threads})}</stringProp>
78+
<stringProp name="ThreadGroup.ramp_time">${__P(period, ${period})}</stringProp>
79+
<boolProp name="ThreadGroup.scheduler">false</boolProp>
80+
<stringProp name="ThreadGroup.duration"></stringProp>
81+
<stringProp name="ThreadGroup.delay"></stringProp>
82+
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
83+
</ThreadGroup>
84+
<hashTree>
85+
<BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="BeanShell PreProcessor" enabled="true">
86+
<stringProp name="filename"></stringProp>
87+
<stringProp name="parameters"></stringProp>
88+
<boolProp name="resetInterpreter">false</boolProp>
89+
<stringProp name="script">if(vars.get(&quot;bsh_done&quot;) != null) return;
90+
91+
String get(propName){
92+
String p = props.get(propName);
93+
if(p == null) p = vars.get(propName);
94+
return p;
95+
}
96+
97+
// object_id
98+
99+
String inc = get(&quot;id_inc&quot;);
100+
int th = ctx.getThreadNum() + 1; // this starts at zero, while __threadNum starts at one...
101+
String object_id = String.valueOf(th + Integer.valueOf(inc));
102+
103+
vars.put(&quot;bsh_object_id&quot;, object_id);
104+
105+
// token
106+
107+
String token_start = get(&quot;token_start&quot;);
108+
if(token_start.length() == 32){
109+
vars.put(&quot;bsh_token&quot;, token_start);
110+
}else{
111+
String token_pad = get(&quot;token_pad&quot;);
112+
while(token_start.length() &lt; 32 - object_id.length()) token_start += token_pad;
113+
token_start += object_id;
114+
}
115+
vars.put(&quot;bsh_token&quot;, token_start);
116+
117+
118+
log.info(&quot;object_id=&quot; + object_id + &quot;, token=&quot; + token_start);
119+
120+
vars.put(&quot;bsh_done&quot;, &quot;1&quot;);
121+
122+
123+
</stringProp>
124+
</BeanShellPreProcessor>
125+
<hashTree/>
126+
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="POST /objects/values" enabled="true">
127+
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
128+
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
129+
<collectionProp name="Arguments.arguments">
130+
<elementProp name="" elementType="HTTPArgument">
131+
<boolProp name="HTTPArgument.always_encode">false</boolProp>
132+
<stringProp name="Argument.value">[&#xd;
133+
{&#xd;
134+
&quot;objectId&quot;: ${bsh_object_id},&#xd;
135+
&quot;token&quot;: &quot;${bsh_token}&quot;,&#xd;
136+
&quot;value&quot;: &quot;${__P(value, ${value})}&quot;&#xd;
137+
}&#xd;
138+
]</stringProp>
139+
<stringProp name="Argument.metadata">=</stringProp>
140+
</elementProp>
141+
</collectionProp>
142+
</elementProp>
143+
<stringProp name="HTTPSampler.domain">${__P(host, ${host})}</stringProp>
144+
<stringProp name="HTTPSampler.port">${__P(port, ${port})}</stringProp>
145+
<stringProp name="HTTPSampler.protocol">${__P(protocol, ${protocol})}</stringProp>
146+
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
147+
<stringProp name="HTTPSampler.path">/objects/values</stringProp>
148+
<stringProp name="HTTPSampler.method">POST</stringProp>
149+
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
150+
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
151+
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
152+
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
153+
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
154+
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
155+
<stringProp name="HTTPSampler.response_timeout"></stringProp>
156+
</HTTPSamplerProxy>
157+
<hashTree>
158+
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
159+
<collectionProp name="HeaderManager.headers">
160+
<elementProp name="" elementType="Header">
161+
<stringProp name="Header.name">Content-Type</stringProp>
162+
<stringProp name="Header.value">application/json</stringProp>
163+
</elementProp>
164+
</collectionProp>
165+
</HeaderManager>
166+
<hashTree/>
167+
</hashTree>
168+
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
169+
<boolProp name="ResultCollector.error_logging">true</boolProp>
170+
<objProp>
171+
<name>saveConfig</name>
172+
<value class="SampleSaveConfiguration">
173+
<time>true</time>
174+
<latency>true</latency>
175+
<timestamp>true</timestamp>
176+
<success>true</success>
177+
<label>true</label>
178+
<code>true</code>
179+
<message>true</message>
180+
<threadName>true</threadName>
181+
<dataType>true</dataType>
182+
<encoding>false</encoding>
183+
<assertions>true</assertions>
184+
<subresults>true</subresults>
185+
<responseData>false</responseData>
186+
<samplerData>false</samplerData>
187+
<xml>false</xml>
188+
<fieldNames>true</fieldNames>
189+
<responseHeaders>false</responseHeaders>
190+
<requestHeaders>false</requestHeaders>
191+
<responseDataOnError>false</responseDataOnError>
192+
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
193+
<assertionsResultsToSave>0</assertionsResultsToSave>
194+
<bytes>true</bytes>
195+
<sentBytes>true</sentBytes>
196+
<url>true</url>
197+
<threadCounts>true</threadCounts>
198+
<idleTime>true</idleTime>
199+
<connectTime>true</connectTime>
200+
</value>
201+
</objProp>
202+
<stringProp name="filename"></stringProp>
203+
</ResultCollector>
204+
<hashTree/>
205+
<ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View Results in Table" enabled="true">
206+
<boolProp name="ResultCollector.error_logging">false</boolProp>
207+
<objProp>
208+
<name>saveConfig</name>
209+
<value class="SampleSaveConfiguration">
210+
<time>true</time>
211+
<latency>true</latency>
212+
<timestamp>true</timestamp>
213+
<success>true</success>
214+
<label>true</label>
215+
<code>true</code>
216+
<message>true</message>
217+
<threadName>true</threadName>
218+
<dataType>true</dataType>
219+
<encoding>false</encoding>
220+
<assertions>true</assertions>
221+
<subresults>true</subresults>
222+
<responseData>false</responseData>
223+
<samplerData>false</samplerData>
224+
<xml>false</xml>
225+
<fieldNames>true</fieldNames>
226+
<responseHeaders>false</responseHeaders>
227+
<requestHeaders>false</requestHeaders>
228+
<responseDataOnError>false</responseDataOnError>
229+
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
230+
<assertionsResultsToSave>0</assertionsResultsToSave>
231+
<bytes>true</bytes>
232+
<sentBytes>true</sentBytes>
233+
<url>true</url>
234+
<hostname>true</hostname>
235+
<threadCounts>true</threadCounts>
236+
<idleTime>true</idleTime>
237+
<connectTime>true</connectTime>
238+
</value>
239+
</objProp>
240+
<stringProp name="filename">${__P(out_file, ${out_file})}</stringProp>
241+
</ResultCollector>
242+
<hashTree/>
243+
<ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="true">
244+
<boolProp name="ResultCollector.error_logging">false</boolProp>
245+
<objProp>
246+
<name>saveConfig</name>
247+
<value class="SampleSaveConfiguration">
248+
<time>true</time>
249+
<latency>true</latency>
250+
<timestamp>true</timestamp>
251+
<success>true</success>
252+
<label>true</label>
253+
<code>true</code>
254+
<message>true</message>
255+
<threadName>true</threadName>
256+
<dataType>true</dataType>
257+
<encoding>false</encoding>
258+
<assertions>true</assertions>
259+
<subresults>true</subresults>
260+
<responseData>false</responseData>
261+
<samplerData>false</samplerData>
262+
<xml>false</xml>
263+
<fieldNames>true</fieldNames>
264+
<responseHeaders>false</responseHeaders>
265+
<requestHeaders>false</requestHeaders>
266+
<responseDataOnError>false</responseDataOnError>
267+
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
268+
<assertionsResultsToSave>0</assertionsResultsToSave>
269+
<bytes>true</bytes>
270+
<sentBytes>true</sentBytes>
271+
<url>true</url>
272+
<threadCounts>true</threadCounts>
273+
<idleTime>true</idleTime>
274+
<connectTime>true</connectTime>
275+
</value>
276+
</objProp>
277+
<stringProp name="filename"></stringProp>
278+
</ResultCollector>
279+
<hashTree/>
280+
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
281+
<boolProp name="ResultCollector.error_logging">false</boolProp>
282+
<objProp>
283+
<name>saveConfig</name>
284+
<value class="SampleSaveConfiguration">
285+
<time>true</time>
286+
<latency>true</latency>
287+
<timestamp>true</timestamp>
288+
<success>true</success>
289+
<label>true</label>
290+
<code>true</code>
291+
<message>true</message>
292+
<threadName>true</threadName>
293+
<dataType>true</dataType>
294+
<encoding>false</encoding>
295+
<assertions>true</assertions>
296+
<subresults>true</subresults>
297+
<responseData>false</responseData>
298+
<samplerData>false</samplerData>
299+
<xml>false</xml>
300+
<fieldNames>true</fieldNames>
301+
<responseHeaders>false</responseHeaders>
302+
<requestHeaders>false</requestHeaders>
303+
<responseDataOnError>false</responseDataOnError>
304+
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
305+
<assertionsResultsToSave>0</assertionsResultsToSave>
306+
<bytes>true</bytes>
307+
<sentBytes>true</sentBytes>
308+
<url>true</url>
309+
<hostname>true</hostname>
310+
<threadCounts>true</threadCounts>
311+
<idleTime>true</idleTime>
312+
<connectTime>true</connectTime>
313+
</value>
314+
</objProp>
315+
<stringProp name="filename"></stringProp>
316+
</ResultCollector>
317+
<hashTree/>
318+
<ResultCollector guiclass="RespTimeGraphVisualizer" testclass="ResultCollector" testname="Response Time Graph" enabled="true">
319+
<boolProp name="ResultCollector.error_logging">false</boolProp>
320+
<objProp>
321+
<name>saveConfig</name>
322+
<value class="SampleSaveConfiguration">
323+
<time>true</time>
324+
<latency>true</latency>
325+
<timestamp>true</timestamp>
326+
<success>true</success>
327+
<label>true</label>
328+
<code>true</code>
329+
<message>true</message>
330+
<threadName>true</threadName>
331+
<dataType>true</dataType>
332+
<encoding>false</encoding>
333+
<assertions>true</assertions>
334+
<subresults>true</subresults>
335+
<responseData>false</responseData>
336+
<samplerData>false</samplerData>
337+
<xml>false</xml>
338+
<fieldNames>true</fieldNames>
339+
<responseHeaders>false</responseHeaders>
340+
<requestHeaders>false</requestHeaders>
341+
<responseDataOnError>false</responseDataOnError>
342+
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
343+
<assertionsResultsToSave>0</assertionsResultsToSave>
344+
<bytes>true</bytes>
345+
<sentBytes>true</sentBytes>
346+
<url>true</url>
347+
<threadCounts>true</threadCounts>
348+
<idleTime>true</idleTime>
349+
<connectTime>true</connectTime>
350+
</value>
351+
</objProp>
352+
<stringProp name="filename"></stringProp>
353+
<stringProp name="RespTimeGraph.graphtitle">Response time (ms)</stringProp>
354+
</ResultCollector>
355+
<hashTree/>
356+
</hashTree>
357+
</hashTree>
358+
</hashTree>
359+
</jmeterTestPlan>

0 commit comments

Comments
 (0)