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.
@@ -5,7 +5,7 @@
5
5
  "email": "contact@qainsights.com"
6
6
  },
7
7
  "metadata": {
8
- "description": "Expert AI skill for performance testing covers the full lifecycle using JMeter, k6, Gatling, Locust, NeoLoad, LoadRunner, and OctoPerf.",
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 # Correlation, assertions, error handling, naming
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": "1.0.4",
4
- "description": "Expert AI skill for performance testing covers JMeter, k6, Gatling, Locust, NeoLoad, LoadRunner, OctoPerf across the full lifecycle",
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/",
@@ -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
- even if the tool is not named explicitly. Always consult before
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 from workload design through production
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** select the 1–2 most relevant.
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 see Tool Selection Matrix below |
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, correlation, best practices | `references/topics/script-generation.md` |
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 users often don't know to
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`** checks log pass/fail but do
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()`** loading CSV or JSON inside the
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** VUs race to claim
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** 100 VUs with zero think time
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()`** causes 30–50% throughput drop
136
+ - **`console.log` in `default()`** - causes 30–50% throughput drop
136
137
  under load. Use custom metrics (`Counter`, `Trend`) instead.
137
- - **Hardcoded `BASE_URL`** use `__ENV.BASE_URL` for environment
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** View Results Tree, Aggregate
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** JSESSIONID, CSRF
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** parameterize via JMeter properties
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** never reflects real user behavior; always add
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** percentage applies per
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()`** any blocking I/O inside an 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** without checks, 4xx and 5xx
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** use `uniformPaused(min, max)` or
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`** by default, Locust
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** tasks default to equal
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** causes resource contention
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 always tell the user to adjust these
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 security-sensitive path |
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 revenue-critical path |
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 it is
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 they often ask
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 no errors |
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** always have a rollback
290
+ 1. **Never test against production blindly** - always have a rollback
290
291
  plan and alerting in place.
291
- 2. **Baseline first** always establish a baseline before stress or
292
+ 2. **Baseline first** - always establish a baseline before stress or
292
293
  soak runs.
293
- 3. **Think time and pacing matter** unrealistic zero-think-time tests
294
+ 3. **Think time and pacing matter** - unrealistic zero-think-time tests
294
295
  produce misleading results.
295
- 4. **Parameterize everything** hardcoded credentials, tokens, and IDs
296
+ 4. **Parameterize everything** - hardcoded credentials, tokens, and IDs
296
297
  will fail at scale.
297
- 5. **Assertions are not optional** tests without assertions are just
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** shared environments invalidate
300
+ 6. **Isolate the system under test** - shared environments invalidate
300
301
  results.
301
- 7. **Correlate dynamic values** session tokens, CSRF, ViewState etc.
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 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
- ]
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
  }