-
+
- # Generated Test Files:
+
+
+
+
+
+
+
Generated Test Files
+
{testFiles.length}
+
+
+
-
{testFiles.length}
-
-
+
- # Generated Tests Cases:
+
+
+
+
+
+
+
Generated Test Cases
+
{totalTests}
+
+
+
-
{totalTests}
-
-
-
- # HTTP Calls:
+
+
+
+
+
+
+
+
+
Output HTTP Calls
+
{outputHttpCalls}
+
+
+
+
+
+
+
+
+
+
+
+
+
Evaluated HTTP Calls
+
{evaluatedHttpCalls}
+
+
+
- {totalHttpCalls}
+ {timeBreakdown && (
+
+
+
+
+ Execution Time
+
+
+
+
+
{timeBreakdown.days}
+
Days
+
+
+
{timeBreakdown.hours}
+
Hours
+
+
+
{timeBreakdown.minutes}
+
Minutes
+
+
+
{timeBreakdown.seconds}
+
Seconds
+
+
+
+ )}
-
-
Test Files
-
- {
- testFiles.length > 0 ? (
- testFiles.map((file, index) => (
-
-
-
+
+
+
+ Test Files
+
+
+ {
+ testFiles.length > 0 ? (
+ testFiles.map((file, index) => (
+
- {file.fileName} (# {file.numberOfTestCases})
+
+
+
+ {file.fileName}
+
+
+ {file.numberOfTestCases}
+
+
-
- ))
- ) : (
-
No test files generated.
- )
- }
+ ))
+ ) : (
+
No test files generated.
+ )
+ }
+
-)
\ No newline at end of file
+ );
+};
diff --git a/web-report/src/pages/Overview.tsx b/web-report/src/pages/Overview.tsx
index e05119c..d447227 100644
--- a/web-report/src/pages/Overview.tsx
+++ b/web-report/src/pages/Overview.tsx
@@ -12,9 +12,10 @@ interface IOverviewType {
numberOfTestCases: number
}>,
faults: Faults
+ executionTimeInSeconds: number;
}
-export const Overview: React.FC
= ({rest, testCases, testFiles, faults}) => {
+export const Overview: React.FC = ({rest, testCases, testFiles, faults, executionTimeInSeconds}) => {
return (
{/* Left Panel */}
@@ -22,10 +23,14 @@ export const Overview: React.FC
= ({rest, testCases, testFiles, f
{/* Right Panel */}
{/* Generated Tests */}
-
+
{/* Faults */}
)
-}
\ No newline at end of file
+}
diff --git a/web-report/src/types/GeneratedTypes.tsx b/web-report/src/types/GeneratedTypes.tsx
index 41d430f..a6d2a0a 100644
--- a/web-report/src/types/GeneratedTypes.tsx
+++ b/web-report/src/types/GeneratedTypes.tsx
@@ -56,6 +56,10 @@ export interface WebFuzzingCommonsReport {
* Information on each generated test case.
*/
testCases: TestCase[];
+ /**
+ * For how long, in seconds, the tool was running in total.
+ */
+ executionTimeInSeconds: number;
/**
* Extra, optional coverage information, collected by different tools.
*/
@@ -101,9 +105,13 @@ export interface FaultCategoryId {
}
export interface RESTReport {
/**
- * Total number of HTTP calls made in all the test cases. A test case could contain several HTTP calls, e.g., a POST followed by a GET and then a DELETE.
+ * Total number of HTTP calls made in all the generated test cases given as output. A test case could contain several HTTP calls, e.g., a POST followed by a GET and then a DELETE.
+ */
+ outputHttpCalls: number;
+ /**
+ * Total number of all HTTP calls made during the whole fuzzing session. If the fuzzing was left running for hours, millions of HTTP could have been made. The output generated tests will only contain a tiny subset of these evaluated calls.
*/
- totalHttpCalls: number;
+ evaluatedHttpCalls: number;
/**
* Unique ids of all the endpoints in the tested API.
*/
diff --git a/web-report/src/types/GeneratedTypesZod.ts b/web-report/src/types/GeneratedTypesZod.ts
index 941f69a..279beff 100644
--- a/web-report/src/types/GeneratedTypesZod.ts
+++ b/web-report/src/types/GeneratedTypesZod.ts
@@ -44,7 +44,8 @@ export const coverageCriterionSchema = z.record(z.unknown()).and(
export const rESTReportSchema = z.record(z.unknown()).and(
z.object({
- totalHttpCalls: z.number(),
+ outputHttpCalls: z.number(),
+ evaluatedHttpCalls: z.number(),
endpointIds: z.array(operationIdSchema),
coveredHttpStatus: z.array(coveredEndpointSchema),
}),
@@ -89,6 +90,7 @@ export const webFuzzingCommonsReportSchema = z.record(z.unknown()).and(
totalTests: z.number(),
testFilePaths: z.array(testFilePathSchema),
testCases: z.array(testCaseSchema),
+ executionTimeInSeconds: z.number(),
extra: z.array(coverageSchema).optional().nullable(),
}),
);