k6-cucumber-steps 2.0.8 → 2.0.10
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/README.md +121 -1
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -1
- package/dist/generators/feature.parser.d.ts +4 -0
- package/dist/generators/feature.parser.d.ts.map +1 -1
- package/dist/generators/feature.parser.js +42 -15
- package/dist/generators/feature.parser.js.map +1 -1
- package/dist/generators/samples/sample-steps.generator.d.ts.map +1 -1
- package/dist/generators/samples/sample-steps.generator.js +62 -0
- package/dist/generators/samples/sample-steps.generator.js.map +1 -1
- package/dist/metadata.json +29 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,7 +23,9 @@ All step definitions are fully documented and available in multiple formats:
|
|
|
23
23
|
### 1. TypeDoc API Documentation
|
|
24
24
|
Interactive HTML documentation with search and navigation:
|
|
25
25
|
|
|
26
|
-
**Online:** [View TypeDoc Documentation](https://qapaschale.github.io/k6-cucumber-steps/
|
|
26
|
+
**Online:** [View TypeDoc Documentation](https://qapaschale.github.io/k6-cucumber-steps/)
|
|
27
|
+
|
|
28
|
+
> 🚀 **Auto-Deployed**: Documentation is automatically generated and deployed to GitHub Pages on every push to the `main` branch.
|
|
27
29
|
|
|
28
30
|
**Locally:**
|
|
29
31
|
```bash
|
|
@@ -160,6 +162,116 @@ And I k6 print all aliases # Print all stored aliases
|
|
|
160
162
|
Given I k6 clear auth token # Remove Authorization header
|
|
161
163
|
```
|
|
162
164
|
|
|
165
|
+
## 🆕 What's New in v2.0.9
|
|
166
|
+
|
|
167
|
+
### 🔍 Recursive Feature File Search
|
|
168
|
+
|
|
169
|
+
The feature parser now **automatically searches subdirectories** for `.feature` files.
|
|
170
|
+
|
|
171
|
+
**Example:**
|
|
172
|
+
```bash
|
|
173
|
+
npx k6-cucumber-steps generate -f ./features
|
|
174
|
+
# Finds: ./features/login.feature
|
|
175
|
+
# ./features/api/users.feature
|
|
176
|
+
# ./features/api/orders.feature
|
|
177
|
+
# ./features/ui/dashboard.feature
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Excluded directories:** `node_modules/`, hidden directories (`.git/`, `.github/`, etc.)
|
|
181
|
+
|
|
182
|
+
### 🗑️ DELETE Request Support (NEW!)
|
|
183
|
+
|
|
184
|
+
Full DELETE request support with environment variables and alias replacement:
|
|
185
|
+
|
|
186
|
+
```gherkin
|
|
187
|
+
# Basic DELETE
|
|
188
|
+
When I k6 make a DELETE request to "/users/1"
|
|
189
|
+
|
|
190
|
+
# DELETE with env vars
|
|
191
|
+
When I k6 make a DELETE request to "/users/{{USER_ID}}"
|
|
192
|
+
|
|
193
|
+
# DELETE with custom headers
|
|
194
|
+
When I k6 make a DELETE request to "/api/items/1" with headers:
|
|
195
|
+
| Authorization |
|
|
196
|
+
| Bearer {{authToken}} |
|
|
197
|
+
|
|
198
|
+
# DELETE with payload file
|
|
199
|
+
When I k6 make a DELETE request to "/api/bulk" with payload from "data/delete-payload.json"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Supports:**
|
|
203
|
+
- `{{VARIABLE_NAME}}` for environment variables
|
|
204
|
+
- `{{alias:NAME}}` for stored aliases in payload files
|
|
205
|
+
|
|
206
|
+
### 📁 Multiple Feature Paths
|
|
207
|
+
|
|
208
|
+
Specify **multiple directories or files** using comma-separated paths.
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Search multiple directories
|
|
212
|
+
npx k6-cucumber-steps generate -f "./features/api,./features/ui,./tests/regression"
|
|
213
|
+
|
|
214
|
+
# Mix directories and single files
|
|
215
|
+
npx k6-cucumber-steps generate -f "./features,./tests/smoke.feature"
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 🏷️ Enhanced Tag Filtering
|
|
219
|
+
|
|
220
|
+
Better tag filtering with **detailed feedback** on what's being included/excluded.
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Include only @smoke tests
|
|
224
|
+
npx k6-cucumber-steps generate --tags @smoke
|
|
225
|
+
|
|
226
|
+
# Include multiple tags (OR logic)
|
|
227
|
+
npx k6-cucumber-steps generate --tags "@smoke,@regression"
|
|
228
|
+
|
|
229
|
+
# Exclude specific tags
|
|
230
|
+
npx k6-cucumber-steps generate --exclude-tags "@wip,@broken"
|
|
231
|
+
|
|
232
|
+
# Combine include and exclude
|
|
233
|
+
npx k6-cucumber-steps generate --tags "@smoke" --exclude-tags "@known-issue"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**New CLI Output:**
|
|
237
|
+
```
|
|
238
|
+
🏷️ Including scenarios with tags: @smoke
|
|
239
|
+
Filtered: 23 → 8 scenarios
|
|
240
|
+
|
|
241
|
+
🚫 Excluding scenarios with tags: @wip
|
|
242
|
+
Filtered: 8 → 6 scenarios
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 📄 Single Feature File Support
|
|
246
|
+
|
|
247
|
+
Target **individual feature files** directly.
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Run single feature file
|
|
251
|
+
npx k6-cucumber-steps generate -f ./features/login.feature
|
|
252
|
+
|
|
253
|
+
# Generate specific test suite
|
|
254
|
+
npx k6-cucumber-steps generate -f ./tests/regression/payment-flow.feature
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### 📊 Improved CLI Feedback
|
|
258
|
+
|
|
259
|
+
Enhanced command-line output with detailed progress information:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
$ npx k6-cucumber-steps generate -f ./features --tags @smoke
|
|
263
|
+
|
|
264
|
+
Generating k6 scripts from feature files...
|
|
265
|
+
📂 Searching for feature files in: ./features
|
|
266
|
+
✅ Found 5 feature file(s)
|
|
267
|
+
📋 Total scenarios found: 23
|
|
268
|
+
🏷️ Including scenarios with tags: @smoke
|
|
269
|
+
Filtered: 23 → 8 scenarios
|
|
270
|
+
📝 Processing 8 scenario(s) for script generation...
|
|
271
|
+
✅ Generated k6 script: ./generated/test.generated.ts
|
|
272
|
+
📋 Scenarios processed: 8
|
|
273
|
+
```
|
|
274
|
+
|
|
163
275
|
## ✨ New: Hybrid Performance Testing
|
|
164
276
|
|
|
165
277
|
You can now combine **Protocol-level (HTTP)** load testing and **Browser-level (Web Vitals)** testing in a single Gherkin suite.
|
|
@@ -503,6 +615,7 @@ When I k6 make a GET request to "/users/1" with headers:
|
|
|
503
615
|
|
|
504
616
|
# POST requests
|
|
505
617
|
When I k6 make a POST request to "/users"
|
|
618
|
+
When I k6 make a POST request to "/users" with payload from "payload.json"
|
|
506
619
|
|
|
507
620
|
# PUT requests
|
|
508
621
|
When I k6 make a PUT request to "/users/1"
|
|
@@ -511,6 +624,13 @@ When I k6 make a PUT request to "/users/1" with body:
|
|
|
511
624
|
# PATCH requests
|
|
512
625
|
When I k6 make a PATCH request to "/settings"
|
|
513
626
|
When I k6 make a PATCH request to "/settings" with body:
|
|
627
|
+
|
|
628
|
+
# DELETE requests (NEW!)
|
|
629
|
+
When I k6 make a DELETE request to "/users/1"
|
|
630
|
+
When I k6 make a DELETE request to "/users/{{USER_ID}}" with headers:
|
|
631
|
+
| Authorization |
|
|
632
|
+
| Bearer {{authToken}} |
|
|
633
|
+
When I k6 make a DELETE request to "/api/items/1" with payload from "data/delete-payload.json"
|
|
514
634
|
```
|
|
515
635
|
|
|
516
636
|
### Sample Features
|
package/dist/cli.js
CHANGED
|
@@ -38,25 +38,39 @@ commander_1.program
|
|
|
38
38
|
});
|
|
39
39
|
async function generateK6Scripts(options) {
|
|
40
40
|
console.log("Generating k6 scripts from feature files...");
|
|
41
|
+
console.log(`📂 Searching for feature files in: ${options.features || "./features"}`);
|
|
41
42
|
const parser = new feature_parser_1.FeatureParser();
|
|
42
43
|
const features = await parser.loadAndParseFeatures(options.features || "./features");
|
|
44
|
+
console.log(`✅ Found ${features.length} feature file(s)`);
|
|
45
|
+
// Count total scenarios before filtering
|
|
46
|
+
const totalScenarios = features.reduce((sum, f) => sum + f.scenarios.length, 0);
|
|
47
|
+
console.log(`📋 Total scenarios found: ${totalScenarios}`);
|
|
43
48
|
// Include by tags
|
|
44
49
|
if (options.tags) {
|
|
45
50
|
const includeTags = options.tags.split(",").map(t => t.trim()).filter(t => t);
|
|
51
|
+
console.log(`🏷️ Including scenarios with tags: ${includeTags.join(', ')}`);
|
|
52
|
+
let beforeCount = totalScenarios;
|
|
46
53
|
features.forEach((feature) => {
|
|
47
54
|
feature.scenarios = feature.scenarios.filter((scenario) => includeTags.some(tag => scenario.tags.includes(tag)));
|
|
48
55
|
});
|
|
56
|
+
const afterCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
|
|
57
|
+
console.log(` Filtered: ${beforeCount} → ${afterCount} scenarios`);
|
|
49
58
|
}
|
|
50
59
|
// Exclude by tags
|
|
51
60
|
if (options.excludeTags) {
|
|
52
61
|
const excludeTags = options.excludeTags.split(",").map(t => t.trim()).filter(t => t);
|
|
62
|
+
console.log(`🚫 Excluding scenarios with tags: ${excludeTags.join(', ')}`);
|
|
63
|
+
let beforeCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
|
|
53
64
|
features.forEach((feature) => {
|
|
54
65
|
feature.scenarios = feature.scenarios.filter((scenario) => !excludeTags.some(tag => scenario.tags.includes(tag)));
|
|
55
66
|
});
|
|
67
|
+
const afterCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
|
|
68
|
+
console.log(` Filtered: ${beforeCount} → ${afterCount} scenarios`);
|
|
56
69
|
}
|
|
57
70
|
// Flatten all scenarios
|
|
58
71
|
const allScenarios = features.flatMap((f) => f.scenarios);
|
|
59
72
|
const metadata = parser.loadScenarioMetadata(allScenarios);
|
|
73
|
+
console.log(`📝 Processing ${allScenarios.length} scenario(s) for script generation...`);
|
|
60
74
|
const generator = new k6_script_generator_1.K6ScriptGenerator();
|
|
61
75
|
const config = {
|
|
62
76
|
language: options.lang,
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AACA,aAAa;AACb,yCAAoC;AACpC,0DAAsD;AACtD,gEAA4D;AAC5D,0EAAqE;AAErE,4CAAoB;AAEpB,eAAe;AACf,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,mBAAO;KACJ,IAAI,CAAC,mBAAmB,CAAC;KACzB,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,mBAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,uBAAuB,EAAE,iCAAiC,EAAE,IAAI,CAAC;KACxE,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,IAAI,0BAAW,EAAE,CAAC;IAClC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAmB,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEL,mBAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,YAAY,CAAC;KACtE,MAAM,CACL,qBAAqB,EACrB,mCAAmC,EACnC,aAAa,CACd;KACA,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,CAAC;KAC9E,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,IAAI,CAAC;KACnE,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAYL,KAAK,UAAU,iBAAiB,CAAC,OAAwB;IACvD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { FeatureFile, Scenario, ScenarioMetadata } from "../types";
|
|
2
2
|
export declare class FeatureParser {
|
|
3
3
|
loadAndParseFeatures(featuresPath: string): Promise<FeatureFile[]>;
|
|
4
|
+
/**
|
|
5
|
+
* Recursively find all .feature files in a directory
|
|
6
|
+
*/
|
|
7
|
+
private findFeatureFilesRecursive;
|
|
4
8
|
private parseFeature;
|
|
5
9
|
/**
|
|
6
10
|
* Helper to map Gherkin AST steps to our internal Scenario Step format,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.parser.d.ts","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAQ,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEzE,qBAAa,aAAa;IAClB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"feature.parser.d.ts","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAQ,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEzE,qBAAa,aAAa;IAClB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAqCxE;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,YAAY;IAyGpB;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAgCpC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE;CA4BhE"}
|
|
@@ -44,25 +44,52 @@ const Gherkin = __importStar(require("@cucumber/gherkin"));
|
|
|
44
44
|
const Messages = __importStar(require("@cucumber/messages"));
|
|
45
45
|
class FeatureParser {
|
|
46
46
|
async loadAndParseFeatures(featuresPath) {
|
|
47
|
-
// Resolve path relative to the Current Working Directory
|
|
48
|
-
const resolvedPath = path_1.default.resolve(process.cwd(), featuresPath);
|
|
49
47
|
const featureFiles = [];
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
48
|
+
// Handle multiple paths (comma-separated)
|
|
49
|
+
const paths = featuresPath.split(',').map(p => p.trim()).filter(p => p);
|
|
50
|
+
for (const singlePath of paths) {
|
|
51
|
+
const resolvedPath = path_1.default.resolve(process.cwd(), singlePath);
|
|
52
|
+
if (!fs_1.default.existsSync(resolvedPath)) {
|
|
53
|
+
console.warn(`⚠️ Warning: The path "${singlePath}" does not exist at ${resolvedPath}`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (fs_1.default.statSync(resolvedPath).isDirectory()) {
|
|
57
|
+
// Recursively find all .feature files in directory
|
|
58
|
+
const dirFeatureFiles = this.findFeatureFilesRecursive(resolvedPath);
|
|
59
|
+
for (const file of dirFeatureFiles) {
|
|
60
|
+
const content = fs_1.default.readFileSync(file, "utf8");
|
|
61
|
+
featureFiles.push(this.parseFeature(content, file));
|
|
60
62
|
}
|
|
61
63
|
}
|
|
64
|
+
else if (singlePath.endsWith(".feature")) {
|
|
65
|
+
// Single feature file
|
|
66
|
+
const content = fs_1.default.readFileSync(resolvedPath, "utf8");
|
|
67
|
+
featureFiles.push(this.parseFeature(content, resolvedPath));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.warn(`⚠️ Warning: "${singlePath}" is not a directory or .feature file`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (featureFiles.length === 0) {
|
|
74
|
+
throw new Error(`No feature files found in: ${featuresPath}`);
|
|
62
75
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
76
|
+
return featureFiles;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Recursively find all .feature files in a directory
|
|
80
|
+
*/
|
|
81
|
+
findFeatureFilesRecursive(dirPath) {
|
|
82
|
+
const featureFiles = [];
|
|
83
|
+
const entries = fs_1.default.readdirSync(dirPath, { withFileTypes: true });
|
|
84
|
+
for (const entry of entries) {
|
|
85
|
+
const fullPath = path_1.default.join(dirPath, entry.name);
|
|
86
|
+
if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') {
|
|
87
|
+
// Recursively search subdirectories (exclude hidden and node_modules)
|
|
88
|
+
featureFiles.push(...this.findFeatureFilesRecursive(fullPath));
|
|
89
|
+
}
|
|
90
|
+
else if (entry.isFile() && entry.name.endsWith(".feature")) {
|
|
91
|
+
featureFiles.push(fullPath);
|
|
92
|
+
}
|
|
66
93
|
}
|
|
67
94
|
return featureFiles;
|
|
68
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.parser.js","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,4CAAoB;AACpB,gDAAwB;AACxB,2DAA6C;AAC7C,6DAA+C;AAG/C,MAAa,aAAa;IACxB,KAAK,CAAC,oBAAoB,CAAC,YAAoB;QAC7C,
|
|
1
|
+
{"version":3,"file":"feature.parser.js","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sample-steps.generator.d.ts","sourceRoot":"","sources":["../../../src/generators/samples/sample-steps.generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAgBzD,OAAO,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"sample-steps.generator.d.ts","sourceRoot":"","sources":["../../../src/generators/samples/sample-steps.generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAgBzD,OAAO,CAAC,uBAAuB;CAssChC"}
|
|
@@ -526,6 +526,68 @@ export function k6IMakeAPatchRequestToWithBody(endpoint: string, bodyData: any)
|
|
|
526
526
|
globalThis.lastResponse = response;
|
|
527
527
|
}
|
|
528
528
|
|
|
529
|
+
/**
|
|
530
|
+
* Makes a DELETE request to the specified endpoint.
|
|
531
|
+
* Supports {{VARIABLE_NAME}} for env vars in endpoint.
|
|
532
|
+
*/
|
|
533
|
+
export function k6IMakeADeleteRequestTo(endpoint: string) {
|
|
534
|
+
const resolvedEndpoint = replaceEnvVariables(endpoint);
|
|
535
|
+
const url = \`\${baseUrl}\${resolvedEndpoint}\`;
|
|
536
|
+
const response = http.del(url, null, { headers: defaultHeaders });
|
|
537
|
+
globalThis.lastResponse = response;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* Makes a DELETE request with custom headers.
|
|
542
|
+
* Supports {{VARIABLE_NAME}} for env vars in endpoint.
|
|
543
|
+
*/
|
|
544
|
+
export function k6IMakeADeleteRequestToWithHeaders(endpoint: string, headersTable: any) {
|
|
545
|
+
const resolvedEndpoint = replaceEnvVariables(endpoint);
|
|
546
|
+
const url = \`\${baseUrl}\${resolvedEndpoint}\`;
|
|
547
|
+
let requestHeaders = { ...defaultHeaders };
|
|
548
|
+
if (headersTable?.length > 0) {
|
|
549
|
+
Object.assign(requestHeaders, headersTable[0]);
|
|
550
|
+
}
|
|
551
|
+
const response = http.del(url, null, { headers: requestHeaders });
|
|
552
|
+
globalThis.lastResponse = response;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Makes a DELETE request using a payload.json file.
|
|
557
|
+
* Supports {{VARIABLE_NAME}} for env vars and {{alias:NAME}} for stored aliases.
|
|
558
|
+
*/
|
|
559
|
+
export function k6IMakeADeleteRequestToWithPayloadFile(endpoint: string, fileName: string) {
|
|
560
|
+
const fs = require('fs');
|
|
561
|
+
const path = require('path');
|
|
562
|
+
|
|
563
|
+
// Resolve payload file path
|
|
564
|
+
let filePath = fileName;
|
|
565
|
+
if (!path.isAbsolute(fileName)) {
|
|
566
|
+
if (fs.existsSync(path.join(process.cwd(), 'data', fileName))) {
|
|
567
|
+
filePath = path.join(process.cwd(), 'data', fileName);
|
|
568
|
+
} else if (fs.existsSync(path.join(process.cwd(), fileName))) {
|
|
569
|
+
filePath = path.join(process.cwd(), fileName);
|
|
570
|
+
} else {
|
|
571
|
+
filePath = path.join(process.cwd(), 'payload.json');
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
if (!fs.existsSync(filePath)) {
|
|
576
|
+
console.error(\`❌ Payload file not found: \${filePath}\`);
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
let payloadContent = fs.readFileSync(filePath, 'utf8');
|
|
581
|
+
payloadContent = replaceEnvVariables(payloadContent);
|
|
582
|
+
payloadContent = replaceAliasVariables(payloadContent);
|
|
583
|
+
|
|
584
|
+
const resolvedEndpoint = replaceEnvVariables(endpoint);
|
|
585
|
+
const url = \`\${baseUrl}\${resolvedEndpoint}\`;
|
|
586
|
+
const response = http.del(url, payloadContent, { headers: defaultHeaders });
|
|
587
|
+
globalThis.lastResponse = response;
|
|
588
|
+
console.log(\`🗑️ DELETE \${url} with payload from \${filePath}\`);
|
|
589
|
+
}
|
|
590
|
+
|
|
529
591
|
export function k6TheResponsePropertyShouldBe(propertyPath: string, expectedValue: string) {
|
|
530
592
|
const res = globalThis.lastResponse;
|
|
531
593
|
if (!res) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sample-steps.generator.js","sourceRoot":"","sources":["../../../src/generators/samples/sample-steps.generator.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAmD;AACnD,4CAAoB;AACpB,gDAAwB;AAExB,yEAAoE;AAEpE,MAAa,oBAAoB;IAC/B,QAAQ,CAAC,UAAkB,EAAE,MAAqB;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAEvD,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,aAAa,EAAE,CAAC,EAC9D,WAAW,CACZ,CAAC;QAEF,+CAA+C;QAC/C,MAAM,iBAAiB,GAAG,IAAI,iDAAsB,EAAE,CAAC;QACvD,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEO,uBAAuB,CAAC,IAAa;QAC3C,OAAO
|
|
1
|
+
{"version":3,"file":"sample-steps.generator.js","sourceRoot":"","sources":["../../../src/generators/samples/sample-steps.generator.ts"],"names":[],"mappings":";;;;;;AAAA,mDAAmD;AACnD,4CAAoB;AACpB,gDAAwB;AAExB,yEAAoE;AAEpE,MAAa,oBAAoB;IAC/B,QAAQ,CAAC,UAAkB,EAAE,MAAqB;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAEvD,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,eAAe,aAAa,EAAE,CAAC,EAC9D,WAAW,CACZ,CAAC;QAEF,+CAA+C;QAC/C,MAAM,iBAAiB,GAAG,IAAI,iDAAsB,EAAE,CAAC;QACvD,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEO,uBAAuB,CAAC,IAAa;QAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmsCV,CAAC;IACA,CAAC;CACF;AAvtCD,oDAutCC"}
|
package/dist/metadata.json
CHANGED
|
@@ -178,6 +178,35 @@
|
|
|
178
178
|
"fileName: string"
|
|
179
179
|
]
|
|
180
180
|
},
|
|
181
|
+
{
|
|
182
|
+
"step": "I k6 make a DELETE request to {string}",
|
|
183
|
+
"functionName": "k6IMakeADeleteRequestTo",
|
|
184
|
+
"description": "Makes a DELETE request to the specified endpoint (supports {{VARIABLE_NAME}})",
|
|
185
|
+
"category": "HTTP",
|
|
186
|
+
"parameters": [
|
|
187
|
+
"endpoint: string"
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"step": "I k6 make a DELETE request to {string} with headers:",
|
|
192
|
+
"functionName": "k6IMakeADeleteRequestToWithHeaders",
|
|
193
|
+
"description": "Makes a DELETE request with custom headers (supports {{VARIABLE_NAME}})",
|
|
194
|
+
"category": "HTTP",
|
|
195
|
+
"parameters": [
|
|
196
|
+
"endpoint: string",
|
|
197
|
+
"headersTable: any"
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"step": "I k6 make a DELETE request to {string} with payload from {string}",
|
|
202
|
+
"functionName": "k6IMakeADeleteRequestToWithPayloadFile",
|
|
203
|
+
"description": "Makes a DELETE request using a payload.json file (supports {{VARIABLE_NAME}} and {{alias:NAME}})",
|
|
204
|
+
"category": "HTTP",
|
|
205
|
+
"parameters": [
|
|
206
|
+
"endpoint: string",
|
|
207
|
+
"fileName: string"
|
|
208
|
+
]
|
|
209
|
+
},
|
|
181
210
|
{
|
|
182
211
|
"step": "the k6 response status should be {string}",
|
|
183
212
|
"functionName": "k6TheResponseStatusShouldBe",
|