zoukankan      html  css  js  c++  java
  • 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

    五、生成效果

  • 相关阅读:
    MKMapVIew学习系列2 在地图上绘制出你运行的轨迹
    WPF SDK研究 Intro(6) WordGame1
    WPF SDK研究 Intro(3) QuickStart3
    WPF SDK研究 Layout(1) Grid
    WPF SDK研究 目录 前言
    WPF SDK研究 Intro(7) WordGame2
    WPF SDK研究 Layout(2) GridComplex
    对vs2005创建的WPF模板分析
    WPF SDK研究 Intro(4) QuickStart4
    《Programming WPF》翻译 第6章 资源
  • 原文地址:https://www.cnblogs.com/shanJX/p/5387517.html
Copyright © 2011-2022 走看看