python基础报告_Python基础(六) python生成xml测试报告

思路:

1.使用xslt样式,这样可以很好的和xml结合,做出漂亮的报告

2.生成xml结构

xslt样式是个很有意思,也很强大的,现在用的很多,很方便就能做出一个漂亮的报告,可以百度一下,语法相当简单,跟写html差不多的.

在这里可以定制好,我们要生成报告,是什么样子的,然后在从xml获取数据.

body{background:#fff;margin:0;padding:40px 20px;font-family:"Arial", Arial, Sans-serif;font-size:16px;color:#000;

}table{margin:5px 5px 0;border:0px solid #222;font-size:0.8em;

}td{margin:5px 5px 0;padding:10px 10px 10px 10px;vertical-align:text-top;border:1px solid #222;border-width:1px 1px 1px 1px;

}td.light{border:0px solid #222;

}td.number{text-align:right;

}td.status{text-align:right;vertical-align:text-bottom;

}

自动化测试执行报告

Overall Test Result执行时间单步结果响应CODEResponse信息

white

black

rgb(255,0,0)

rgb(60,179,113)

white

Overall Test Result:

xml是要按照,xslt定制的结构进行生成,或者换句话说,xslt样式要按照xml结构去做

xml结构

REPORT/LOG_ENTRY

REPORT下OVER_STATUS节点,这个是整个报告的结果,只有当所有条目为passed时才会为passed

每个LOG_ENTRY节点,代表一行数据

包括:

STATUS单行数据执行状态

EXECUTION_TIME执行时间

STEP_RESULT单步执行结果

COMPONENT_NAME组件名称,

STEP_DESCRIPTION步骤描述

当然这些都可以自已定义,可以自己增加或减少,但是xslt表中也要相对应的增加或减少

PASSED

FAILED

2017.06.15 15:57:16

FAILED

704

{u'nextUrl': u'http://www.elong.com', u'message': u'\u9a8c\u8bc1\u7801\u9519\u8bef', u'code': u'704', u'success': False, u'isShowVerifyCode': True}

FAILED

2017.06.15 15:57:16

FAILED

704

{u'nextUrl': u'http://www.elong.com', u'message': u'\u9a8c\u8bc1\u7801\u9519\u8bef', u'code': u'704', u'success': False, u'isShowVerifyCode': True}

下面上,生成xml的python代码,这个创建xml结构就很简单了.

使用xml.dom.minidom就可以了,掌握几个要点很容易就创建一个xml

1,创建一个xml文档

import xml.dom.minidom as xmlDoc #xmlDoc起的别名

xmldoc= xmlDoc.Document

2.因为我们要使用xslt样式,所以呢.

创建的xml第一行是xml头    <?xml version="1.0" encoding="utf-8"?> 这样python默认已经有了,就不用我们创建了,那么

第二行,我们要写样式头 <?xml-stylesheet href="LOG.XSLT" type="text/xsl"?>   头中写了引用相同目录下的LOG.XSLT ,类型TEXT/XSL

要注意一点href属性不要写成这样D:\demo\LOG.XSLT 这样写会有问题,只要把这个文件和xml放在同一目录就好了.

#xml样式

xlstNode = xmlD.createProcessingInstruction("xml-stylesheet","href=\"LOG.XSLT\" type=\"text/xsl\"")

xmlD.appendChild(xlstNode)

3.创建一个REPORT根节点,你也可以起名ROOT,叫什么名字看你自己了

创建节点用,createElement,之后用appendChild增加节点到xml对象

report = xmlD.createElement('REPORT')

xmlD.appendChild(report)

4.之后创建其它节点,一样用createElement,但是如果节点下要增加内容要用xmlDoc.createTextNode('passed')

以下代码意思是:创建一个over_status的节点,节点文本为passed,然后,将此节点增加到根节点REPORT下

overStatus = xmlD.createElement('OVER_STATUS')

overStatus.appendChild(xmlD.createTextNode('PASSED'))

report.appendChild(overStatus)

有以上4点,基本创建一个xml没有问题了.

生成xml具体python代码:

以下代码创建根节点做为了一个单独的函数,之所以这么做因为要生成的报告,只创建一个根节点,和over_status 结果状态

其它累加的行放在了节点LOG_ENTRY下,一个根节点下可以有多个LOG_ENTRY节点........一个LOG_ENTRY节点代码一行数据执行结果

#*_*coding:utf-8*_*

importxml.dom.minidom as xmlDocimportosimportglimportsysclasscREPORTXML(object):def __init__(self):

self.__struct =self.createReportNode()#创建report节点

defcreateReportNode(self):try:

xmlD=xmlDoc.Document()#xml样式

xlstNode = xmlD.createProcessingInstruction("xml-stylesheet","href=\"LOG.XSLT\" type=\"text/xsl\"")

xmlD.appendChild(xlstNode)

report= xmlD.createElement('REPORT')

xmlD.appendChild(report)

overStatus= xmlD.createElement('OVER_STATUS')

overStatus.appendChild(xmlD.createTextNode('PASSED'))

report.appendChild(overStatus)

returnResult=[]

returnResult.append(xmlD)

returnResult.append(report)exceptException,ex:returnex.messagereturnreturnResultdefwriteReport(self,execTime,stepResult,comName,stepDisc):#reportNodeList = self.createReportNode()

entry= self.createLogEntry(self.__struct[0],execTime,stepResult,comName,stepDisc)

self.__struct[1].appendChild(entry)

self.writeXml(self.__struct[0],gl.reporterPath+'reportxml.xml')#self.writeXml(self.__struct[0],gl.reporterPath+'reportxml_%s.xml'%(gl.curTimeStr))

#-------------创建xml格式-有多个相同的节点,并且该节点下有4个名称相同的子节点----------------

defcreateLogEntry(self,docObj,executeTime,stepResult,componentName,stepDiscription):

entry= docObj.createElement("LOG_ENTRY")

status= docObj.createElement("STATUS")

nodeExecuteTime= docObj.createElement("EXECUTION_TIME")

nodeStepResult= docObj.createElement("STEP_RESULT")

nodeComponentName= docObj.createElement("COMPONENT_NAME")

nodeStepDiscription= docObj.createElement("STEP_DESCRIPTION")

status.appendChild(docObj.createTextNode(stepResult))

nodeExecuteTime.appendChild(docObj.createTextNode(executeTime))

nodeStepResult.appendChild(docObj.createTextNode(stepResult))

nodeComponentName.appendChild(docObj.createTextNode(componentName))

nodeStepDiscription.appendChild(docObj.createTextNode(stepDiscription))

entry.appendChild(status)

entry.appendChild(nodeExecuteTime)

entry.appendChild(nodeStepResult)

entry.appendChild(nodeComponentName)

entry.appendChild(nodeStepDiscription)returnentry#参数,xml对象,准备存储xml文件路径,文件模式:读 and 写 (r and w)

defwriteXml(self,xmlDoc,xmlPath):

f= open(xmlPath,"w")

xmlDoc.writexml(f,indent='\t', addindent='\t', newl='\n', encoding="utf-8") #中间的加了一些格式符,这样生成的xml自动对齐格式

f.close()if __name__=='__main__':

reportx=cREPORTXML()print reportx.writeReport('20170602','PASSED','1-SETTEXT','AUTOMATION TEST')print reportx.writeReport('20170606','FIELD','2-SETTEXT','AUTOMATION TEST')

用ie打开xml报告,当然可以看出总结果显示有点问题,这个不影响报告展示,代码中处理一下就好.

简单的报告就完成了,追求完美的可以在细化一下,增加一些其它信息,调整一下颜色.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值