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

    五、生成效果

  • 相关阅读:
    网页速度分析:PageSpeed Insights (by Google)
    Win10下Jenkins服务是系统账户导致无法使用用户的私有环境变量
    部署Pod非Running状态,describe查看显示node资源不足
    kubernetes部署Pod一直处于CrashLookBackOff状态
    kubernetes部署的Pod长时处于ContainerCreating状态
    VMWARE用OVF文件方式导入报错:Error importing OVF: Failed to open disk: /var/lib/docker/vmwareOVF/Centos_7_64-bit-disk2.vmdk. Reason: The file specified is not a virtual disk
    VMWARE用OVF文件方式导入报错:Error importing OVF:SHA digest of file CentOS_7_64-bit-file1iso does not match manifest
    Linux系统ssh到其它服务器时间延迟长
    Linux系统服务器重启后进入到急救模式
    linux系统内存使用率飙高到90%
  • 原文地址:https://www.cnblogs.com/shanJX/p/5387517.html
Copyright © 2011-2022 走看看