diff --git a/src/e3/testsuite/report/xunit.py b/src/e3/testsuite/report/xunit.py index e0e1507..93d8fc7 100644 --- a/src/e3/testsuite/report/xunit.py +++ b/src/e3/testsuite/report/xunit.py @@ -177,10 +177,13 @@ def run(self, filename: str) -> None: assert testcase.tag == "testcase" testcase_name = testcase.attrib["name"] + classname = testcase.attrib.get("classname") time_str = testcase.attrib.get("time") result = TestResult( - self.get_test_name(testsuite_name, testcase_name) + self.get_test_name( + testsuite_name, testcase_name, classname + ) ) result.time = float(time_str) if time_str else None status = TestStatus.PASS @@ -273,15 +276,26 @@ def get_unique_test_name(self, test_name: str) -> str: result = f"{test_name}.{next(counter)}" return result - def get_test_name(self, testsuite_name: str, testcase_name: str) -> str: + def get_test_name( + self, + testsuite_name: str, + testcase_name: str, + classname: Optional[str] = None, + ) -> str: """Combine xUnit testsuite/testcase names into a unique test name. :param testsuite_name: Name associated with a xUnit element. :param testcase_name: Name associated with a xUnit element. + :param classname: If applicable, name of the class that owns this + testcase. """ return self.get_unique_test_name( - self.slugify(testsuite_name) + "." + self.slugify(testcase_name) + ".".join( + self.slugify(name) + for name in [testsuite_name, classname, testcase_name] + if name + ) ) diff --git a/tests/tests/test_xunit.py b/tests/tests/test_xunit.py index 681ad19..99628c4 100644 --- a/tests/tests/test_xunit.py +++ b/tests/tests/test_xunit.py @@ -199,6 +199,10 @@ def test_import(tmp_path): Some failure logging + + + + @@ -247,6 +251,7 @@ def test_import(tmp_path): index = ReportIndex.read(results_dir) assert sorted(index.entries) == [ + "Normal.MyClass.test_name", "Normal.Test2", "Normal.Test2-e", "Normal.Test2-e.1", @@ -295,6 +300,8 @@ def check_log(test_name, log): check("Normal.test-failure-message", Status.FAIL, "Some failure message") check_log("Normal.test-failure-message", "Some failure logging") + check("Normal.MyClass.test_name", Status.PASS) + check("XFails.test-ok", Status.XPASS) check("XFails.test-failure", Status.XFAIL)