Unten ist das Beispiel von meinem XML. Es gibt viele ähnliche Fälle.XML Parsing auf Kind-Tags
<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>
Meine Forderung: Pass durch die XML-Protokolle, beachten Sie die Tests, Testfälle und den Testfall-Status. Wenn der Status fehlgeschlagen ist, wird angezeigt, für welchen Testfall und welche Testsuite es zusammen mit anderen relevanten Nachrichten fehlgeschlagen ist.
Problem, mit dem ich konfrontiert bin: Ich wiederhole den Test und sammle den Status und Status aller Untertests. Wenn tC# 2 im folgenden Code fehlgeschlagen ist, gibt Ausgabe für tc1 aus, während ich für tc1 iteriere, indem ich den gesamten Status in der Liste sammle. Also wird die Ausgabe wiederholt.
Meine gewünschte Ausgabe (Nur für Status = "FAIL")
Testname:
Testfall prüfen Login: Ungültiger Benutzername & Passwort
Status: fehlschlagen
Nachrichten: Zurück Fehler
Unten ist mein Code:
# !/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")))
Können Sie in zwei Codebausteinen Ihre gewünschte Ausgabe und Ihre aktuelle Ausgabe posten? – Harrichael