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