@fasttest-ai/qa-agent 0.2.0 → 0.4.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/bin/install.js +3 -0
- package/bin/qa-agent.js +7 -2
- package/dist/actions.d.ts +3 -0
- package/dist/actions.js +38 -4
- package/dist/actions.js.map +1 -1
- package/dist/browser.d.ts +30 -0
- package/dist/browser.js +120 -6
- package/dist/browser.js.map +1 -1
- package/dist/cli.d.ts +3 -3
- package/dist/cli.js +5 -5
- package/dist/cli.js.map +1 -1
- package/dist/cloud.d.ts +96 -38
- package/dist/cloud.js +96 -35
- package/dist/cloud.js.map +1 -1
- package/dist/config.d.ts +5 -4
- package/dist/config.js +20 -7
- package/dist/config.js.map +1 -1
- package/dist/healer.d.ts +5 -1
- package/dist/healer.js +106 -29
- package/dist/healer.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +697 -88
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +11 -0
- package/dist/install.js +225 -0
- package/dist/install.js.map +1 -0
- package/dist/runner.d.ts +2 -0
- package/dist/runner.js +245 -19
- package/dist/runner.js.map +1 -1
- package/dist/variables.d.ts +30 -0
- package/dist/variables.js +104 -0
- package/dist/variables.js.map +1 -0
- package/package.json +6 -3
package/dist/runner.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import * as actions from "./actions.js";
|
|
13
13
|
import { healSelector } from "./healer.js";
|
|
14
|
+
import { resolveString, resolveStepVariables, resolveAssertionVariables, collectVariableNames } from "./variables.js";
|
|
14
15
|
/**
|
|
15
16
|
* Execute a full test suite run.
|
|
16
17
|
*/
|
|
@@ -23,15 +24,153 @@ export async function executeRun(browserMgr, cloud, options, consoleLogs) {
|
|
|
23
24
|
test_case_ids: options.testCaseIds,
|
|
24
25
|
});
|
|
25
26
|
const executionId = run.execution_id;
|
|
26
|
-
const baseUrl = options.appUrlOverride ?? run.base_url ?? "";
|
|
27
27
|
const testCases = run.test_cases;
|
|
28
|
+
// Resolve {{VAR}} placeholders in baseUrl
|
|
29
|
+
let baseUrl = options.appUrlOverride ?? run.base_url ?? "";
|
|
30
|
+
if (baseUrl) {
|
|
31
|
+
try {
|
|
32
|
+
baseUrl = resolveString(baseUrl);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
try {
|
|
36
|
+
await cloud.completeExecution(executionId);
|
|
37
|
+
}
|
|
38
|
+
catch { /* non-fatal */ }
|
|
39
|
+
return {
|
|
40
|
+
execution_id: executionId,
|
|
41
|
+
status: "failed",
|
|
42
|
+
total: testCases.length,
|
|
43
|
+
passed: 0,
|
|
44
|
+
failed: testCases.length,
|
|
45
|
+
skipped: 0,
|
|
46
|
+
duration_ms: 0,
|
|
47
|
+
results: testCases.map((tc) => ({
|
|
48
|
+
id: tc.id, name: tc.name, status: "failed",
|
|
49
|
+
duration_ms: 0, error: String(err), step_results: [],
|
|
50
|
+
})),
|
|
51
|
+
healed: [],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Pre-flight: check that all {{VAR}} placeholders can be resolved
|
|
56
|
+
const allVarNames = [];
|
|
57
|
+
for (const tc of testCases) {
|
|
58
|
+
for (const v of collectVariableNames(tc.steps, tc.assertions)) {
|
|
59
|
+
if (!allVarNames.includes(v))
|
|
60
|
+
allVarNames.push(v);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (allVarNames.length > 0) {
|
|
64
|
+
const resolved = [];
|
|
65
|
+
const missing = [];
|
|
66
|
+
for (const v of allVarNames) {
|
|
67
|
+
if (process.env[v] !== undefined) {
|
|
68
|
+
resolved.push(v);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
missing.push(v);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (resolved.length > 0) {
|
|
75
|
+
console.log(`Environment variables resolved: ${resolved.join(", ")}`);
|
|
76
|
+
}
|
|
77
|
+
if (missing.length > 0) {
|
|
78
|
+
const errMsg = `Missing environment variable(s): ${missing.join(", ")}. ` +
|
|
79
|
+
`Set these before running tests. In GitHub Actions, add them as repository secrets.`;
|
|
80
|
+
console.error(`ERROR: ${errMsg}`);
|
|
81
|
+
try {
|
|
82
|
+
await cloud.completeExecution(executionId);
|
|
83
|
+
}
|
|
84
|
+
catch { /* non-fatal */ }
|
|
85
|
+
return {
|
|
86
|
+
execution_id: executionId,
|
|
87
|
+
status: "failed",
|
|
88
|
+
total: testCases.length,
|
|
89
|
+
passed: 0,
|
|
90
|
+
failed: testCases.length,
|
|
91
|
+
skipped: 0,
|
|
92
|
+
duration_ms: 0,
|
|
93
|
+
results: testCases.map((tc) => ({
|
|
94
|
+
id: tc.id, name: tc.name, status: "failed",
|
|
95
|
+
duration_ms: 0, error: errMsg, step_results: [],
|
|
96
|
+
})),
|
|
97
|
+
healed: [],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
28
101
|
const results = [];
|
|
29
102
|
const allHealed = [];
|
|
30
103
|
const runStart = Date.now();
|
|
31
|
-
|
|
104
|
+
let cancelled = false;
|
|
105
|
+
let reportFailures = 0;
|
|
106
|
+
// 2. Execute each test case sequentially (with smart retry)
|
|
32
107
|
for (const tc of testCases) {
|
|
33
|
-
|
|
108
|
+
// Check for pause/cancel from dashboard
|
|
109
|
+
try {
|
|
110
|
+
const controlStatus = await cloud.checkControlStatus(executionId);
|
|
111
|
+
if (controlStatus === "cancelled") {
|
|
112
|
+
cancelled = true;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
if (controlStatus === "paused") {
|
|
116
|
+
let resumed = false;
|
|
117
|
+
const pauseStart = Date.now();
|
|
118
|
+
const MAX_PAUSE_MS = 30 * 60 * 1000; // 30 minutes
|
|
119
|
+
while (!resumed) {
|
|
120
|
+
if (Date.now() - pauseStart > MAX_PAUSE_MS) {
|
|
121
|
+
console.log("Pause exceeded 30-minute limit, auto-cancelling.");
|
|
122
|
+
cancelled = true;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
126
|
+
const s = await cloud.checkControlStatus(executionId);
|
|
127
|
+
if (s === "running") {
|
|
128
|
+
resumed = true;
|
|
129
|
+
}
|
|
130
|
+
if (s === "cancelled") {
|
|
131
|
+
cancelled = true;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (cancelled)
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Non-fatal — if we can't check, continue executing
|
|
141
|
+
}
|
|
142
|
+
// Smart retry loop
|
|
143
|
+
const maxRetries = tc.retry_count ?? 0;
|
|
144
|
+
let tcResult;
|
|
145
|
+
let attempt = 0;
|
|
146
|
+
while (true) {
|
|
147
|
+
// Notify War Room that this test case is starting
|
|
148
|
+
await cloud.notifyTestStarted(executionId, tc.id, tc.name);
|
|
149
|
+
const timeoutMs = (tc.timeout_seconds || 30) * 1000;
|
|
150
|
+
tcResult = await Promise.race([
|
|
151
|
+
executeTestCase(browserMgr, cloud, executionId, tc, baseUrl, consoleLogs, allHealed),
|
|
152
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Test case "${tc.name}" timed out after ${tc.timeout_seconds || 30}s`)), timeoutMs)),
|
|
153
|
+
]).catch((err) => ({
|
|
154
|
+
id: tc.id,
|
|
155
|
+
name: tc.name,
|
|
156
|
+
status: "failed",
|
|
157
|
+
duration_ms: timeoutMs,
|
|
158
|
+
error: String(err),
|
|
159
|
+
step_results: [],
|
|
160
|
+
}));
|
|
161
|
+
if (tcResult.status === "passed" || attempt >= maxRetries) {
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
// Failed but have retries left
|
|
165
|
+
attempt++;
|
|
166
|
+
console.log(`Retrying ${tc.name} (attempt ${attempt}/${maxRetries})...`);
|
|
167
|
+
}
|
|
168
|
+
tcResult.retry_attempts = attempt;
|
|
34
169
|
results.push(tcResult);
|
|
170
|
+
// Capture network calls for this test case and reset for next one
|
|
171
|
+
const rawNetwork = browserMgr.getNetworkSummary();
|
|
172
|
+
browserMgr.clearNetworkEntries();
|
|
173
|
+
const networkSummary = filterNetworkEntries(rawNetwork);
|
|
35
174
|
// 3. Report result to Cloud
|
|
36
175
|
try {
|
|
37
176
|
await cloud.reportResult(executionId, {
|
|
@@ -40,36 +179,56 @@ export async function executeRun(browserMgr, cloud, options, consoleLogs) {
|
|
|
40
179
|
duration_ms: tcResult.duration_ms,
|
|
41
180
|
error_message: tcResult.error,
|
|
42
181
|
console_logs: consoleLogs.slice(-50),
|
|
182
|
+
retry_attempt: attempt,
|
|
43
183
|
step_results: tcResult.step_results.map((sr) => ({
|
|
44
184
|
step_index: sr.step_index,
|
|
45
185
|
action: sr.action,
|
|
46
186
|
success: sr.success,
|
|
47
187
|
error: sr.error,
|
|
48
188
|
duration_ms: sr.duration_ms,
|
|
189
|
+
screenshot_url: sr.screenshot_url,
|
|
49
190
|
healed: sr.healed,
|
|
50
191
|
heal_details: sr.heal_details,
|
|
51
192
|
})),
|
|
193
|
+
network_summary: networkSummary.length > 0 ? networkSummary : undefined,
|
|
52
194
|
});
|
|
53
195
|
}
|
|
54
196
|
catch (err) {
|
|
55
197
|
// Non-fatal — log and continue
|
|
198
|
+
reportFailures++;
|
|
56
199
|
console.error(`Failed to report result for ${tc.name}: ${err}`);
|
|
57
200
|
}
|
|
58
201
|
}
|
|
202
|
+
// Mark any unexecuted test cases as skipped (e.g. due to cancellation)
|
|
203
|
+
const completedIds = new Set(results.map((r) => r.id));
|
|
204
|
+
for (const tc of testCases) {
|
|
205
|
+
if (!completedIds.has(tc.id)) {
|
|
206
|
+
results.push({
|
|
207
|
+
id: tc.id,
|
|
208
|
+
name: tc.name,
|
|
209
|
+
status: "skipped",
|
|
210
|
+
duration_ms: 0,
|
|
211
|
+
step_results: [],
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
59
215
|
// 4. Complete execution
|
|
60
216
|
const passed = results.filter((r) => r.status === "passed").length;
|
|
61
217
|
const failed = results.filter((r) => r.status === "failed").length;
|
|
62
218
|
const skipped = results.filter((r) => r.status === "skipped").length;
|
|
63
219
|
const durationMs = Date.now() - runStart;
|
|
64
220
|
try {
|
|
65
|
-
await cloud.completeExecution(executionId);
|
|
221
|
+
await cloud.completeExecution(executionId, cancelled ? "cancelled" : undefined);
|
|
66
222
|
}
|
|
67
223
|
catch (err) {
|
|
68
224
|
console.error(`Failed to complete execution: ${err}`);
|
|
69
225
|
}
|
|
226
|
+
if (reportFailures > 0) {
|
|
227
|
+
console.warn(`Warning: ${reportFailures} result report(s) failed to send to cloud.`);
|
|
228
|
+
}
|
|
70
229
|
return {
|
|
71
230
|
execution_id: executionId,
|
|
72
|
-
status: failed === 0 ? "passed" : "failed",
|
|
231
|
+
status: cancelled ? "cancelled" : (failed === 0 ? "passed" : "failed"),
|
|
73
232
|
total: testCases.length,
|
|
74
233
|
passed,
|
|
75
234
|
failed,
|
|
@@ -82,22 +241,42 @@ export async function executeRun(browserMgr, cloud, options, consoleLogs) {
|
|
|
82
241
|
/**
|
|
83
242
|
* Execute a single test case.
|
|
84
243
|
*/
|
|
85
|
-
async function executeTestCase(browserMgr, cloud, tc, baseUrl, consoleLogs, allHealed) {
|
|
244
|
+
async function executeTestCase(browserMgr, cloud, executionId, tc, baseUrl, consoleLogs, allHealed) {
|
|
86
245
|
const stepResults = [];
|
|
87
246
|
const start = Date.now();
|
|
88
247
|
try {
|
|
89
|
-
|
|
248
|
+
// Fresh context per test case to prevent session/cookie leakage
|
|
249
|
+
const page = await browserMgr.newContext();
|
|
90
250
|
// Execute steps
|
|
91
251
|
for (let i = 0; i < tc.steps.length; i++) {
|
|
92
252
|
const step = tc.steps[i];
|
|
93
253
|
const stepStart = Date.now();
|
|
94
|
-
|
|
254
|
+
// Resolve {{VAR}} placeholders from environment
|
|
255
|
+
let resolvedStep;
|
|
256
|
+
try {
|
|
257
|
+
resolvedStep = resolveStepVariables(step);
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
stepResults.push({
|
|
261
|
+
step_index: i, action: step.action, success: false,
|
|
262
|
+
error: String(err), duration_ms: Date.now() - stepStart,
|
|
263
|
+
});
|
|
264
|
+
return {
|
|
265
|
+
id: tc.id, name: tc.name, status: "failed",
|
|
266
|
+
duration_ms: Date.now() - start,
|
|
267
|
+
error: `Step ${i + 1} (${step.action}) failed: ${String(err)}`,
|
|
268
|
+
step_results: stepResults,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
let result = await executeStep(page, resolvedStep, baseUrl);
|
|
95
272
|
// Self-healing: if step failed and has a selector, try healing
|
|
96
|
-
if (!result.success &&
|
|
97
|
-
|
|
273
|
+
if (!result.success && resolvedStep.selector && isSelectorFailure(result.error)) {
|
|
274
|
+
// Notify War Room that healing is starting
|
|
275
|
+
await cloud.notifyHealingStarted(executionId, tc.id, resolvedStep.selector);
|
|
276
|
+
const healResult = await healSelector(page, cloud, resolvedStep.selector, classifyStepError(result.error), result.error ?? "unknown", page.url(), { action: resolvedStep.action, description: resolvedStep.description });
|
|
98
277
|
if (healResult.healed && healResult.newSelector) {
|
|
99
278
|
// Retry with the healed selector
|
|
100
|
-
const healedStep = { ...
|
|
279
|
+
const healedStep = { ...resolvedStep, selector: healResult.newSelector };
|
|
101
280
|
result = await executeStep(page, healedStep, baseUrl);
|
|
102
281
|
if (result.success) {
|
|
103
282
|
allHealed.push({
|
|
@@ -108,11 +287,14 @@ async function executeTestCase(browserMgr, cloud, tc, baseUrl, consoleLogs, allH
|
|
|
108
287
|
strategy: healResult.strategy ?? "unknown",
|
|
109
288
|
confidence: healResult.confidence ?? 0,
|
|
110
289
|
});
|
|
290
|
+
// Capture screenshot after healed step
|
|
291
|
+
const capture = await captureStepScreenshot(page);
|
|
111
292
|
stepResults.push({
|
|
112
293
|
step_index: i,
|
|
113
294
|
action: step.action,
|
|
114
295
|
success: true,
|
|
115
296
|
duration_ms: Date.now() - stepStart,
|
|
297
|
+
screenshot_url: capture?.dataUrl,
|
|
116
298
|
healed: true,
|
|
117
299
|
heal_details: {
|
|
118
300
|
original_selector: step.selector,
|
|
@@ -125,12 +307,15 @@ async function executeTestCase(browserMgr, cloud, tc, baseUrl, consoleLogs, allH
|
|
|
125
307
|
}
|
|
126
308
|
}
|
|
127
309
|
}
|
|
310
|
+
// Capture screenshot after each step (especially important on failure for debugging)
|
|
311
|
+
const capture = await captureStepScreenshot(page);
|
|
128
312
|
stepResults.push({
|
|
129
313
|
step_index: i,
|
|
130
314
|
action: step.action,
|
|
131
315
|
success: result.success,
|
|
132
316
|
error: result.error,
|
|
133
317
|
duration_ms: Date.now() - stepStart,
|
|
318
|
+
screenshot_url: capture?.dataUrl,
|
|
134
319
|
});
|
|
135
320
|
if (!result.success) {
|
|
136
321
|
return {
|
|
@@ -147,7 +332,24 @@ async function executeTestCase(browserMgr, cloud, tc, baseUrl, consoleLogs, allH
|
|
|
147
332
|
for (let i = 0; i < tc.assertions.length; i++) {
|
|
148
333
|
const assertion = tc.assertions[i];
|
|
149
334
|
const assertStart = Date.now();
|
|
150
|
-
|
|
335
|
+
// Resolve {{VAR}} placeholders in assertion values
|
|
336
|
+
let resolvedAssertion;
|
|
337
|
+
try {
|
|
338
|
+
resolvedAssertion = resolveAssertionVariables(assertion);
|
|
339
|
+
}
|
|
340
|
+
catch (err) {
|
|
341
|
+
stepResults.push({
|
|
342
|
+
step_index: tc.steps.length + i, action: `assert:${assertion.type}`,
|
|
343
|
+
success: false, error: String(err), duration_ms: Date.now() - assertStart,
|
|
344
|
+
});
|
|
345
|
+
return {
|
|
346
|
+
id: tc.id, name: tc.name, status: "failed",
|
|
347
|
+
duration_ms: Date.now() - start,
|
|
348
|
+
error: `Assertion ${i + 1} (${assertion.type}) failed: ${String(err)}`,
|
|
349
|
+
step_results: stepResults,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
const result = await executeAssertion(page, resolvedAssertion);
|
|
151
353
|
stepResults.push({
|
|
152
354
|
step_index: tc.steps.length + i,
|
|
153
355
|
action: `assert:${assertion.type}`,
|
|
@@ -185,6 +387,19 @@ async function executeTestCase(browserMgr, cloud, tc, baseUrl, consoleLogs, allH
|
|
|
185
387
|
};
|
|
186
388
|
}
|
|
187
389
|
}
|
|
390
|
+
/**
|
|
391
|
+
* Capture a screenshot after a test step.
|
|
392
|
+
* Returns { dataUrl } or undefined if capture fails.
|
|
393
|
+
*/
|
|
394
|
+
async function captureStepScreenshot(page) {
|
|
395
|
+
try {
|
|
396
|
+
const b64 = await actions.screenshot(page, false);
|
|
397
|
+
return { dataUrl: `data:image/jpeg;base64,${b64}` };
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
return undefined;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
188
403
|
/**
|
|
189
404
|
* Execute a single test step via Playwright.
|
|
190
405
|
*/
|
|
@@ -206,20 +421,20 @@ async function executeStep(page, step, baseUrl) {
|
|
|
206
421
|
return await actions.fill(page, step.selector ?? "", step.value ?? "");
|
|
207
422
|
case "fill_form": {
|
|
208
423
|
const fields = step.fields ?? {};
|
|
209
|
-
|
|
210
|
-
const r = await actions.fill(page, sel, val);
|
|
211
|
-
if (!r.success)
|
|
212
|
-
return r;
|
|
213
|
-
}
|
|
214
|
-
return { success: true };
|
|
424
|
+
return await actions.fillForm(page, fields);
|
|
215
425
|
}
|
|
426
|
+
case "drag":
|
|
427
|
+
return await actions.drag(page, step.selector ?? "", step.target ?? "");
|
|
428
|
+
case "resize":
|
|
429
|
+
return await actions.resize(page, step.width ?? 1280, step.height ?? 720);
|
|
216
430
|
case "hover":
|
|
217
431
|
return await actions.hover(page, step.selector ?? "");
|
|
218
432
|
case "select":
|
|
219
433
|
return await actions.selectOption(page, step.selector ?? "", step.value ?? "");
|
|
220
434
|
case "wait_for": {
|
|
221
435
|
if (step.condition === "navigation") {
|
|
222
|
-
await page.waitForLoadState("
|
|
436
|
+
await page.waitForLoadState("domcontentloaded", { timeout: (step.timeout ?? 10) * 1000 });
|
|
437
|
+
await page.waitForLoadState("networkidle", { timeout: 5000 }).catch(() => { });
|
|
223
438
|
return { success: true };
|
|
224
439
|
}
|
|
225
440
|
return await actions.waitFor(page, step.selector ?? "", (step.timeout ?? 10) * 1000);
|
|
@@ -305,4 +520,15 @@ function classifyStepError(error) {
|
|
|
305
520
|
return "NAVIGATION_FAILED";
|
|
306
521
|
return "UNKNOWN";
|
|
307
522
|
}
|
|
523
|
+
/** Keep only API/document calls — skip static assets like images, fonts, CSS, JS bundles. */
|
|
524
|
+
function filterNetworkEntries(entries) {
|
|
525
|
+
return entries.filter((e) => {
|
|
526
|
+
const mime = e.mimeType.toLowerCase();
|
|
527
|
+
if (mime.includes("json") || mime.includes("text/html") || mime.includes("text/plain"))
|
|
528
|
+
return true;
|
|
529
|
+
if (e.status >= 400)
|
|
530
|
+
return true;
|
|
531
|
+
return false;
|
|
532
|
+
});
|
|
533
|
+
}
|
|
308
534
|
//# sourceMappingURL=runner.js.map
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variable substitution for test steps and assertions.
|
|
3
|
+
*
|
|
4
|
+
* Test steps can contain {{VAR_NAME}} placeholders that are resolved from
|
|
5
|
+
* process.env at execution time. This allows suites to be saved with
|
|
6
|
+
* placeholders for credentials, then executed in CI/CD where the actual
|
|
7
|
+
* values are set as GitHub Secrets or environment variables.
|
|
8
|
+
*/
|
|
9
|
+
import type { TestStep, TestAssertion } from "./cloud.js";
|
|
10
|
+
/**
|
|
11
|
+
* Replace all {{VAR}} placeholders in a string with values from the environment.
|
|
12
|
+
* Throws if any referenced variable is missing, listing ALL missing names.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveString(input: string, env?: Record<string, string | undefined>): string;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve {{VAR}} placeholders in a test step's value fields.
|
|
17
|
+
* Returns a new step object — does not mutate the original.
|
|
18
|
+
* Does NOT resolve selectors or descriptions.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveStepVariables(step: TestStep, env?: Record<string, string | undefined>): TestStep;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve {{VAR}} placeholders in an assertion's value fields.
|
|
23
|
+
* Returns a new assertion object — does not mutate the original.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveAssertionVariables(assertion: TestAssertion, env?: Record<string, string | undefined>): TestAssertion;
|
|
26
|
+
/**
|
|
27
|
+
* Collect all unique {{VAR}} names referenced across steps and assertions.
|
|
28
|
+
* Used for pre-flight logging and CI YAML generation.
|
|
29
|
+
*/
|
|
30
|
+
export declare function collectVariableNames(steps: TestStep[], assertions: TestAssertion[]): string[];
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variable substitution for test steps and assertions.
|
|
3
|
+
*
|
|
4
|
+
* Test steps can contain {{VAR_NAME}} placeholders that are resolved from
|
|
5
|
+
* process.env at execution time. This allows suites to be saved with
|
|
6
|
+
* placeholders for credentials, then executed in CI/CD where the actual
|
|
7
|
+
* values are set as GitHub Secrets or environment variables.
|
|
8
|
+
*/
|
|
9
|
+
/** Matches {{UPPER_SNAKE_CASE}} variable placeholders. */
|
|
10
|
+
const VAR_PATTERN = /\{\{([A-Z][A-Z0-9_]*)\}\}/g;
|
|
11
|
+
/**
|
|
12
|
+
* Replace all {{VAR}} placeholders in a string with values from the environment.
|
|
13
|
+
* Throws if any referenced variable is missing, listing ALL missing names.
|
|
14
|
+
*/
|
|
15
|
+
export function resolveString(input, env = process.env) {
|
|
16
|
+
const missing = [];
|
|
17
|
+
const resolved = input.replace(VAR_PATTERN, (match, varName) => {
|
|
18
|
+
const value = env[varName];
|
|
19
|
+
if (value === undefined) {
|
|
20
|
+
missing.push(varName);
|
|
21
|
+
return match;
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
});
|
|
25
|
+
if (missing.length > 0) {
|
|
26
|
+
throw new Error(`Missing environment variable(s): ${missing.join(", ")}. ` +
|
|
27
|
+
`Set these before running tests. In GitHub Actions, add them as repository secrets.`);
|
|
28
|
+
}
|
|
29
|
+
return resolved;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve {{VAR}} placeholders in a test step's value fields.
|
|
33
|
+
* Returns a new step object — does not mutate the original.
|
|
34
|
+
* Does NOT resolve selectors or descriptions.
|
|
35
|
+
*/
|
|
36
|
+
export function resolveStepVariables(step, env) {
|
|
37
|
+
const resolved = { ...step };
|
|
38
|
+
if (resolved.value !== undefined)
|
|
39
|
+
resolved.value = resolveString(resolved.value, env);
|
|
40
|
+
if (resolved.url !== undefined)
|
|
41
|
+
resolved.url = resolveString(resolved.url, env);
|
|
42
|
+
if (resolved.expression !== undefined)
|
|
43
|
+
resolved.expression = resolveString(resolved.expression, env);
|
|
44
|
+
if (resolved.key !== undefined)
|
|
45
|
+
resolved.key = resolveString(resolved.key, env);
|
|
46
|
+
if (resolved.fields !== undefined) {
|
|
47
|
+
const resolvedFields = {};
|
|
48
|
+
for (const [selector, val] of Object.entries(resolved.fields)) {
|
|
49
|
+
resolvedFields[selector] = resolveString(val, env);
|
|
50
|
+
}
|
|
51
|
+
resolved.fields = resolvedFields;
|
|
52
|
+
}
|
|
53
|
+
return resolved;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve {{VAR}} placeholders in an assertion's value fields.
|
|
57
|
+
* Returns a new assertion object — does not mutate the original.
|
|
58
|
+
*/
|
|
59
|
+
export function resolveAssertionVariables(assertion, env) {
|
|
60
|
+
const resolved = { ...assertion };
|
|
61
|
+
if (resolved.text !== undefined)
|
|
62
|
+
resolved.text = resolveString(resolved.text, env);
|
|
63
|
+
if (resolved.url !== undefined)
|
|
64
|
+
resolved.url = resolveString(resolved.url, env);
|
|
65
|
+
if (resolved.value !== undefined)
|
|
66
|
+
resolved.value = resolveString(resolved.value, env);
|
|
67
|
+
if (resolved.expected_value !== undefined)
|
|
68
|
+
resolved.expected_value = resolveString(resolved.expected_value, env);
|
|
69
|
+
return resolved;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Collect all unique {{VAR}} names referenced across steps and assertions.
|
|
73
|
+
* Used for pre-flight logging and CI YAML generation.
|
|
74
|
+
*/
|
|
75
|
+
export function collectVariableNames(steps, assertions) {
|
|
76
|
+
const vars = new Set();
|
|
77
|
+
function scan(input) {
|
|
78
|
+
if (!input)
|
|
79
|
+
return;
|
|
80
|
+
const re = /\{\{([A-Z][A-Z0-9_]*)\}\}/g;
|
|
81
|
+
let match;
|
|
82
|
+
while ((match = re.exec(input)) !== null) {
|
|
83
|
+
vars.add(match[1]);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
for (const step of steps) {
|
|
87
|
+
scan(step.value);
|
|
88
|
+
scan(step.url);
|
|
89
|
+
scan(step.expression);
|
|
90
|
+
scan(step.key);
|
|
91
|
+
if (step.fields) {
|
|
92
|
+
for (const val of Object.values(step.fields))
|
|
93
|
+
scan(val);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
for (const assertion of assertions) {
|
|
97
|
+
scan(assertion.text);
|
|
98
|
+
scan(assertion.url);
|
|
99
|
+
scan(assertion.value);
|
|
100
|
+
scan(assertion.expected_value);
|
|
101
|
+
}
|
|
102
|
+
return Array.from(vars).sort();
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../src/variables.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fasttest-ai/qa-agent",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "FastTest Agent — AI testing engineer MCP server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"qa-agent": "bin/qa-agent.js",
|
|
8
|
-
"qa-agent-ci": "bin/qa-agent-ci.js"
|
|
8
|
+
"qa-agent-ci": "bin/qa-agent-ci.js",
|
|
9
|
+
"fasttest": "bin/qa-agent.js",
|
|
10
|
+
"fasttest-ci": "bin/qa-agent-ci.js",
|
|
11
|
+
"fasttest-install": "bin/install.js"
|
|
9
12
|
},
|
|
10
13
|
"main": "./dist/index.js",
|
|
11
14
|
"scripts": {
|