以下是我的XML示例。有很多這種類似的情況。XML解析子標籤
<suite name="regression_1">
<test name="Login check" id="s1-t1">
<tc name="Valid Username & Password">
<message level="INFO" timestamp="20170726 14:25:39.778">Return: None</message>
<status starttime="20170726 14:25:39.740" status="PASS"/>
</tc>
<tc name="Invalid Username or Password">
<message level="INFO" timestamp="20170726 14:25:39.779">Return error</message>
<tc name="Invalid password" library="avi_lib">
<message level="TRACE" timestamp="20170726 14:25:47.769">Return error</message>
<status starttime="20170726 14:25:39.779" status="FAIL"/>
</tc>
<status starttime="20170726 14:25:39.738" status="FAIL"/>
</tc>
<status status="FAIL"/>
</test>
</suite>
我的要求: 通過XML日誌,記下測試,測試用例和測試案例狀態。如果狀態失敗,則顯示哪個測試用例和測試套件失敗以及其他相關消息。
問題我正在面臨:我正在迭代測試,收集所有的子測試狀態和狀態。在下面的代碼中,如果tc#2失敗,則輸出爲tc1提供,因爲我通過收集列表中的所有狀態來迭代tc1。所以輸出重複。
我的期望輸出(僅適用於狀態= 「失敗」)
測試名稱:登錄檢查
測試用例:無效的用戶名&密碼
狀態:失敗
消息:返回錯誤
以下是我的代碼:
# !/usr/bin/python
from xml.dom.minidom import parse
import xml.dom.minidom
import time
DOMTree = xml.dom.minidom.parse("output.xml")
collection = DOMTree.documentElement
tc_entry = collection.getElementsByTagName("suite")
for tc in tc_entry:
if tc.hasAttribute("name"):
print ("Suite name: {}".format(tc.getAttribute("name")))
tests = tc.getElementsByTagName('test')
for test in tests:
testcases = test.getElementsByTagName('tc')
for tc_name in testcases:
status = tc_name.getElementsByTagName('status')
for state in status:
if state.getAttribute("status") != "PASS":
print("Failed")
print("Test name: {}".format(test.getAttribute("name")))
print("Test case name: {}".format(tc_name.getAttribute("name")))
print("Status: {}".format(state.getAttribute("status")))
你可以在兩個代碼塊中發佈你想要的輸出和你當前的輸出嗎? – Harrichael