python解析robot framework的output.xml,并生成html

一、背景

    Jenkins自动构建RF脚本,生成的RF特有HTML报告不能正常打开。

需求:用Python解析测试报告的xml数据,放在普通HTML文件中打开

二、output.xml数据

三、用pyh模块解析stat结点数据(output.py)

 1 #coding=utf-8
 2 '''
 3 Created on 2016年4月12日
 4 
 5 @author: cmcc
 6 '''
 7 
 8 import xml.dom.minidom
 9 import xml.etree.ElementTree
10 
11 #打开xml文档
12 dom = xml.dom.minidom.parse('output.xml');
13 
14 root2 = xml.etree.ElementTree.parse('output.xml')
15 #得到文档元素对象
16 root = dom.documentElement 
17 
18 total = root.getElementsByTagName('total');
19 total_len = len(total)
20 tag = root.getElementsByTagName('tag');
21 tag_len = len(tag)
22 suite = root.getElementsByTagName('suite');
23 suite_len = len(suite)
24 
25 #total的stat节点个数
26 total2 = root2.getiterator("total")
27 total_stat_num = len(total2[total_len-1].getchildren())
28 #tag的stat节点个数
29 tag2 = root2.getiterator("tag")
30 tag_stat_num = len(tag2[tag_len-1].getchildren())
31 #suite的stat节点个数
32 suite2 = root2.getiterator("suite")
33 suite_stat_num = len(suite2[suite_len-1].getchildren())
34 
35 statlist = root.getElementsByTagName('stat');
36 
37 def get_total_statistics():
38     list = []
39     for i in range(0,total_stat_num):
40         d = dict()
41         d['fail'] = int(statlist[i].getAttribute("fail"))
42         d['pass'] = int(statlist[i].getAttribute("pass"))
43         d['total'] = d['fail']+d['pass']
44         d['text'] = statlist[i].firstChild.data
45         list.append(d)
46         #print 'total:'+d['fail']+', '+d['pass']+', '+d['text']
47     
48     return list
49 # list =  get_total_statistics()
50 # print list
51 # print list[0]['fail']
52 
53 def get_statistics_by_tag():
54     list = []
55     for i in range(total_stat_num,total_stat_num+tag_stat_num):
56         d = dict()
57         d['fail'] = int(statlist[i].getAttribute("fail"))
58         d['pass'] = int(statlist[i].getAttribute("pass"))
59         d['total'] = d['fail']+d['pass']
60         d['text'] = statlist[i].firstChild.data
61         list.append(d)
62         #print 'total:'+d['fail']+', '+d['pass']+', '+d['text']
63 
64     return list
65 
66 def get_statistics_by_suite():
67     list = []
68     for i in range(total_stat_num+tag_stat_num,len(statlist)):
69         d = dict()
70         d['fail'] = int(statlist[i].getAttribute("fail"))
71         d['pass'] = int(statlist[i].getAttribute("pass"))
72         d['total'] = d['fail']+d['pass']
73         d['text'] = statlist[i].firstChild.data
74         list.append(d)
75         #print 'total:'+d['fail']+', '+d['pass']+', '+d['text']
76      
77     return list
View Code

四、pyh生成带表格的HTML(report.py)

 1 #coding=utf-8
 2 from pyh import *
 3 from msilib.schema import Font
 4 from output import *
 5 
 6 page = PyH('My wonderful PyH page')
 7 
 8 page << h2('Total statistics')
 9 
10 value = get_total_statistics()
11 print value
12 
13 mytab = page << table(border='1')
14 mytr = mytab << tr()
15 mytr << th("Total Statistics",width="200",bgcolor="#CCFFCC")+th("total",width="100",bgcolor="#CCFFCC")+th("pass",width="100",bgcolor="#CCFFCC")+th("fail",width="100",bgcolor="#CCFFCC")
16 for i in range(len(value)):
17     mytr = mytab << tr()
18     mytr << td(value[i]['text'])+td(value[i]['total'])+td(value[i]['pass'])+td(value[i]['fail'])
19 
20 
21 value = get_statistics_by_tag()
22 page << br()
23 mytab2 = page << table(border='1')
24 mytr = mytab2 << tr()
25 mytr << th("Statistics by Tag",width="200",bgcolor="#CCFFCC")+th("total",width="100",bgcolor="#CCFFCC")+th("pass",width="100",bgcolor="#CCFFCC")+th("fail",width="100",bgcolor="#CCFFCC")
26 for i in range(1,len(value)):
27     mytr = mytab2 << tr()
28     mytr << td(value[i]['text'])+td(value[i]['total'])+td(value[i]['pass'])+td(value[i]['fail'])
29 
30 
31 value = get_statistics_by_suite()
32 page << br()
33 mytab3 = page << table(border='1')
34 mytr = mytab3 << tr()
35 mytr << th("Statistics by Suite",width="200",bgcolor="#CCFFCC")+th("total",width="100",bgcolor="#CCFFCC")+th("pass",width="100",bgcolor="#CCFFCC")+th("fail",width="100",bgcolor="#CCFFCC")
36 for i in range(1,len(value)):
37     mytr = mytab3 << tr()
38     mytr << td(value[i]['text'])+td(value[i]['total'])+td(value[i]['pass'])+td(value[i]['fail'])
39 
40 
41 page.printOut('table.html')
View Code

五、生成效果

原文地址:https://www.cnblogs.com/shanJX/p/5387517.html