如何使用 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()
我正在使用 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()