-
Notifications
You must be signed in to change notification settings - Fork 55
Closed
Description
Description:
I got the following nested results when merge one JUnit XML with root element testsuite and another JUnit XML with root element testsuites.
JUnit XML with testsuite(name test_suite.xml in code):
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="com.example.unittestdemo.ExampleUnitTest" tests="1" skipped="0" failures="0" errors="0" timestamp="2020-11-19T14:34:55" hostname="MyHost" time="0.002">
<properties/>
<testcase name="division_isCorrect" classname="com.example.unittestdemo.ExampleUnitTest" time="0.002"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
JUnit XML with testsuites(name test_suites.xml in code):
<testsuites tests="1" skipped="0" failures="0" errors="0" timestamp="2020-12-03T07:55:23" hostname="MyHost"
time="0.005">
<testsuite name="com.example.base.BaseUnitTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2020-12-03T07:55:23" hostname="MyHost" time="0.005">
<properties/>
<testcase name="division_isCorrect" classname="com.example.base.BaseUnitTest" time="0.005"/>
</testcase>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
</testsuites>
And I run the code:
xml_suite_path = "test_suite.xml"
xml_suites_path = "test_suites.xml"
xml_suite = JUnitXml.fromfile(filepath=xml_suite_path)
xml_suites = JUnitXml.fromfile(filepath=xml_suites_path)
merged_xml = xml_suite + xml_suites
merged_xml.write("merged.xml")
Actual:
<?xml version='1.0' encoding='utf-8'?>
<testsuites>
<testsuite name="com.example.unittestdemo.ExampleUnitTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2020-11-19T14:34:55" hostname="MyHost" time="0.002">
<properties/>
<testcase name="division_isCorrect" classname="com.example.unittestdemo.ExampleUnitTest" time="0.002"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
<testsuites tests="1" skipped="0" failures="0" errors="0" timestamp="2020-12-03T07:55:23" hostname="MyHost"
time="0.005">
<testsuite name="com.example.base.BaseUnitTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2020-12-03T07:55:23" hostname=MyHost" time="0.005">
<properties/>
<testcase name="division_isCorrect" classname="com.example.base.BaseUnitTest" time="0.005"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
</testsuites>
</testsuites>
Expected:
<testsuites tests="5" failures="1" errors="0" skipped="1" time="0.004">
<testsuite name="com.example.unittestdemo.ExampleUnitTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2020-11-19T14:34:55" hostname="MyHost" time="0.002">
<properties/>
<testcase name="division_isCorrect" classname="com.example.unittestdemo.ExampleUnitTest" time="0.002"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
<testsuite name="com.example.base.BaseUnitTest" tests="1" skipped="0" failures="0" errors="0"
timestamp="2020-12-03T07:55:23" hostname=MyHost" time="0.005">
<properties/>
<testcase name="division_isCorrect" classname="com.example.base.BaseUnitTest" time="0.005"/>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
</testsuites>
My Solution:
And currently I solved this problem by converting all testsuite JUnit XML to testsuites JUnit XML and then update the statistics.
def convert_to_test_suites_if_needed(xml):
if isinstance(xml, TestSuite):
new_xml = JUnitXml()
new_xml.add_testsuite(xml)
return new_xml
return xml
xml_suite_path = "test_suite.xml"
xml_suites_path = "test_suites.xml"
xml_suite = convert_to_test_suites_if_needed(JUnitXml.fromfile(filepath=xml_suite_path))
xml_suites = convert_to_test_suites_if_neededJUnitXml.fromfile(filepath=xml_suites_path))
merged_xml = xml_suite + xml_suites
merged_xml.update_statistics()
merged_xml.write("merged.xml")
I think this could be done in junitparser side to make it compatibile with merging testsuite and testsuites and get the right statistics.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels