perf-skills 1.0.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/README.md +2 -1
- package/package.json +2 -2
- package/skills/perf/SKILL.md +37 -36
- package/skills/perf/evals/evals.json +148 -148
- package/skills/perf/references/tools/gatling.md +286 -286
- package/skills/perf/references/tools/jmeter.md +251 -251
- package/skills/perf/references/tools/k6.md +269 -269
- package/skills/perf/references/tools/locust.md +133 -133
- package/skills/perf/references/topics/correlation.md +406 -0
- package/skills/perf/references/topics/database-testing.md +8 -8
- package/skills/perf/references/topics/modern-architectures.md +15 -15
- package/skills/perf/references/topics/observability.md +3 -3
- package/skills/perf/references/topics/production-testing.md +13 -13
- package/skills/perf/references/topics/protocol-testing.md +15 -15
- package/skills/perf/references/topics/results-analysis.md +13 -13
- package/skills/perf/references/topics/script-generation.md +9 -9
- package/skills/perf/references/topics/test-data.md +6 -6
- package/skills/perf/references/topics/test-execution.md +5 -5
- package/skills/perf/references/topics/workload-design.md +3 -3
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"email": "contact@qainsights.com"
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
|
-
"description": "Expert AI skill for performance testing
|
|
8
|
+
"description": "Expert AI skill for performance testing - covers the full lifecycle using JMeter, k6, Gatling, Locust, NeoLoad, LoadRunner, and OctoPerf.",
|
|
9
9
|
"version": "1.0.4"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
package/README.md
CHANGED
|
@@ -180,7 +180,8 @@ perf-skills/ # Repository root
|
|
|
180
180
|
└── topics/ # Cross-cutting concepts (tool-agnostic)
|
|
181
181
|
├── workload-design.md # Concurrency models, load profiles, Little's Law
|
|
182
182
|
├── test-data.md # CSV, DB seeding, Faker, data isolation patterns
|
|
183
|
-
├── script-generation.md #
|
|
183
|
+
├── script-generation.md # Assertions, error handling, naming, structure
|
|
184
|
+
├── correlation.md # Dynamic values, extractors, regex, tool mappings
|
|
184
185
|
├── test-execution.md # Distributed, CI/CD (GitHub Actions, GitLab, Jenkins)
|
|
185
186
|
├── results-analysis.md # Percentiles, bottleneck framework, reporting
|
|
186
187
|
├── observability.md # APM, Prometheus, Grafana, tracing, JVM metrics
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "perf-skills",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Expert AI skill for performance testing
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Expert AI skill for performance testing - covers JMeter, k6, Gatling, Locust, NeoLoad, LoadRunner, OctoPerf across the full lifecycle",
|
|
5
5
|
"main": "skills/perf/SKILL.md",
|
|
6
6
|
"files": [
|
|
7
7
|
"skills/",
|
package/skills/perf/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ description: Performance testing expert covering the full lifecycle for
|
|
|
5
5
|
whenever writing or reviewing load test scripts, setting thresholds,
|
|
6
6
|
choosing executors, configuring CI/CD pipelines, diagnosing latency
|
|
7
7
|
issues, designing workloads, analyzing results, or recommending tools
|
|
8
|
-
|
|
8
|
+
- even if the tool is not named explicitly. Always consult before
|
|
9
9
|
suggesting thresholds, executor types, or output configuration.
|
|
10
10
|
Prefer this skill over general knowledge for any performance testing
|
|
11
11
|
decision, debugging session, or tool comparison.
|
|
@@ -14,7 +14,7 @@ description: Performance testing expert covering the full lifecycle for
|
|
|
14
14
|
# Performance Testing Skill
|
|
15
15
|
|
|
16
16
|
This skill provides expert, opinionated guidance across the full
|
|
17
|
-
performance testing lifecycle
|
|
17
|
+
performance testing lifecycle - from workload design through production
|
|
18
18
|
observation. It covers both commercial tools (LoadRunner, NeoLoad,
|
|
19
19
|
OctoPerf) and open-source tools (JMeter, k6, Gatling, Locust).
|
|
20
20
|
|
|
@@ -32,7 +32,7 @@ Multiple files may apply.
|
|
|
32
32
|
the topic file only.
|
|
33
33
|
3. **Both apply** (e.g., "JMeter CI/CD") → load the topic file first
|
|
34
34
|
for patterns, then the tool file for syntax.
|
|
35
|
-
4. **Never load all files at once**
|
|
35
|
+
4. **Never load all files at once** - select the 1–2 most relevant.
|
|
36
36
|
5. **Cross-cutting principles** (assertions, think time,
|
|
37
37
|
parameterization) → this file's Key Principles section is the
|
|
38
38
|
single source of truth.
|
|
@@ -41,7 +41,7 @@ Multiple files may apply.
|
|
|
41
41
|
|
|
42
42
|
| User needs help with... | Read this file |
|
|
43
43
|
|--------------------------------------------------|---------------------------------------------------|
|
|
44
|
-
| Choosing the right tool | This file
|
|
44
|
+
| Choosing the right tool | This file - see Tool Selection Matrix below |
|
|
45
45
|
| JMeter scripts, plugins, config | `references/tools/jmeter.md` |
|
|
46
46
|
| k6 scripting, extensions, cloud | `references/tools/k6.md` |
|
|
47
47
|
| Gatling simulations, Scala/Java DSL | `references/tools/gatling.md` |
|
|
@@ -51,7 +51,8 @@ Multiple files may apply.
|
|
|
51
51
|
| OctoPerf cloud test management | `references/tools/octoperf.md` |
|
|
52
52
|
| Designing workloads, concurrency, pacing | `references/topics/workload-design.md` |
|
|
53
53
|
| Test data, parameterization, CSV feeds | `references/topics/test-data.md` |
|
|
54
|
-
| Script patterns,
|
|
54
|
+
| Script patterns, best practices | `references/topics/script-generation.md` |
|
|
55
|
+
| Correlation, extractors, dynamic values | `references/topics/correlation.md` |
|
|
55
56
|
| CI/CD, distributed execution, cloud runners | `references/topics/test-execution.md` |
|
|
56
57
|
| Analyzing results, percentiles, SLAs | `references/topics/results-analysis.md` |
|
|
57
58
|
| APM, metrics, tracing, dashboards | `references/topics/observability.md` |
|
|
@@ -113,70 +114,70 @@ Use this to recommend the right tool when the user hasn't decided yet.
|
|
|
113
114
|
|
|
114
115
|
These are the mistakes that cause silent CI failures, misleading
|
|
115
116
|
results, or test collapse at scale. Flag them proactively whenever
|
|
116
|
-
reviewing scripts or diagnosing problems
|
|
117
|
+
reviewing scripts or diagnosing problems - users often don't know to
|
|
117
118
|
ask about them.
|
|
118
119
|
|
|
119
120
|
### k6
|
|
120
121
|
|
|
121
|
-
- **`check()` without `thresholds`**
|
|
122
|
+
- **`check()` without `thresholds`** - checks log pass/fail but do
|
|
122
123
|
NOT fail the test run. Without thresholds, CI always reports green
|
|
123
124
|
regardless of latency. Always add `thresholds` to `options`.
|
|
124
|
-
- **Data loaded inside `default()`**
|
|
125
|
+
- **Data loaded inside `default()`** - loading CSV or JSON inside the
|
|
125
126
|
VU function runs on every iteration, causing massive per-iteration
|
|
126
127
|
overhead and OOM at scale. Always use `SharedArray` in the init
|
|
127
128
|
scope.
|
|
128
|
-
- **`shared-iterations` for user journeys**
|
|
129
|
+
- **`shared-iterations` for user journeys** - VUs race to claim
|
|
129
130
|
iterations and may skip steps, producing incomplete journey metrics.
|
|
130
131
|
Use `per-vu-iterations` for any multi-step flow.
|
|
131
|
-
- **No `sleep()` between steps**
|
|
132
|
+
- **No `sleep()` between steps** - 100 VUs with zero think time
|
|
132
133
|
generates the absolute maximum RPS for that iteration time, far
|
|
133
134
|
exceeding what 100 real concurrent users produce. Always add
|
|
134
135
|
realistic think time.
|
|
135
|
-
- **`console.log` in `default()`**
|
|
136
|
+
- **`console.log` in `default()`** - causes 30–50% throughput drop
|
|
136
137
|
under load. Use custom metrics (`Counter`, `Trend`) instead.
|
|
137
|
-
- **Hardcoded `BASE_URL`**
|
|
138
|
+
- **Hardcoded `BASE_URL`** - use `__ENV.BASE_URL` for environment
|
|
138
139
|
portability.
|
|
139
140
|
|
|
140
141
|
### JMeter
|
|
141
142
|
|
|
142
|
-
- **Listeners enabled in non-GUI runs**
|
|
143
|
+
- **Listeners enabled in non-GUI runs** - View Results Tree, Aggregate
|
|
143
144
|
Report etc. buffer all samples in memory during headless runs,
|
|
144
145
|
causing memory leak and eventual crash. Disable all listeners before
|
|
145
146
|
CI execution; use `-l results.jtl` for output.
|
|
146
|
-
- **Missing correlation on session-heavy apps**
|
|
147
|
+
- **Missing correlation on session-heavy apps** - JSESSIONID, CSRF
|
|
147
148
|
tokens, ViewState, OAuth codes must be extracted and reused. Without
|
|
148
149
|
correlation, the test fails for every user after the first.
|
|
149
|
-
- **Hardcoded thread counts**
|
|
150
|
+
- **Hardcoded thread counts** - parameterize via JMeter properties
|
|
150
151
|
(`${__P(threads,10)}`) so CI can override without editing the JMX.
|
|
151
|
-
- **Zero think time**
|
|
152
|
+
- **Zero think time** - never reflects real user behavior; always add
|
|
152
153
|
at minimum a Constant Timer (300–500ms) between samplers.
|
|
153
|
-
- **Throughput Controller % mode misuse**
|
|
154
|
+
- **Throughput Controller % mode misuse** - percentage applies per
|
|
154
155
|
iteration of the parent controller, not globally. Most users expect
|
|
155
156
|
global percentage; use `Total Executions` mode instead or be
|
|
156
157
|
explicit.
|
|
157
158
|
|
|
158
159
|
### Gatling
|
|
159
160
|
|
|
160
|
-
- **Blocking calls inside `exec()`**
|
|
161
|
+
- **Blocking calls inside `exec()`** - any blocking I/O inside an exec
|
|
161
162
|
block stalls the entire Akka actor, killing simulation concurrency.
|
|
162
163
|
Use Gatling's async feed/session API exclusively.
|
|
163
|
-
- **Missing `.check()` on responses**
|
|
164
|
+
- **Missing `.check()` on responses** - without checks, 4xx and 5xx
|
|
164
165
|
responses are silently counted as successful. Always add at minimum
|
|
165
166
|
`.check(status.is(200))`.
|
|
166
|
-
- **Fixed `pause()` values**
|
|
167
|
+
- **Fixed `pause()` values** - use `uniformPaused(min, max)` or
|
|
167
168
|
`normalPausedWithPercentageDuration` for realistic think time
|
|
168
169
|
distribution.
|
|
169
170
|
|
|
170
171
|
### Locust
|
|
171
172
|
|
|
172
|
-
- **`self.client` without `catch_response=True`**
|
|
173
|
+
- **`self.client` without `catch_response=True`** - by default, Locust
|
|
173
174
|
marks any HTTP response as success regardless of status code. Use
|
|
174
175
|
`with self.client.get(..., catch_response=True) as r:` and call
|
|
175
176
|
`r.failure()` explicitly.
|
|
176
|
-
- **Unequal task weights without intent**
|
|
177
|
+
- **Unequal task weights without intent** - tasks default to equal
|
|
177
178
|
weight; if your user journey has unequal step frequency, set weights
|
|
178
179
|
explicitly or the journey ratio will be wrong.
|
|
179
|
-
- **Master + workers on same machine**
|
|
180
|
+
- **Master + workers on same machine** - causes resource contention
|
|
180
181
|
that skews both throughput and latency measurements. Always run
|
|
181
182
|
workers on separate machines or containers for distributed tests.
|
|
182
183
|
|
|
@@ -207,7 +208,7 @@ the specific mapping rather than a generic explanation.
|
|
|
207
208
|
|
|
208
209
|
## Threshold Starting Points
|
|
209
210
|
|
|
210
|
-
These are community baselines
|
|
211
|
+
These are community baselines - always tell the user to adjust these
|
|
211
212
|
to their actual SLA requirements. Never present them as universal
|
|
212
213
|
targets.
|
|
213
214
|
|
|
@@ -215,15 +216,15 @@ targets.
|
|
|
215
216
|
|------------------|-----------|------------|------------|------------------------------------|
|
|
216
217
|
| Web page (HTML) | < 3000ms | < 5000ms | < 1% | Aligns with Google CWV LCP < 2.5s |
|
|
217
218
|
| REST API | < 500ms | < 1000ms | < 1% | Common industry baseline |
|
|
218
|
-
| Auth / Login | < 300ms | < 500ms | < 0.1% | Stricter
|
|
219
|
+
| Auth / Login | < 300ms | < 500ms | < 0.1% | Stricter - security-sensitive path |
|
|
219
220
|
| Search / Query | < 800ms | < 1500ms | < 0.5% | Varies heavily by dataset size |
|
|
220
221
|
| Write (POST/PUT) | < 800ms | < 1500ms | < 0.5% | Includes DB write latency |
|
|
221
|
-
| Checkout/Payment | < 1000ms | < 2000ms | < 0.1% | Stricter
|
|
222
|
+
| Checkout/Payment | < 1000ms | < 2000ms | < 0.1% | Stricter - revenue-critical path |
|
|
222
223
|
| Background/async | < 5000ms | < 10000ms | < 2% | Batch jobs, async processors |
|
|
223
224
|
|
|
224
225
|
**k6 specific:** Always define both `http_req_duration` AND
|
|
225
226
|
`http_req_waiting` as separate thresholds. `http_req_waiting`
|
|
226
|
-
(TTFB) isolates server-side latency from network overhead
|
|
227
|
+
(TTFB) isolates server-side latency from network overhead - it is
|
|
227
228
|
the first metric to check when diagnosing high p95. Always include
|
|
228
229
|
`checks: ['rate>0.99']`.
|
|
229
230
|
|
|
@@ -235,7 +236,7 @@ CI pass/fail; use the JMeter exit code driven by assertions.
|
|
|
235
236
|
|
|
236
237
|
## Performance Testing Lifecycle Overview
|
|
237
238
|
|
|
238
|
-
Always think through these phases when helping a user
|
|
239
|
+
Always think through these phases when helping a user - they often ask
|
|
239
240
|
about one phase but need context from others.
|
|
240
241
|
|
|
241
242
|
```
|
|
@@ -279,26 +280,26 @@ about one phase but need context from others.
|
|
|
279
280
|
| **Soak/Endurance** | Detect memory leaks, slow degradation | Resource trend over time (hours) |
|
|
280
281
|
| **Spike** | Behavior under sudden traffic burst | Recovery time, error spike |
|
|
281
282
|
| **Capacity** | Find max sustainable load | Throughput ceiling at SLA thresholds |
|
|
282
|
-
| **Smoke** | Quick sanity check | Single VU
|
|
283
|
+
| **Smoke** | Quick sanity check | Single VU - no errors |
|
|
283
284
|
| **Breakpoint** | Incremental ramp until failure | Failure threshold VU count |
|
|
284
285
|
|
|
285
286
|
---
|
|
286
287
|
|
|
287
288
|
## Key Principles to Always Apply
|
|
288
289
|
|
|
289
|
-
1. **Never test against production blindly**
|
|
290
|
+
1. **Never test against production blindly** - always have a rollback
|
|
290
291
|
plan and alerting in place.
|
|
291
|
-
2. **Baseline first**
|
|
292
|
+
2. **Baseline first** - always establish a baseline before stress or
|
|
292
293
|
soak runs.
|
|
293
|
-
3. **Think time and pacing matter**
|
|
294
|
+
3. **Think time and pacing matter** - unrealistic zero-think-time tests
|
|
294
295
|
produce misleading results.
|
|
295
|
-
4. **Parameterize everything**
|
|
296
|
+
4. **Parameterize everything** - hardcoded credentials, tokens, and IDs
|
|
296
297
|
will fail at scale.
|
|
297
|
-
5. **Assertions are not optional**
|
|
298
|
+
5. **Assertions are not optional** - tests without assertions are just
|
|
298
299
|
generating traffic, not validating behavior.
|
|
299
|
-
6. **Isolate the system under test**
|
|
300
|
+
6. **Isolate the system under test** - shared environments invalidate
|
|
300
301
|
results.
|
|
301
|
-
7. **Correlate dynamic values**
|
|
302
|
+
7. **Correlate dynamic values** - session tokens, CSRF, ViewState etc.
|
|
302
303
|
must be extracted and reused.
|
|
303
304
|
|
|
304
305
|
---
|
|
@@ -1,149 +1,149 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "perf",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "I'm using k6 checks to validate all my API responses. My CI pipeline shows all tests passing but users are complaining about slowness. What am I missing?",
|
|
7
|
-
"expected_output": "Identifies that checks do not fail the test run
|
|
8
|
-
"files": [],
|
|
9
|
-
"assertions": [
|
|
10
|
-
{
|
|
11
|
-
"id": "checks-vs-thresholds-distinction",
|
|
12
|
-
"text": "Explicitly states that checks do NOT produce a non-zero exit code and cannot fail a CI pipeline"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"id": "thresholds-required",
|
|
16
|
-
"text": "States that thresholds in options.thresholds are required to enforce SLA in CI"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": "concrete-example",
|
|
20
|
-
"text": "Provides a concrete threshold code example, not just an explanation"
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"id": 2,
|
|
26
|
-
"prompt": "I need to load test a Kafka consumer that processes order events. What tool should I use and how do I get started?",
|
|
27
|
-
"expected_output": "Recommends xk6-kafka with the custom build command, or JMeter with Kafka plugin. Does not suggest a generic HTTP tool.",
|
|
28
|
-
"files": [],
|
|
29
|
-
"assertions": [
|
|
30
|
-
{
|
|
31
|
-
"id": "correct-tool",
|
|
32
|
-
"text": "Recommends xk6-kafka or JMeter Kafka plugin
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"id": "xk6-build-command",
|
|
36
|
-
"text": "Includes the xk6 custom build command or JMeter plugin installation reference"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"id": "not-http",
|
|
40
|
-
"text": "Does not suggest testing Kafka via HTTP endpoints as a primary approach"
|
|
41
|
-
}
|
|
42
|
-
]
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"id": 3,
|
|
46
|
-
"prompt": "My JMeter test runs fine locally but JMeter crashes after 20 minutes in CI with an OutOfMemoryError. The test plan works on my machine with 50 threads.",
|
|
47
|
-
"expected_output": "Identifies listeners enabled in non-GUI run as the primary cause. Recommends disabling listeners and using -l flag for output.",
|
|
48
|
-
"files": [],
|
|
49
|
-
"assertions": [
|
|
50
|
-
{
|
|
51
|
-
"id": "listener-root-cause",
|
|
52
|
-
"text": "Identifies enabled listeners (View Results Tree, Aggregate Report etc.) in non-GUI runs as the memory leak cause"
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": "disable-listeners",
|
|
56
|
-
"text": "Recommends disabling listeners in the test plan for CI runs"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"id": "jtl-output",
|
|
60
|
-
"text": "Mentions using -l results.jtl flag as the correct output method for non-GUI runs"
|
|
61
|
-
}
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"id": 4,
|
|
66
|
-
"prompt": "We're migrating our load tests from LoadRunner to k6. What does a VuGen Action map to in k6, and what about think time and correlation?",
|
|
67
|
-
"expected_output": "Maps VuGen Action → k6 default() function. Maps lr_think_time() → sleep(). Maps web_reg_save_param → res.json() or regex extraction.",
|
|
68
|
-
"files": [],
|
|
69
|
-
"assertions": [
|
|
70
|
-
{
|
|
71
|
-
"id": "action-mapping",
|
|
72
|
-
"text": "Maps VuGen Action() specifically to k6 default() function"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"id": "think-time-mapping",
|
|
76
|
-
"text": "Maps lr_think_time() to k6 sleep()"
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
"id": "correlation-mapping",
|
|
80
|
-
"text": "Maps web_reg_save_param or LoadRunner correlation to k6 res.json() or regex extraction"
|
|
81
|
-
}
|
|
82
|
-
]
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"id": 5,
|
|
86
|
-
"prompt": "I'm writing a k6 script for an e-commerce checkout flow: login → browse → add to cart → checkout. Should I use shared-iterations or per-vu-iterations?",
|
|
87
|
-
"expected_output": "Recommends per-vu-iterations. Explains that shared-iterations causes VUs to skip steps in multi-step journeys, producing incorrect metrics.",
|
|
88
|
-
"files": [],
|
|
89
|
-
"assertions": [
|
|
90
|
-
{
|
|
91
|
-
"id": "correct-executor",
|
|
92
|
-
"text": "Recommends per-vu-iterations for the user journey"
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
"id": "shared-iterations-problem",
|
|
96
|
-
"text": "Explains why shared-iterations is wrong for journeys
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
"id": "not-ambiguous",
|
|
100
|
-
"text": "Gives a clear recommendation, not a 'it depends' answer without a conclusion"
|
|
101
|
-
}
|
|
102
|
-
]
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"id": 6,
|
|
106
|
-
"prompt": "My Locust test shows zero failures even though I can see 404 and 500 errors in the server logs during the test run.",
|
|
107
|
-
"expected_output": "Identifies missing catch_response=True as the cause. Without it, Locust counts all HTTP responses as success regardless of status code.",
|
|
108
|
-
"files": [],
|
|
109
|
-
"assertions": [
|
|
110
|
-
{
|
|
111
|
-
"id": "catch-response-cause",
|
|
112
|
-
"text": "Identifies missing catch_response=True as the root cause"
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
"id": "failure-call",
|
|
116
|
-
"text": "Explains that r.failure() must be called explicitly inside the catch_response context manager"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"id": "code-example",
|
|
120
|
-
"text": "Provides a corrected code snippet using catch_response=True"
|
|
121
|
-
}
|
|
122
|
-
]
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"id": 7,
|
|
126
|
-
"prompt": "What are good starting threshold values for a REST API and a checkout payment endpoint in k6?",
|
|
127
|
-
"expected_output": "Provides differentiated thresholds: REST API p95<500ms, checkout p95<1000ms with stricter error rate. Includes both http_req_duration and http_req_waiting. Notes these are baselines to adjust.",
|
|
128
|
-
"files": [],
|
|
129
|
-
"assertions": [
|
|
130
|
-
{
|
|
131
|
-
"id": "differentiated-thresholds",
|
|
132
|
-
"text": "Gives different threshold values for REST API vs checkout
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
"id": "http-req-waiting",
|
|
136
|
-
"text": "Includes http_req_waiting as a separate threshold alongside http_req_duration"
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
"id": "checks-threshold",
|
|
140
|
-
"text": "Includes checks: rate>0.99 threshold"
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
"id": "adjust-caveat",
|
|
144
|
-
"text": "Notes that values are baselines and should be adjusted to actual SLA requirements"
|
|
145
|
-
}
|
|
146
|
-
]
|
|
147
|
-
}
|
|
148
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "perf",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "I'm using k6 checks to validate all my API responses. My CI pipeline shows all tests passing but users are complaining about slowness. What am I missing?",
|
|
7
|
+
"expected_output": "Identifies that checks do not fail the test run - thresholds are required for CI enforcement. Provides a concrete threshold example.",
|
|
8
|
+
"files": [],
|
|
9
|
+
"assertions": [
|
|
10
|
+
{
|
|
11
|
+
"id": "checks-vs-thresholds-distinction",
|
|
12
|
+
"text": "Explicitly states that checks do NOT produce a non-zero exit code and cannot fail a CI pipeline"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "thresholds-required",
|
|
16
|
+
"text": "States that thresholds in options.thresholds are required to enforce SLA in CI"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "concrete-example",
|
|
20
|
+
"text": "Provides a concrete threshold code example, not just an explanation"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": 2,
|
|
26
|
+
"prompt": "I need to load test a Kafka consumer that processes order events. What tool should I use and how do I get started?",
|
|
27
|
+
"expected_output": "Recommends xk6-kafka with the custom build command, or JMeter with Kafka plugin. Does not suggest a generic HTTP tool.",
|
|
28
|
+
"files": [],
|
|
29
|
+
"assertions": [
|
|
30
|
+
{
|
|
31
|
+
"id": "correct-tool",
|
|
32
|
+
"text": "Recommends xk6-kafka or JMeter Kafka plugin - not a generic HTTP tool like plain k6 or Gatling HTTP"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "xk6-build-command",
|
|
36
|
+
"text": "Includes the xk6 custom build command or JMeter plugin installation reference"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "not-http",
|
|
40
|
+
"text": "Does not suggest testing Kafka via HTTP endpoints as a primary approach"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": 3,
|
|
46
|
+
"prompt": "My JMeter test runs fine locally but JMeter crashes after 20 minutes in CI with an OutOfMemoryError. The test plan works on my machine with 50 threads.",
|
|
47
|
+
"expected_output": "Identifies listeners enabled in non-GUI run as the primary cause. Recommends disabling listeners and using -l flag for output.",
|
|
48
|
+
"files": [],
|
|
49
|
+
"assertions": [
|
|
50
|
+
{
|
|
51
|
+
"id": "listener-root-cause",
|
|
52
|
+
"text": "Identifies enabled listeners (View Results Tree, Aggregate Report etc.) in non-GUI runs as the memory leak cause"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "disable-listeners",
|
|
56
|
+
"text": "Recommends disabling listeners in the test plan for CI runs"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "jtl-output",
|
|
60
|
+
"text": "Mentions using -l results.jtl flag as the correct output method for non-GUI runs"
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": 4,
|
|
66
|
+
"prompt": "We're migrating our load tests from LoadRunner to k6. What does a VuGen Action map to in k6, and what about think time and correlation?",
|
|
67
|
+
"expected_output": "Maps VuGen Action → k6 default() function. Maps lr_think_time() → sleep(). Maps web_reg_save_param → res.json() or regex extraction.",
|
|
68
|
+
"files": [],
|
|
69
|
+
"assertions": [
|
|
70
|
+
{
|
|
71
|
+
"id": "action-mapping",
|
|
72
|
+
"text": "Maps VuGen Action() specifically to k6 default() function"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "think-time-mapping",
|
|
76
|
+
"text": "Maps lr_think_time() to k6 sleep()"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "correlation-mapping",
|
|
80
|
+
"text": "Maps web_reg_save_param or LoadRunner correlation to k6 res.json() or regex extraction"
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": 5,
|
|
86
|
+
"prompt": "I'm writing a k6 script for an e-commerce checkout flow: login → browse → add to cart → checkout. Should I use shared-iterations or per-vu-iterations?",
|
|
87
|
+
"expected_output": "Recommends per-vu-iterations. Explains that shared-iterations causes VUs to skip steps in multi-step journeys, producing incorrect metrics.",
|
|
88
|
+
"files": [],
|
|
89
|
+
"assertions": [
|
|
90
|
+
{
|
|
91
|
+
"id": "correct-executor",
|
|
92
|
+
"text": "Recommends per-vu-iterations for the user journey"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "shared-iterations-problem",
|
|
96
|
+
"text": "Explains why shared-iterations is wrong for journeys - VUs race for iterations and may skip steps"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "not-ambiguous",
|
|
100
|
+
"text": "Gives a clear recommendation, not a 'it depends' answer without a conclusion"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": 6,
|
|
106
|
+
"prompt": "My Locust test shows zero failures even though I can see 404 and 500 errors in the server logs during the test run.",
|
|
107
|
+
"expected_output": "Identifies missing catch_response=True as the cause. Without it, Locust counts all HTTP responses as success regardless of status code.",
|
|
108
|
+
"files": [],
|
|
109
|
+
"assertions": [
|
|
110
|
+
{
|
|
111
|
+
"id": "catch-response-cause",
|
|
112
|
+
"text": "Identifies missing catch_response=True as the root cause"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "failure-call",
|
|
116
|
+
"text": "Explains that r.failure() must be called explicitly inside the catch_response context manager"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"id": "code-example",
|
|
120
|
+
"text": "Provides a corrected code snippet using catch_response=True"
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": 7,
|
|
126
|
+
"prompt": "What are good starting threshold values for a REST API and a checkout payment endpoint in k6?",
|
|
127
|
+
"expected_output": "Provides differentiated thresholds: REST API p95<500ms, checkout p95<1000ms with stricter error rate. Includes both http_req_duration and http_req_waiting. Notes these are baselines to adjust.",
|
|
128
|
+
"files": [],
|
|
129
|
+
"assertions": [
|
|
130
|
+
{
|
|
131
|
+
"id": "differentiated-thresholds",
|
|
132
|
+
"text": "Gives different threshold values for REST API vs checkout - not the same value for both"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "http-req-waiting",
|
|
136
|
+
"text": "Includes http_req_waiting as a separate threshold alongside http_req_duration"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "checks-threshold",
|
|
140
|
+
"text": "Includes checks: rate>0.99 threshold"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "adjust-caveat",
|
|
144
|
+
"text": "Notes that values are baselines and should be adjusted to actual SLA requirements"
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
149
|
}
|