如何使用 Python 和 ElementTree 在 xml 文件中读出 tc 结果判决

How to read out tc result verdict in an xml file with Python and ElementTree

我正在使用 Python 2.7.8,但在使用 ElementTree 读取特定元素时遇到问题。我有一个带有几个 <ATC> </ATC> 标签的 xml。对于这个标签中的每一个,我都想读出 tcName 和该 tcName 的判定结果。

我正在尝试读出标签 <OriginalTestVersionName> 中的测试用例名称 ("REQPROD 232 Read IO") 以及该特定测试用例的标签 <Verdict Writable="true"> 中的判定结果 "NotExecuted"来自 xml 文件。

我函数的打印输出应该是:

"REQPROD 232 Read IO"
"NotExecuted"

我读出TestCaseName没有问题,但是如何读出判断结果呢?问题还在于标签 <ATC> </ATC> 内有几个带有判决的标签 -> <Verdict Writable="true">。我只想看一审判决

这是我的代码:

import xml.etree.ElementTree as ET

def openEmptyXML():
    xmltree = ET.parse('Automatimport.xml')
    testCaseContainer = xmltree.iter('ATC')
    for i in testCaseContainer:
        testCaseName = i.iter()
        for i in testCaseName:
            if "OriginalTestVersionName" in i.tag:
                tcName = i.text
                if 'REQPROD 232 Read IO' in tcName:
                    print tcName
                    verdictResult = i.iter()
                    for i in verdictResult:
                        if "Verdict" in i.tag:
                            print i.text

这是 xml 文件:

<ATC>
    <VersionNumber>37129</VersionNumber>
    <ElementNumber>19245</ElementNumber>
    <ElementName>ATESTCASE 19205</ElementName>
    <Name>ATESTCASE : REQPROD 232 Read IO</Name>
    <ConfigOrder>-1</ConfigOrder>
    <AdditionalInformation Writable="true" />
    <SeverityLevel />
    <Precondition Writable="false" Filepath="EMPTY-FILE"></Precondition>
    <Postcondition Writable="false" Filepath="EMPTY-FILE"></Postcondition>
    <OverrideInformation Writable="true" />
    <Description Writable="false" Filepath="EMPTY-FILE"></Description>
    <ExecutionDate Writable="true">2015-01-22</ExecutionDate>
    <OriginalTest>19051</OriginalTest>
    <OriginalTestVersionNumber>36795</OriginalTestVersionNumber>
    <OriginalTestVersionName>REQPROD 232 Read IO</OriginalTestVersionName>
    <OverrideVerdictActive Writable="true">false</OverrideVerdictActive>
    <Purpose Writable="false" Filepath="EMPTY-FILE"></Purpose>
    <Tester Writable="true">Tester1</Tester>
    <Verdict Writable="true">NotExecuted</Verdict>
    <Procedure>
      <PreCondition />
      <PostCondition />
      <ProcedureID>36797</ProcedureID>
      <ProcedureName>Procedure1</ProcedureName>
      <SequenceNumber>0</SequenceNumber>
      <CID>-1</CID>
      <Verdict Writable="true">NotExecuted</Verdict>
      <OverrideVerdictActive Writable="true">false</OverrideVerdictActive>
      <APComment Writable="true"></APComment>
      <Result>
        <SequenceNumber>1</SequenceNumber>
        <Action>12</Action>
        <ExpectedResult>1221</ExpectedResult>
        <Result Writable="true"></Result>
        <Verdict Writable="true">NotExecuted</Verdict>
      </Result>
    </Procedure>
    <Requirement>
      <VersionNumber>2824</VersionNumber>
      <ElementNumber>6994</ElementNumber>
      <ElementName>REQPROD 2393</ElementName>
      <Name>Req 1234</Name>
      <ID>2363</ID>
      <Description Writable="false" Filepath=".\xhtml\xxxx.html">some description print out.....</Description>
      <Purpose Writable="false">Purpose of tc is....</Purpose>
    </Requirement>
    <OriginalTestcase>
      <VersionNumber>36732</VersionNumber>
      <ElementNumber>1905</ElementNumber>
      <ElementName>TESTCASE 19179</ElementName>
      <Name>TESTCASE : REQPROD 232 Read IO</Name>
      <SeverityLevel />
      <AsilToBeTested />
      <TestClass />
      <TestTechnique />
    </OriginalTestcase>
  </ATC>

有没有人知道如何读出 tcName 及其结果判断(xml 文件中的第 20 行)"NotExecuted"?

******** 添加于 2015 年 1 月 29 日***************

这是 xml 文件的第一部分到第一个 <ATC> 元素:

<?xml version="1.0" encoding="utf-16"?>
<ExchangeFormat xmlns:xsi="http://www.w.org/" xmlns:xsd="http://www.w.org" xsi:noNamespace="C:\Program Files\ExchangeFormat.xsd">
  <SchemaVersion>1.3</SchemaVersion>
  <TestOrder>
    <VersionNumber>3712</VersionNumber>
    <ElementNumber>1920</ElementNumber>
    <ElementName>TESTORDER 1920</ElementName>
    <Name>TESTORDER :Automatimport / MAIN; 0</Name>
    <TestSuite>
      <VersionNumber>3712</VersionNumber>
      <ElementNumber>1920</ElementNumber>
      <ElementName>TESTSUITE 192</ElementName>
      <Name>TESTSUITE : Example_1</Name>
      <ATC>
           **se above**

这是使用 findall() and find() 获得预期输出的一种方法。这将打印所有三个 Verdict 元素的文本内容。

import xml.etree.ElementTree as ET

def openEmptyXML():
    doc = ET.parse("Automatimport.xml")
    for atc in doc.findall(".//ATC"):   
        versionname = atc.find("OriginalTestVersionName") 
        tcName = versionname.text
        if tcName == 'REQPROD 232 Read IO':
            verdict1 = atc.find("Verdict")
            verdict2 = atc.find("Procedure/Verdict")
            verdict3 = atc.find("Procedure/Result/Verdict")
            print tcName
            print verdict1.text
            print verdict2.text
            print verdict3.text

openEmptyXML()