From ca782ca4f312c253ca23e5bb853fd297472db062 Mon Sep 17 00:00:00 2001 From: Kai Kasprowsky Date: Mon, 27 Mar 2023 15:03:17 +0200 Subject: [PATCH] Fix double entry in junit.xml check it system-out already exists if this is the case append text --- 10841.improvement.rst | 1 + AUTHORS | 1 + src/_pytest/junitxml.py | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 10841.improvement.rst diff --git a/10841.improvement.rst b/10841.improvement.rst new file mode 100644 index 000000000..ca6364c9c --- /dev/null +++ b/10841.improvement.rst @@ -0,0 +1 @@ +only create in junit.xml once for each test. diff --git a/AUTHORS b/AUTHORS index 058236461..c545520c4 100644 --- a/AUTHORS +++ b/AUTHORS @@ -189,6 +189,7 @@ Joshua Bronson Jurko Gospodnetić Justice Ndou Justyna Janczyszyn +Kai Kasprowsky Kale Kundert Kamran Ahmad Karl O. Pinc diff --git a/src/_pytest/junitxml.py b/src/_pytest/junitxml.py index 9242d46d9..8e8e39194 100644 --- a/src/_pytest/junitxml.py +++ b/src/_pytest/junitxml.py @@ -186,9 +186,18 @@ class _NodeReporter: return "\n".join([header.center(80, "-"), content, ""]) def _write_content(self, report: TestReport, content: str, jheader: str) -> None: - tag = ET.Element(jheader) - tag.text = bin_xml_escape(content) - self.append(tag) + exists = False + for elem in next(iter(self.xml.node_reporters.values())).nodes: + if jheader in elem.tag: + exists = True + tag = elem + tag.text = ( + tag.text + bin_xml_escape(content) if tag.text is not None else None + ) + if not exists: + tag = ET.Element(jheader) + tag.text = bin_xml_escape(content) + self.append(tag) def append_pass(self, report: TestReport) -> None: self.add_stats("passed")