def _extract_suite_metrics()

in scripts/metric_reporter/reporter/suite_reporter.py [0:0]


    def _extract_suite_metrics(suites) -> SuiteMetrics:
        metrics = SuiteMetrics()
        match suites:
            case JestJUnitXmlTestSuites() | NextestJUnitXmlTestSuites():
                metrics.time = suites.time
                metrics.tests = suites.tests
                metrics.failure = suites.failures + suites.errors
                metrics.skipped = sum(suite.skipped for suite in suites.test_suites)
            case MochaJUnitXmlTestSuites():
                metrics.time = suites.time
                # Mocha test reporting has been known to inaccurately total the number of
                # tests at the top level, so we count the number of test cases
                metrics.tests = (
                    sum(len(suite.test_cases) for suite in suites.test_suites if suite.test_cases)
                    if suites.test_suites
                    else 0
                )
                metrics.failure = suites.failures
                metrics.skipped = suites.skipped or 0
            case PlaywrightJUnitXmlTestSuites():
                metrics.time = suites.time
                metrics.tests = suites.tests
                metrics.failure = suites.failures + suites.errors
                metrics.skipped = suites.skipped
                metrics.fixme = sum(
                    1
                    for suite in suites.test_suites
                    for case in suite.test_cases
                    if case.properties and any(p.name == "fixme" for p in case.properties.property)
                )
                # An assumption is made that the presence of a nested system-out tag in
                # a test case that contains a link to a trace.zip attachment file as
                # content is the result of a retry.
                metrics.retry = sum(
                    1
                    for suite in suites.test_suites
                    for case in suite.test_cases
                    if case.system_out and "trace.zip" in case.system_out
                )
            case PytestJUnitXmlTestSuites():
                metrics.time = sum(suite.time for suite in suites.test_suites)
                metrics.tests = sum(suite.tests for suite in suites.test_suites)
                metrics.failure = sum(
                    suite.failures + suite.errors for suite in suites.test_suites
                )
                metrics.skipped = sum(suite.skipped for suite in suites.test_suites)
            case TapJUnitXmlTestSuites():
                metrics.tests = sum(suite.tests for suite in suites.test_suites)
                # With Tap it's possible for errors to be omitted
                metrics.failure = sum(
                    suite.failures + (suite.errors or 0) for suite in suites.test_suites
                )
        return metrics