-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRecordScriptsApacheJMeter.html
More file actions
393 lines (361 loc) · 26.6 KB
/
Copy pathRecordScriptsApacheJMeter.html
File metadata and controls
393 lines (361 loc) · 26.6 KB
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JMeter Script Creation Methods</title>
<link href="https://fonts.googleapis.com/css2?family=Sora:wght@300;400;600;700;800&family=Space+Mono:wght@400;700&family=Fira+Code:wght@400;600&display=swap" rel="stylesheet">
<style>
:root {
--bg:#080B13;--bg-card:#101524;--bg-alt:#161C30;--bg-code:#0A0D18;
--c1:#42A5F5;--c2:#66BB6A;--c3:#FFA726;--c4:#EF5350;--c5:#AB47BC;--c6:#26C6DA;--c7:#EC407A;
--c1b:rgba(66,165,245,.06);--c1d:rgba(66,165,245,.18);
--c2b:rgba(102,187,106,.06);--c2d:rgba(102,187,106,.18);
--c3b:rgba(255,167,38,.06);--c3d:rgba(255,167,38,.18);
--c4b:rgba(239,83,80,.06);--c4d:rgba(239,83,80,.18);
--c5b:rgba(171,71,188,.06);--c5d:rgba(171,71,188,.18);
--c6b:rgba(38,198,218,.06);--c6d:rgba(38,198,218,.18);
--c7b:rgba(236,64,122,.06);--c7d:rgba(236,64,122,.18);
--tp:#E8EAF6;--ts:#8E93AD;--tm:#555A72;--border:rgba(255,255,255,.055);
--pass:#66BB6A;--warn:#FFA726;--fail:#EF5350;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{background:var(--bg);color:var(--tp);font-family:'Sora',sans-serif;line-height:1.6;overflow-x:hidden;}
.page{max-width:1100px;margin:0 auto;padding:60px 32px 80px;position:relative;z-index:1;}
.bg-grid{position:fixed;inset:0;background-image:linear-gradient(rgba(255,255,255,.013) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.013) 1px,transparent 1px);background-size:56px 56px;pointer-events:none;z-index:0;}
.bg-blob{position:fixed;border-radius:50%;filter:blur(140px);pointer-events:none;z-index:0;}
.bg-blob.a{width:480px;height:480px;background:rgba(66,165,245,.04);top:-80px;left:-100px;}
.bg-blob.b{width:380px;height:380px;background:rgba(171,71,188,.03);bottom:400px;right:-80px;}
.bg-blob.c{width:320px;height:320px;background:rgba(236,64,122,.025);bottom:-30px;left:25%;}
.hero{text-align:center;margin-bottom:48px;}
.hero-badge{display:inline-block;font-family:'Space Mono',monospace;font-size:11px;letter-spacing:3px;text-transform:uppercase;color:var(--c1);border:1px solid rgba(66,165,245,.3);padding:6px 20px;border-radius:40px;background:rgba(66,165,245,.05);margin-bottom:24px;}
.hero h1{font-size:clamp(26px,4.5vw,48px);font-weight:800;letter-spacing:-1.5px;line-height:1.15;margin-bottom:14px;background:linear-gradient(135deg,#fff 0%,var(--c1) 30%,var(--c2) 50%,var(--c3) 70%,var(--c7) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}
.hero-sub{font-size:15px;color:var(--ts);max-width:760px;margin:0 auto;line-height:1.75;}
.hero-sub strong{color:var(--tp);}
/* METHOD CARD */
.method{background:var(--bg-card);border:1px solid var(--border);border-radius:22px;overflow:hidden;margin-bottom:24px;transition:transform .25s;}
.method:hover{transform:translateY(-3px);}
.m-bar{height:3px;}
.m-head{display:flex;align-items:center;gap:14px;padding:24px 28px 18px;border-bottom:1px solid var(--border);}
.m-num{font-family:'Space Mono',monospace;font-size:13px;font-weight:700;width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--bg);}
.m-head h2{font-size:20px;font-weight:700;flex:1;letter-spacing:-.3px;}
.m-head .m-icon{font-size:24px;}
.m-complexity{font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:1px;text-transform:uppercase;padding:4px 12px;border-radius:6px;flex-shrink:0;font-weight:700;}
.cx-easy{background:rgba(102,187,106,.1);border:1px solid rgba(102,187,106,.25);color:var(--pass);}
.cx-med{background:rgba(255,167,38,.1);border:1px solid rgba(255,167,38,.25);color:var(--warn);}
.cx-adv{background:rgba(239,83,80,.1);border:1px solid rgba(239,83,80,.25);color:var(--fail);}
.m-body{padding:22px 28px 26px;}
/* Sub-tools inside a method */
.subtool{border-radius:14px;padding:20px;margin-bottom:16px;border:1px solid var(--border);background:rgba(255,255,255,.01);}
.subtool:last-child{margin-bottom:0;}
.st-head{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
.st-head h3{font-size:15px;font-weight:700;}
.st-head .st-icon{font-size:18px;}
.st-desc{font-size:13.5px;color:var(--ts);line-height:1.7;margin-bottom:14px;}
.st-desc strong{color:var(--tp);font-weight:600;}
/* Flow strip */
.flow-strip{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:14px;}
.fs-node{font-family:'Space Mono',monospace;font-size:10.5px;font-weight:700;padding:7px 14px;border-radius:8px;white-space:nowrap;}
.fs-arrow{color:var(--tm);font-size:14px;flex-shrink:0;}
/* Steps */
.steps-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
.step-chip{font-size:12px;padding:8px 14px;border-radius:10px;background:rgba(255,255,255,.02);border:1px solid var(--border);color:var(--ts);line-height:1.5;}
.step-chip strong{color:var(--tp);}
.step-chip .sn{font-family:'Space Mono',monospace;font-weight:700;margin-right:4px;font-size:10px;}
/* Records list */
.rec-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px;}
.rec-tag{font-size:11.5px;font-weight:600;padding:5px 13px;border-radius:28px;}
/* Pros/Cons */
.proscons{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;}
@media(max-width:640px){.proscons{grid-template-columns:1fr;}}
.pc-col{border-radius:10px;padding:14px 16px;}
.pc-label{font-family:'Space Mono',monospace;font-size:9px;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:8px;font-weight:700;}
.pc-list{list-style:none;padding:0;}
.pc-list li{font-size:12px;color:var(--ts);padding:3px 0 3px 18px;position:relative;line-height:1.5;}
.pc-list li::before{position:absolute;left:0;top:3px;font-size:11px;}
.pc-list.pros li::before{content:'✅';}
.pc-list.cons li::before{content:'❌';}
/* Code block */
.code-sm{font-family:'Fira Code',monospace;font-size:12px;background:var(--bg-code);border:1px solid var(--border);border-radius:8px;padding:10px 16px;margin-bottom:10px;overflow-x:auto;line-height:1.55;}
/* Color per method */
.m1 .m-bar{background:var(--c1)}.m1 .m-num{background:var(--c1)}.m1 .m-head h2{color:var(--c1)}.m1 .st-head h3{color:var(--c1)}.m1 .fs-node{background:var(--c1b);border:1px solid var(--c1d);color:var(--c1)}.m1 .rec-tag{background:var(--c1b);border:1px solid var(--c1d);color:var(--c1)}.m1 .pc-col{background:var(--c1b);border:1px solid var(--c1d)}.m1 .pc-label{color:var(--c1)}.m1:hover{box-shadow:0 0 35px rgba(66,165,245,.06);}
.m2 .m-bar{background:var(--c2)}.m2 .m-num{background:var(--c2)}.m2 .m-head h2{color:var(--c2)}.m2 .st-head h3{color:var(--c2)}.m2 .fs-node{background:var(--c2b);border:1px solid var(--c2d);color:var(--c2)}.m2 .rec-tag{background:var(--c2b);border:1px solid var(--c2d);color:var(--c2)}.m2 .pc-col{background:var(--c2b);border:1px solid var(--c2d)}.m2 .pc-label{color:var(--c2)}.m2:hover{box-shadow:0 0 35px rgba(102,187,106,.06);}
.m3 .m-bar{background:var(--c3)}.m3 .m-num{background:var(--c3)}.m3 .m-head h2{color:var(--c3)}.m3 .st-head h3{color:var(--c3)}.m3 .fs-node{background:var(--c3b);border:1px solid var(--c3d);color:var(--c3)}.m3 .rec-tag{background:var(--c3b);border:1px solid var(--c3d);color:var(--c3)}.m3 .pc-col{background:var(--c3b);border:1px solid var(--c3d)}.m3 .pc-label{color:var(--c3)}.m3:hover{box-shadow:0 0 35px rgba(255,167,38,.06);}
.m4 .m-bar{background:var(--c4)}.m4 .m-num{background:var(--c4)}.m4 .m-head h2{color:var(--c4)}.m4 .st-head h3{color:var(--c4)}.m4 .fs-node{background:var(--c4b);border:1px solid var(--c4d);color:var(--c4)}.m4 .rec-tag{background:var(--c4b);border:1px solid var(--c4d);color:var(--c4)}.m4 .pc-col{background:var(--c4b);border:1px solid var(--c4d)}.m4 .pc-label{color:var(--c4)}.m4:hover{box-shadow:0 0 35px rgba(239,83,80,.06);}
.m5 .m-bar{background:var(--c5)}.m5 .m-num{background:var(--c5)}.m5 .m-head h2{color:var(--c5)}.m5 .st-head h3{color:var(--c5)}.m5 .fs-node{background:var(--c5b);border:1px solid var(--c5d);color:var(--c5)}.m5 .rec-tag{background:var(--c5b);border:1px solid var(--c5d);color:var(--c5)}.m5 .pc-col{background:var(--c5b);border:1px solid var(--c5d)}.m5 .pc-label{color:var(--c5)}.m5:hover{box-shadow:0 0 35px rgba(171,71,188,.06);}
.m6 .m-bar{background:var(--c6)}.m6 .m-num{background:var(--c6)}.m6 .m-head h2{color:var(--c6)}.m6 .st-head h3{color:var(--c6)}.m6 .fs-node{background:var(--c6b);border:1px solid var(--c6d);color:var(--c6)}.m6 .rec-tag{background:var(--c6b);border:1px solid var(--c6d);color:var(--c6)}.m6 .pc-col{background:var(--c6b);border:1px solid var(--c6d)}.m6 .pc-label{color:var(--c6)}.m6:hover{box-shadow:0 0 35px rgba(38,198,218,.06);}
.m7 .m-bar{background:var(--c7)}.m7 .m-num{background:var(--c7)}.m7 .m-head h2{color:var(--c7)}.m7 .st-head h3{color:var(--c7)}.m7 .fs-node{background:var(--c7b);border:1px solid var(--c7d);color:var(--c7)}.m7 .rec-tag{background:var(--c7b);border:1px solid var(--c7d);color:var(--c7)}.m7 .pc-col{background:var(--c7b);border:1px solid var(--c7d)}.m7 .pc-label{color:var(--c7)}.m7:hover{box-shadow:0 0 35px rgba(236,64,122,.06);}
/* COMPARISON TABLE */
.cmp-head{display:flex;align-items:center;gap:14px;margin:48px 0 22px;}
.cmp-head h2{font-size:24px;font-weight:700;}
.cmp-icon{font-family:'Space Mono',monospace;font-size:13px;font-weight:700;color:var(--bg);background:var(--c1);width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;}
.cmp-wrap{border-radius:16px;overflow:hidden;border:1px solid var(--border);}
table{width:100%;border-collapse:collapse;font-size:13px;}
thead th{background:var(--bg-alt);font-family:'Space Mono',monospace;font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--c1);padding:14px 16px;text-align:left;border-bottom:1px solid var(--border);}
tbody tr{background:var(--bg-card);}tbody tr:nth-child(even){background:var(--bg-alt);}
tbody td{padding:12px 16px;border-bottom:1px solid var(--border);color:var(--ts);line-height:1.5;vertical-align:middle;}
tbody tr:last-child td{border-bottom:none;}
tbody td:first-child{font-weight:700;color:var(--tp);white-space:nowrap;}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:middle;}
.d1{background:var(--c1)}.d2{background:var(--c2)}.d3{background:var(--c3)}.d4{background:var(--c4)}.d5{background:var(--c5)}.d6{background:var(--c6)}.d7{background:var(--c7)}
.footer{text-align:center;margin-top:64px;padding-top:28px;border-top:1px solid var(--border);}
.footer p{font-family:'Space Mono',monospace;font-size:12px;color:var(--tm);letter-spacing:1px;}
.footer .fa{color:var(--c1);}
@media(max-width:700px){
.m-head{flex-wrap:wrap;gap:10px;}.steps-row{gap:6px;}
table{font-size:11.5px;}thead th,tbody td{padding:10px 12px;}
}
</style>
</head>
<body>
<div class="bg-grid"></div>
<div class="bg-blob a"></div>
<div class="bg-blob b"></div>
<div class="bg-blob c"></div>
<div class="page">
<div class="hero">
<div class="hero-badge">Script Creation · Apache JMeter</div>
<h1>Ways to Create & Record Scripts in JMeter</h1>
<p class="hero-sub">From <strong>built-in recording</strong> and <strong>browser extensions</strong> to <strong>manual scripting</strong>, <strong>Swagger imports</strong>, and <strong>Selenium integration</strong> — 7 methods for every scenario.</p>
</div>
<!-- ═══ 1. BUILT-IN RECORDING ═══ -->
<div class="method m1">
<div class="m-bar"></div>
<div class="m-head">
<div class="m-num">01</div>
<h2>Built-in JMeter Recording</h2>
<span class="m-complexity cx-med">Medium</span>
<span class="m-icon">🔴</span>
</div>
<div class="m-body">
<div class="subtool">
<div class="st-head"><span class="st-icon">⭐</span><h3>HTTP(S) Test Script Recorder</h3></div>
<div class="st-desc">JMeter acts as a <strong>proxy server</strong> — captures all browser requests passing through it and auto-creates HTTP Request samplers.</div>
<div class="flow-strip">
<div class="fs-node">Browser</div><span class="fs-arrow">→</span>
<div class="fs-node">JMeter Proxy :8888</div><span class="fs-arrow">→</span>
<div class="fs-node">Application Server</div>
</div>
<div class="steps-row">
<div class="step-chip"><span class="sn">1</span> Open JMeter GUI</div>
<div class="step-chip"><span class="sn">2</span> File → Templates → <strong>Recording</strong></div>
<div class="step-chip"><span class="sn">3</span> Set proxy port <strong>8888</strong></div>
<div class="step-chip"><span class="sn">4</span> Configure browser proxy</div>
<div class="step-chip"><span class="sn">5</span> Install SSL cert for HTTPS</div>
<div class="step-chip"><span class="sn">6</span> Click <strong>Start</strong> & navigate app</div>
</div>
<div style="font-family:'Space Mono',monospace;font-size:10px;color:var(--tm);letter-spacing:1px;margin-bottom:8px;">WHAT GETS RECORDED</div>
<div class="rec-tags">
<span class="rec-tag">GET Requests</span><span class="rec-tag">POST Requests</span><span class="rec-tag">AJAX Calls</span><span class="rec-tag">Cookies</span><span class="rec-tag">Auth Tokens</span><span class="rec-tag">Form Params</span><span class="rec-tag">Redirects</span>
</div>
<div class="proscons">
<div class="pc-col"><div class="pc-label">Advantages</div><ul class="pc-list pros"><li>Native JMeter functionality</li><li>Real browser traffic capture</li><li>Easy for beginners</li></ul></div>
<div class="pc-col"><div class="pc-label">Limitations</div><ul class="pc-list cons"><li>Requires proxy setup</li><li>HTTPS cert installation needed</li><li>Records static resources</li><li>Correlation still required</li></ul></div>
</div>
</div>
</div>
</div>
<!-- ═══ 2. BROWSER EXTENSIONS ═══ -->
<div class="method m2">
<div class="m-bar"></div>
<div class="m-head">
<div class="m-num">02</div>
<h2>Browser Extensions & Third-Party</h2>
<span class="m-complexity cx-easy">Easy</span>
<span class="m-icon">🧩</span>
</div>
<div class="m-body">
<div class="subtool">
<div class="st-head"><span class="st-icon">⭐</span><h3>BlazeMeter Chrome Extension</h3></div>
<div class="st-desc">Captures browser activity directly and exports as a <strong>.jmx file</strong> — no proxy, no SSL cert hassle.</div>
<div class="steps-row">
<div class="step-chip"><span class="sn">1</span> Install from Chrome Web Store</div>
<div class="step-chip"><span class="sn">2</span> Click <strong>Start Recording</strong></div>
<div class="step-chip"><span class="sn">3</span> Perform app workflow</div>
<div class="step-chip"><span class="sn">4</span> Stop & export <strong>.jmx</strong></div>
<div class="step-chip"><span class="sn">5</span> Open in JMeter</div>
</div>
<div class="proscons">
<div class="pc-col"><div class="pc-label">Advantages</div><ul class="pc-list pros"><li>No proxy configuration</li><li>No SSL cert needed</li><li>Faster & cleaner scripts</li><li>Beginner friendly</li></ul></div>
<div class="pc-col"><div class="pc-label">Limitations</div><ul class="pc-list cons"><li>Complex correlations still manual</li><li>Browser-based only</li></ul></div>
</div>
</div>
<div class="subtool" style="margin-top:14px;">
<div class="st-head"><span class="st-icon">⭐</span><h3>BlazeMeter Proxy Recorder</h3></div>
<div class="st-desc">Cloud-based recording for <strong>mobile apps, desktop apps, and browsers</strong>. Exports optimized <strong>SmartJMX</strong> files with automatic correlations.</div>
</div>
</div>
</div>
<!-- ═══ 3. TRAFFIC CAPTURE ═══ -->
<div class="method m3">
<div class="m-bar"></div>
<div class="m-head">
<div class="m-num">03</div>
<h2>Traffic Capture & Conversion</h2>
<span class="m-complexity cx-med">Medium</span>
<span class="m-icon">📡</span>
</div>
<div class="m-body">
<!-- HAR -->
<div class="subtool">
<div class="st-head"><span class="st-icon">⭐</span><h3>HAR File Conversion</h3></div>
<div class="st-desc"><strong>HTTP Archive (HAR)</strong> files store requests, responses, headers, cookies, and timing metrics. Capture in browser DevTools, then convert to JMeter.</div>
<div class="flow-strip">
<div class="fs-node">F12 → Network Tab</div><span class="fs-arrow">→</span>
<div class="fs-node">Execute Workflow</div><span class="fs-arrow">→</span>
<div class="fs-node">Export .har</div><span class="fs-arrow">→</span>
<div class="fs-node">Convert → .jmx</div>
</div>
<div class="proscons">
<div class="pc-col"><div class="pc-label">Advantages</div><ul class="pc-list pros"><li>No proxy setup</li><li>Easy traffic capture</li><li>Good for APIs & troubleshooting</li></ul></div>
<div class="pc-col"><div class="pc-label">Limitations</div><ul class="pc-list cons"><li>Requires cleanup</li><li>Correlation still needed</li><li>Static resources inflate script</li></ul></div>
</div>
</div>
<!-- Fiddler/Charles -->
<div class="subtool" style="margin-top:14px;">
<div class="st-head"><span class="st-icon">⭐</span><h3>Fiddler / Charles Proxy</h3></div>
<div class="st-desc">Advanced HTTP debugging tools — capture <strong>browser, mobile, API, and SSL traffic</strong>. Export as HAR/SAZ/raw and convert to JMeter.</div>
<div class="proscons">
<div class="pc-col"><div class="pc-label">Advantages</div><ul class="pc-list pros"><li>Detailed request analysis</li><li>Mobile traffic support</li><li>SSL debugging</li></ul></div>
<div class="pc-col"><div class="pc-label">Limitations</div><ul class="pc-list cons"><li>Requires conversion effort</li><li>Correlation not automatic</li></ul></div>
</div>
</div>
<!-- PCAP -->
<div class="subtool" style="margin-top:14px;">
<div class="st-head"><span class="st-icon">⭐</span><h3>PCAP / TCPDump Conversion</h3></div>
<div class="st-desc">Enterprise-level packet capture via <strong>Wireshark / tcpdump</strong>. Used for low-level network debugging and security analysis.</div>
<div class="flow-strip">
<div class="fs-node">Network Packets</div><span class="fs-arrow">→</span>
<div class="fs-node">PCAP File</div><span class="fs-arrow">→</span>
<div class="fs-node">Converter</div><span class="fs-arrow">→</span>
<div class="fs-node">.jmx Script</div>
</div>
</div>
</div>
</div>
<!-- ═══ 4. MANUAL SCRIPTING ═══ -->
<div class="method m4">
<div class="m-bar"></div>
<div class="m-head">
<div class="m-num">04</div>
<h2>Manual Script Creation</h2>
<span class="m-complexity cx-med">Medium</span>
<span class="m-icon">✍️</span>
</div>
<div class="m-body">
<div class="st-desc">Extremely common for <strong>API performance testing</strong>. Testers manually create requests, configure payloads, add assertions and parameterization — no recording needed.</div>
<div class="steps-row">
<div class="step-chip"><span class="sn">1</span> Create <strong>Thread Group</strong></div>
<div class="step-chip"><span class="sn">2</span> Add <strong>HTTP Request</strong> sampler</div>
<div class="step-chip"><span class="sn">3</span> Configure server, endpoint, method, payload</div>
<div class="step-chip"><span class="sn">4</span> Add <strong>Header Manager</strong></div>
<div class="step-chip"><span class="sn">5</span> Add Assertions & Extractors</div>
</div>
<div class="code-sm" style="color:var(--c4);">POST /api/login<br>{"username":"admin", "password":"admin123"}<br>Header: Authorization: Bearer Token</div>
<div class="proscons">
<div class="pc-col"><div class="pc-label">Advantages</div><ul class="pc-list pros"><li>Very clean scripts</li><li>Full control over requests</li><li>Best for APIs/microservices</li><li>No unwanted resources</li></ul></div>
<div class="pc-col"><div class="pc-label">Limitations</div><ul class="pc-list cons"><li>Time-consuming</li><li>Requires API understanding</li><li>Manual correlation</li></ul></div>
</div>
</div>
</div>
<!-- ═══ 5. SWAGGER/OPENAPI ═══ -->
<div class="method m5">
<div class="m-bar"></div>
<div class="m-head">
<div class="m-num">05</div>
<h2>Swagger / OpenAPI Import</h2>
<span class="m-complexity cx-easy">Easy</span>
<span class="m-icon">📄</span>
</div>
<div class="m-body">
<div class="st-desc">Modern REST APIs expose <strong>Swagger/OpenAPI documentation</strong> defining endpoints, payloads, methods, headers, and response models. Import the spec to auto-generate JMeter samplers.</div>
<div class="flow-strip">
<div class="fs-node">swagger.json / .yaml</div><span class="fs-arrow">→</span>
<div class="fs-node">Import Tool</div><span class="fs-arrow">→</span>
<div class="fs-node">JMeter HTTP Samplers</div>
</div>
<div class="proscons">
<div class="pc-col"><div class="pc-label">Advantages</div><ul class="pc-list pros"><li>Fast API script generation</li><li>Accurate endpoint definitions</li><li>Great for microservices</li></ul></div>
<div class="pc-col"><div class="pc-label">Limitations</div><ul class="pc-list cons"><li>Requires valid API spec</li><li>Still needs parameterization</li></ul></div>
</div>
</div>
</div>
<!-- ═══ 6. ADVANCED PLUGINS ═══ -->
<div class="method m6">
<div class="m-bar"></div>
<div class="m-head">
<div class="m-num">06</div>
<h2>Advanced Plugins & Automation</h2>
<span class="m-complexity cx-adv">Advanced</span>
<span class="m-icon">🔌</span>
</div>
<div class="m-body">
<div class="subtool">
<div class="st-head"><span class="st-icon">⭐</span><h3>JMeter Correlation Recorder Plugin</h3></div>
<div class="st-desc">Automatically <strong>detects dynamic values</strong> (Session IDs, CSRF tokens, JWT, cookies), creates extractors, and replaces hardcoded values with variables.</div>
<div class="code-sm" style="color:var(--c6);">Response: <input value="ABC123XYZ"><br>Plugin → auto-extracts → stores as ${dynamic_var}<br>→ reuses dynamically in subsequent requests</div>
<div class="proscons">
<div class="pc-col"><div class="pc-label">Advantages</div><ul class="pc-list pros"><li>Reduces manual effort</li><li>Faster correlation</li><li>Easier maintenance</li></ul></div>
<div class="pc-col"><div class="pc-label">Limitations</div><ul class="pc-list cons"><li>Can't identify all patterns</li></ul></div>
</div>
</div>
</div>
</div>
<!-- ═══ 7. SELENIUM INTEGRATION ═══ -->
<div class="method m7">
<div class="m-bar"></div>
<div class="m-head">
<div class="m-num">07</div>
<h2>Selenium Integration</h2>
<span class="m-complexity cx-adv">Advanced</span>
<span class="m-icon">🌐</span>
</div>
<div class="m-body">
<div class="subtool">
<div class="st-head"><span class="st-icon">⭐</span><h3>WebDriver Sampler</h3></div>
<div class="st-desc">Integrates <strong>Selenium WebDriver</strong> with JMeter for real browser automation — essential for JavaScript-heavy apps using React, Angular, or dynamic rendering.</div>
<div class="flow-strip">
<div class="fs-node">Selenium Browser</div><span class="fs-arrow">→</span>
<div class="fs-node">WebDriver Sampler</div><span class="fs-arrow">→</span>
<div class="fs-node">JMeter Metrics</div>
</div>
<div class="steps-row">
<div class="step-chip"><span class="sn">1</span> Install WebDriver plugins</div>
<div class="step-chip"><span class="sn">2</span> Add WebDriver Sampler</div>
<div class="step-chip"><span class="sn">3</span> Write Selenium code</div>
<div class="step-chip"><span class="sn">4</span> Execute browser actions</div>
<div class="step-chip"><span class="sn">5</span> Collect response metrics</div>
</div>
<div class="code-sm" style="color:var(--c7);">driver.findElement(By.id("login")).click();</div>
<div class="proscons">
<div class="pc-col"><div class="pc-label">Advantages</div><ul class="pc-list pros"><li>Real browser rendering</li><li>Supports dynamic UI</li><li>Handles JS-heavy apps</li></ul></div>
<div class="pc-col"><div class="pc-label">Limitations</div><ul class="pc-list cons"><li>Heavy CPU/memory usage</li><li>Not for large-scale load</li><li>Slower than HTTP samplers</li></ul></div>
</div>
</div>
</div>
</div>
<!-- ═══ COMPARISON TABLE ═══ -->
<div class="cmp-head">
<div class="cmp-icon">∑</div>
<h2>Final Comparison</h2>
</div>
<div class="cmp-wrap">
<table>
<thead><tr><th>Method</th><th>Best For</th><th>Complexity</th></tr></thead>
<tbody>
<tr><td><span class="dot d1"></span>JMeter Recorder</td><td>Web applications</td><td><span class="m-complexity cx-med" style="font-size:9px;padding:3px 10px;">Medium</span></td></tr>
<tr><td><span class="dot d2"></span>BlazeMeter Extension</td><td>Quick browser recording</td><td><span class="m-complexity cx-easy" style="font-size:9px;padding:3px 10px;">Easy</span></td></tr>
<tr><td><span class="dot d3"></span>HAR / Fiddler / Charles</td><td>Existing traffic / Mobile / API debug</td><td><span class="m-complexity cx-med" style="font-size:9px;padding:3px 10px;">Medium</span></td></tr>
<tr><td><span class="dot d4"></span>Manual Scripting</td><td>APIs / Microservices</td><td><span class="m-complexity cx-med" style="font-size:9px;padding:3px 10px;">Medium</span></td></tr>
<tr><td><span class="dot d5"></span>Swagger Import</td><td>REST APIs</td><td><span class="m-complexity cx-easy" style="font-size:9px;padding:3px 10px;">Easy</span></td></tr>
<tr><td><span class="dot d6"></span>Correlation Plugin</td><td>Dynamic applications</td><td><span class="m-complexity cx-adv" style="font-size:9px;padding:3px 10px;">Advanced</span></td></tr>
<tr><td><span class="dot d7"></span>Selenium Integration</td><td>JavaScript-heavy apps</td><td><span class="m-complexity cx-adv" style="font-size:9px;padding:3px 10px;">Advanced</span></td></tr>
</tbody>
</table>
</div>
<div class="footer">
<p><span class="fa">JMETER SCRIPTING</span> · Record It · Build It · Import It · Automate It · Author: Angshuman Basak</p>
</div>
</div>
</body>
</html>