I am creating a customized report from soapui TESTS-TestSuites.xml file.
Below is the result in xml format -
<?xml version="1.0" encoding="UTF-8" ?>
<testsuites>
<testsuite errors="0" failures="0" id="0" name="APIs and API Versions retrieval" package="PAD API Regression" tests="11" time="1.535">
<testcase name="GET-APIs" time="0.942" />
<testcase name="GET-flight-inspiration-search-SearchnShoppingFamily" time="0.064" />
<testcase name="GET-top-flight-destinations_SearchnShoppingFamily" time="0.059" />
<testcase name="GET-flight-search-by-calendar_SearchnShoppingFamily" time="0.058" />
<testcase name="GET-top-flight-destinations_TravelIntelligenceFamily" time="0.064" />
<testcase name="GET-fare-search-history_TravelIntelligenceFamily" time="0.089" />
<testcase name="GET-checked-in-links_UtilitiesFamily" time="0.067" />
<testcase name="GET-nearest-relevant-airport_UtilitiesFamily" time="0.062" />
<testcase name="GET-airport-lists-by-city/country_UtilitiesFamily" time="0.054" />
<testcase name="GET-hotel-search_HotelAPIsFamily" time="0.052" />
<testcase name="GET-APIs_with_invalid_ID" time="0.024" />
</testsuite>
<testsuite errors="0" failures="1" id="1" name="Service and API Catalogue" package="PAD API Regression" tests="13" time="0.629">
<testcase name="GET-List_of_catalogues" time="0.058" />
<testcase name="GET-Catalogue_AirlineIT2" time="0.01">
<failure message="Cancelling due to failed test step" type="Cancelling due to failed test step">
<![CDATA[<h3><b>Catalogue_AirlineIT2 Failed</b></h3><pre>[Valid HTTP Status Codes] Response status code:200 is not in acceptable list of status codes
</pre><hr/>]]>
</failure>
</testcase>
<testcase name="GET-Catalogue_Distribution" time="0.05" />
<testcase name="GET-Catalogue_Self-service" time="0.035" />
<testcase name="GET-All_Families_of_Self-Service_Catalogue" time="0.065" />
<testcase name="GET-Families_Level_1_of_Self-Service_Catalogue" time="0.053" />
<testcase name="GET-Families_Level_2_of_Self-Service_Catalogue" time="0.058" />
<testcase name="GET-Family_Air API_of_Self-Service_Catalogue" time="0.03" />
<testcase name="GET-Family_Hotel API_of_Self-Service_Catalogue" time="0.067" />
<testcase name="GET-Family_Search_and_Shopping_from_Air_APIs_of_Self-Service_Catalogue" time="0.052" />
<testcase name="GET-Family_Travel Intelligence API_of_Self-Service_Catalogue" time="0.036" />
<testcase name="GET-Family_Utilities API_of_Self-Service_Catalogue" time="0.105" />
<testcase name="GETFamily_Search_and_Shopping_from_Hotel_API_of_Self-Service_Catalogue" time="0.01" />
</testsuite>
</testsuites>
Below is my code to read and get result for the report -
import os
import os.path
import codecs
import xml.etree.ElementTree
import xml.etree.ElementTree as ET
from BeautifulSoup import BeautifulSoup
from shutil import copyfile
data = open(r'H:\Scripts\report\TESTS-TestSuites.xml')
root = ET.parse(data).getroot()
projectName = root.find('testsuite').get('package')
totalTime = 0
totalTestCases = 0
totalTestFailure = 0
for testsuites in root.findall('testsuite'):
totalTestCases += int(testsuites.get('tests'))
totalTime += float(testsuites.get('time'))
totalTestFailure += int(testsuites.get('failures'))
successRate = "%.2f" % ((float(totalTestCases) - float(totalTestFailure))/float(totalTestCases)*100)
print "SuccessRate", successRate
# Get All Test Cases
for testcases in root.iter('testcase'):
print testcases.get('name')
# Get All Failed Test Cases
for testcases in root.getiterator():
if testcases.tag == 'failure':
print testcases.text
# Get All Failed TestSuites
for testsuites in root.findall('testsuite'):
if int(testsuites.get('failures')) !=0:
print "Failed TestSuite name", testsuites.get('name')
How can I get the name of TestCase
which is failed.
If I do following, I get None
for testsuites in root.findall('testsuite'):
if int(testsuites.get('failures')) !=0:
print "Failed TestSuite name", testsuites.get('name')
for testcases in root.getiterator():
if testcases.tag == 'failure':
print testcases.get('name')