Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取XML以获取Python2中失败的测试用例_Xml_Python 2.7_Groovy_Soapui - Fatal编程技术网

读取XML以获取Python2中失败的测试用例

读取XML以获取Python2中失败的测试用例,xml,python-2.7,groovy,soapui,Xml,Python 2.7,Groovy,Soapui,我正在从soapui TESTS-TestSuites.xml文件创建自定义报告 以下是xml格式的结果- <?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=

我正在从soapui TESTS-TestSuites.xml文件创建自定义报告

以下是xml格式的结果-

<?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>
如何获取失败的TestCase的名称

如果我跟随,我什么也得不到


根据聊天中的讨论,OP请求了一个groovy脚本 它读取问题中提到的xml文件,并为每个测试用例编写一个单独的xml文件

下面使用模板方法来编写文件

使用要在模板中替换的默认贴图文件。对于每个实例,将各个测试用例中的值替换为模板

下面是Groovy脚本:


如果您的目标是创建html报告,那么使用ApacheAnt并提供上述xml作为输入。有关更多详细信息,请参见此处我查过了。我的目的是创建类似损坏控制报告的报告。请看这里-我的另一个问题-请检查我问题的下面部分。如果你有任何想法,那就太好了。不要对python或maven有太多想法。您介意使用groovy处理xml吗?当然不介意。最终,我已经在我的soapui项目中得到了您的groovy脚本的帮助哦,很高兴知道。也许你会投下有用的答案;
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')
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')
//Provide the absolute path of the report xml
def inputXml = '/absolute/path/report.xml'

//Define the location where files needs to be written
def outputDir = '/absolute/path/output/directory'

def templateXml = '''<?xml version="1.0" encoding="UTF-8"?> 
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="$className" time="$suiteTime" tests="$tests" errors="$errors" skipped="$skipped" failures="$failures"> 
<testcase name="$caseName" classname="$className" time="$caseTime"/> 
</testsuite>'''

def binding = [failures:'0', errors: '0', skipped:'0', suiteTime: '0.00', caseTime:'0.00', caseName:'', tests: '1', suite: '', className: 'com.amadeus.developers.pad.amp.catalogue.Catalogue_TryIt_002_SoapSpec']

def xml = new XmlSlurper().parseText(new File('report.xml').text)
def testcases = xml.'**'.findAll{it.name() == 'testcase'}
def engine = new groovy.text.SimpleTemplateEngine()

//Save the contents to a file
def saveToFile(file, content) {
    if (!file.parentFile.exists()) {
         file.parentFile.mkdirs()
         println "Directory did not exist, created"
    }
    file.write(content) 
    assert file.exists(), "${file.name} not created"
}

def writeCaseData = { kase ->
    def bindingKase = binding.clone()
    bindingKase.errors = kase.parent().@errors
    bindingKase.suiteTime = kase.parent().@time
    bindingKase.suite = kase.parent().@name
    bindingKase.caseName = kase.@name
    bindingKase.caseTime = kase.@time
    kase.failure.size() == 0 ?: (bindingKase.failures = '1')
    def template = engine.createTemplate(templateXml).make(bindingKase)
    saveToFile(new File("${outputDir}/${kase.@name}.xml"), template.toString())
}

testcases.each { writeCaseData it }