一、背景
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
四、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')
五、生成效果