Enhance error handling for script execution by introducing isScriptError flag in test results (#7029)

* fix: Enhance error handling for script execution by introducing isScriptError flag in test results
This commit is contained in:
Sanjai Kumar
2026-02-04 12:01:42 +05:30
committed by GitHub
parent cf3ce0f450
commit 1325722651
3 changed files with 49 additions and 14 deletions

View File

@@ -224,18 +224,12 @@ const runSingleRequest = async function (
preRequestTestResults = result?.results || [];
} catch (error) {
// Pre-request errors are treated as request errors (we return early with status: 'error'), not as failures. Unlike post-response and test script errors, we do not add a synthetic fail and continue.
console.error('Pre-request script execution error:', error);
console.log(chalk.red(stripExtension(relativeItemPathname)) + chalk.dim(` (${error.message})`));
// Extract partial results from the error (tests that passed before the error)
const partialResults = error?.partialResults?.results || [];
preRequestTestResults = [
...partialResults,
{
status: 'fail',
description: 'Pre-Request Script Error',
error: error.message || 'An error occurred while executing the pre-request script.'
}
];
preRequestTestResults = error?.partialResults?.results || [];
// Preserve nextRequestName if it was set before the error
if (error?.partialResults?.nextRequestName !== undefined) {
@@ -248,6 +242,35 @@ const runSingleRequest = async function (
}
logResults(preRequestTestResults, 'Pre-Request Tests');
// Pre-request script error: execution didn't complete (request never sent). Return early so we don't run the HTTP request, post-response script, assertions, or tests.
return {
test: {
filename: relativeItemPathname
},
request: {
method: request.method,
url: request.url,
headers: request.headers,
data: request.data
},
response: {
status: 'error',
statusText: null,
headers: null,
data: null,
url: null,
responseTime: 0
},
error: error?.message || 'An error occurred while executing the pre-request script.',
status: 'error',
assertionResults: [],
testResults: [],
preRequestTestResults,
postResponseTestResults: [],
nextRequestName: nextRequestName,
shouldStopRunnerExecution
};
}
}
@@ -734,7 +757,8 @@ const runSingleRequest = async function (
{
status: 'fail',
description: 'Post-Response Script Error',
error: error.message || 'An error occurred while executing the post-response script.'
error: error.message || 'An error occurred while executing the post-response script.',
isScriptError: true
}
];
@@ -803,7 +827,8 @@ const runSingleRequest = async function (
{
status: 'fail',
description: 'Test Script Error',
error: error.message || 'An error occurred while executing the test script.'
error: error.message || 'An error occurred while executing the test script.',
isScriptError: true
}
];

View File

@@ -23,10 +23,10 @@ export const getRunnerSummary = (results: T_RunnerRequestExecutionResult[]): T_R
for (const result of results || []) {
const { status, testResults, assertionResults, preRequestTestResults, postResponseTestResults } = result;
totalRequests += 1;
totalTests += Number(testResults?.length) || 0;
totalTests += Number(testResults?.filter((r) => !r.isScriptError).length) || 0;
totalAssertions += Number(assertionResults?.length) || 0;
totalPreRequestTests += Number(preRequestTestResults?.length) || 0;
totalPostResponseTests += Number(postResponseTestResults?.length) || 0;
totalPreRequestTests += Number(preRequestTestResults?.filter((r) => !r.isScriptError).length) || 0;
totalPostResponseTests += Number(postResponseTestResults?.filter((r) => !r.isScriptError).length) || 0;
if (status === 'skipped') {
skippedRequests += 1;
@@ -35,6 +35,10 @@ export const getRunnerSummary = (results: T_RunnerRequestExecutionResult[]): T_R
let anyFailed = false;
for (const testResult of testResults || []) {
if (testResult.isScriptError) {
anyFailed = true;
continue;
}
if (testResult.status === 'pass') {
passedTests += 1;
} else {
@@ -59,6 +63,10 @@ export const getRunnerSummary = (results: T_RunnerRequestExecutionResult[]): T_R
}
}
for (const postResponseTestResult of postResponseTestResults || []) {
if (postResponseTestResult.isScriptError) {
anyFailed = true;
continue;
}
if (postResponseTestResult.status === 'pass') {
passedPostResponseTests += 1;
} else {

View File

@@ -23,6 +23,7 @@ type T_TestPassResult = {
status: string;
description: string;
uid?: string;
isScriptError?: boolean;
};
type T_TestFailResult = {
@@ -30,6 +31,7 @@ type T_TestFailResult = {
description: string;
error: string;
uid?: string;
isScriptError?: boolean;
};
type T_TestResult = T_TestPassResult | T_TestFailResult;