以下は私の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の出力が与えられます。したがって、出力が繰り返されています。
マイ所望の出力(ステータスのみのために= "FAIL")
テスト名:無効なユーザー名&パスワード
ステータス::リターン:
メッセージを失敗ログイン
テストケースをチェックエラー
以下は私のコードです:
# !/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")))
希望の出力と現在の出力を2つのコードブロックで投稿できますか? – Harrichael