From 8a43c0f5c23f376c134343f7723088ab3762eaa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Thu, 5 Mar 2026 15:58:25 +0800 Subject: [PATCH] feat: create MobileTestReporter base structure --- e2e/src/utils/MobileTestReporter.ts | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 e2e/src/utils/MobileTestReporter.ts diff --git a/e2e/src/utils/MobileTestReporter.ts b/e2e/src/utils/MobileTestReporter.ts new file mode 100644 index 0000000..29aa742 --- /dev/null +++ b/e2e/src/utils/MobileTestReporter.ts @@ -0,0 +1,48 @@ +import { FullConfig, FullResult, Suite, TestCase, TestResult } from '@playwright/test'; + +export interface TestOverview { + total: number; + passed: number; + failed: number; + skipped: number; + duration: number; +} + +export interface DeviceTestResult { + device: string; + passed: number; + failed: number; + duration: number; +} + +export class MobileTestReporter { + constructor(private config: FullConfig) {} + + generateOverview(results: FullResult): TestOverview { + const total = results.suites.reduce((sum, suite) => { + return sum + suite.suites.reduce((suiteSum, subSuite) => { + return suiteSum + subSuite.cases.length; + }, 0); + }, 0); + + const passed = results.suites.reduce((sum, suite) => { + return sum + suite.suites.reduce((suiteSum, subSuite) => { + return suiteSum + subSuite.cases.filter(c => c.results[0]?.status === 'passed').length; + }, 0); + }, 0); + + const failed = results.suites.reduce((sum, suite) => { + return sum + suite.suites.reduce((suiteSum, subSuite) => { + return suiteSum + subSuite.cases.filter(c => c.results[0]?.status === 'failed').length; + }, 0); + }, 0); + + return { + total, + passed, + failed, + skipped: total - passed - failed, + duration: results.duration, + }; + } +} \ No newline at end of file