Skip to content

Commit 88bb776

Browse files
author
Kevin Li
committed
add: wiki content dump and failed results filtering
1 parent 2c35e63 commit 88bb776

4 files changed

Lines changed: 173 additions & 0 deletions

File tree

xml_python/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
__author__ = 'k22li'

xml_python/python_xml_praser.py

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
__author__ = 'k22li'
2+
3+
from xml.etree.ElementTree import ElementTree
4+
5+
class XMLParser(object):
6+
"""
7+
parser the xml file, and return the needed info
8+
"""
9+
def __init__(self, file = ''):
10+
"""
11+
12+
"""
13+
self.srcFile = file
14+
self.tree = ElementTree()
15+
self.root = self.tree.parse(self.srcFile)
16+
17+
def __call__(self, file = ''):
18+
""""""
19+
# self.__init__(file)
20+
# parser = self(file)
21+
attribDict = self._getTestCaseDetails()
22+
failureReason = self._getFailureReason()
23+
attribDict.update(failureReason)
24+
return attribDict
25+
26+
def _getChildren(self):
27+
"""
28+
return the children detected from the xml prasered, return in a list format
29+
"""
30+
return self.root.getchildren()
31+
32+
def _getTestCaseNode(self):
33+
"""
34+
return the testcase node object
35+
"""
36+
nodesList = self._getChildren()
37+
for node in nodesList:
38+
if 'testcase' == node.tag:
39+
return node
40+
else:
41+
return None
42+
43+
def _getTestCaseDetails(self):
44+
"""
45+
return the attributes from the testcase nodes
46+
"""
47+
tcNode = self._getTestCaseNode()
48+
if tcNode is None:
49+
return None
50+
else:
51+
return tcNode.attrib
52+
53+
def _getFailureReason(self):
54+
"""
55+
get the failure reason from the testcase nodes
56+
"""
57+
failureDict = {
58+
'error' : '',
59+
'traceback' : ''
60+
}
61+
parentNode = self._getTestCaseNode()
62+
if parentNode is not None:
63+
if 'Failed' == parentNode.get('result'):
64+
errorNode = parentNode.find('error')
65+
tracebackNode = errorNode.find('traceback')
66+
failureDict['error'] = errorNode.get('reason')
67+
failureDict['traceback'] = tracebackNode.text
68+
else:
69+
failureDict['error'] = 'n/a'
70+
failureDict['traceback'] = 'n/a'
71+
return failureDict
72+
73+
if __name__ == '__main__':
74+
file = 'xml_data.xml'
75+
parser = XMLParser(file)
76+
attribDict = parser._getTestCaseDetails()
77+
failureReason = parser._getFailureReason()
78+
attribDict.update(failureReason)
79+
for k in attribDict.keys():
80+
print k, '------>', attribDict[k]

xml_python/python_xml_praser.pyc

3.01 KB
Binary file not shown.

xml_python/result_xmls.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
__author__ = 'k22li'
2+
import os
3+
import urllib
4+
from zipfile import ZipFile
5+
from python_xml_praser import XMLParser
6+
7+
#path = r'http://becim014.rnd.nokia.com:8081/job/Granite-Rfa-regression-test-lanaiSS/107/artifact/test_results/test_results/xml'
8+
class XMLResult(object):
9+
"""
10+
# def __init__(self, pNam = '', jobNum = '', tarDir = ''):
11+
"""
12+
def __init__(self, pNam = '', jobNum = '', tarDir = ''):
13+
print pNam, jobNum, tarDir
14+
jobNum = int(jobNum)
15+
self.tarDir = tarDir
16+
# self.path = r'http://becim014.rnd.nokia.com:8081/job/Granite-Rfa-regression-test-%s/%d/artifact//test_results/xml/*zip*/xml.zip'%(pNam, jobNum)
17+
self.path = r'http://becim014.rnd.nokia.com:8081/job/Granite-Rfa-regression-test-%s/%d/artifact/test_results/xml/*zip*/xml.zip'%(pNam, jobNum)
18+
19+
def __call__(self, **kwargs):
20+
""" """
21+
failureResults = []
22+
caseList = self._extractFromZipFile(tarDir = self.tarDir)
23+
caseList = [os.path.join(self.tarDir, 'xml', item) for item in caseList]
24+
for item in caseList:
25+
# print item
26+
attributes = XMLParser(file = item)
27+
28+
k = attributes(file = item)
29+
# print k
30+
if 'Failed' == k['result']:
31+
k.update({'hyperlink' : item})
32+
failureResults.append(k)
33+
34+
return failureResults
35+
36+
def _retrieveXMLToLocal(self):
37+
"""
38+
return the local temp zip file name
39+
"""
40+
cachedZip = urllib.urlretrieve(self.path)[0]
41+
return cachedZip
42+
43+
def _dumpNameListFromZipFile(self):
44+
xmlsList = []
45+
cachedZip = self._retrieveXMLToLocal()
46+
with ZipFile(cachedZip, 'r') as myZip:
47+
xmls = myZip.namelist()
48+
if 'xml/' in xmls:
49+
xmls.remove('xml/')
50+
51+
for xmlNam in xmls:
52+
xmlsList.append(os.path.join(cachedZip, xmlNam))
53+
return xmlsList
54+
55+
def _extractFromZipFile(self, tarDir = ''):
56+
"""
57+
58+
"""
59+
self.zipFile = self._retrieveXMLToLocal()
60+
with ZipFile(self.zipFile, 'r') as myZip:
61+
myZip.extractall(tarDir)
62+
63+
xmlDir = os.path.join(tarDir, 'xml')
64+
if os.path.isdir(xmlDir):
65+
return os.listdir(xmlDir)
66+
else:
67+
return None
68+
69+
if __name__ == '__main__':
70+
71+
# tarDir = os.path.join('C:\\', 'Temp', 'test_result')
72+
# failureResults = []
73+
# xml = XMLResult(pNam = 'orionDS', jobNum = '222')
74+
# kList = xml._dumpNameListFromZipFile()
75+
#
76+
# caseList = xml._extractFromZipFile(tarDir = tarDir)
77+
# caseList = [os.path.join(tarDir, 'xml', item) for item in caseList]
78+
# for item in caseList:
79+
## print item
80+
# attributes = XMLParser(file = item)
81+
#
82+
# k = attributes(file = item)
83+
# if 'Failed' == k['result']:
84+
# failureResults.append(k)
85+
## print k['id'], ' ---> ', k['error']
86+
tarDir = os.path.join('C:\\', 'Temp', 'test_result')
87+
Params = {'pNam' : 'lanaiSS', 'jobNum' : '107', 'tarDir' : tarDir}
88+
# Params = ['lanaiSS', 107, tarDir]
89+
90+
t = XMLResult(**Params)
91+
resList = t(**Params)
92+
print resList

0 commit comments

Comments
 (0)