python+robot framework实现测报告定制化和邮件发送
前面已经介绍了python+robot framework自动化框架和基本原理的实现,详情请看
python+robot framework接口自动化测试
本章主要讲解报告已经产生那如何以自动化的方式当报告执行结束后以邮件的方式发送通知呢???
其中有3点:第一:这个报告是以什么的格式发送达到简洁概括的目的?第二:定制化的报告格式怎么带上附件以邮件的方式发出?
第三:RF如何输出就实现结构上的自动化框架?
解决此两点再加上前篇讲的基本原理和关键字封装,那么就可以骄傲的说完成了接口自动化框架的实现~~~(当然还未集成到jenkins~~数据未入DB等周边操作)
首先解决第一点:核心脚本如下~(注:此脚本网上也有例子,我们只需要根据自己的实际需求稍作调整即可~)
__author__ = 'niuzhigang'
# -*- coding: utf-8 -*-
#encoding=utf-8 def createReportContent(detailContent,totalContent,byTagContent,bySuiteContent,percentage,reportSavePath):
result=detailContent.split("\n")
sDetail=''
for index in range(len(result)):
if(index!=len(result)):
sDetail=sDetail+result[index]+"<br>"
else:
sDetail=sDetail+result[index]
detailTable="<font size='5' style='font-weight:bold'>Summary Information</font><br><table width='1000' border='1' cellpadding='1' cellspacing='1'><tr><td width='100%'>"+'Run Pass Rate: '+percentage+"</td></tr><tr><td width='100%'>"+sDetail+"</td></tr></table>" totalTable="<table width='1000' border='1' cellpadding='1' cellspacing='1'><tr bgcolor='#DCDCDC'><td width='40%''>Total Statistics</td><td>Total</td><td>Pass</td><td>Fail</td><td>Elapsed</td><td>Pass/Fail</td></tr>"
result=totalContent.split("\n")
del result[0]
del result[0]
del result[0]
del result[0]
del result[0]
del result[0]
for index in range(len(result)):
if((index+1)%2==1):
totalTable=totalTable+"<tr><td>"+result[index]+"</td>"
else:
s=result[index]
items=s.split(" ")
for item in items:
totalTable=totalTable+"<td>"+item+"</td>"
sColor="";
if(items[2]==""):
sColor="green"
else:
sColor="red"
totalTable=totalTable+"<td><center><font style='font-weight:bold;color:green'>"+items[1]+"/</font><font style='font-weight:bold;color:"+sColor+"'>"+items[2]+"</font></center></td></tr>"
totalTable=totalTable+"</table>"
byTagTable="<table width='1000' border='1' cellpadding='1' cellspacing='1'><tr bgcolor='#DCDCDC'><td width='40%'>Statistics by Tag</td><td>Total</td><td>Pass</td><td>Fail</td><td>Elapsed</td><td>Pass/Fail</td></tr>"
result=byTagContent.split("\n")
del result[0]
del result[0]
del result[0]
del result[0]
del result[0]
del result[0]
for index in range(len(result)):
if((index+1)%2==1):
byTagTable=byTagTable+"<tr><td>"+result[index]+"</td>"
else:
s=result[index]
items=s.split(" ")
for item in items:
byTagTable=byTagTable+"<td>"+item+"</td>"
sColor="";
if(items[2]==""):
sColor="green"
else:
sColor="red"
byTagTable=byTagTable+"<td><center><font style='font-weight:bold;color:green'>"+items[1]+"/</font><font style='font-weight:bold;color:"+sColor+"'>"+items[2]+"</font></center></td></tr>"
byTagTable=byTagTable+"</table>"
bySuiteTable="<table width='1000' border='1' cellpadding='1' cellspacing='1'><tr bgcolor='#DCDCDC'><td width='40%'>Statistics by Suite</td><td>Total</td><td>Pass</td><td>Fail</td><td>Elapsed</td><td>Pass/Fail</td></tr>"
result=bySuiteContent.split("\n")
del result[0]
del result[0]
del result[0]
del result[0]
del result[0]
del result[0]
for index in range(len(result)):
if((index+1)%2==1):
bySuiteTable=bySuiteTable+"<tr><td>"+result[index]+"</td>"
else:
s=result[index]
items=s.split(" ")
for item in items:
bySuiteTable=bySuiteTable+"<td>"+item+"</td>"
sColor="";
if(items[2]==""):
sColor="green"
else:
sColor="red"
bySuiteTable=bySuiteTable+"<td><center><font style='font-weight:bold;color:green'>"+items[1]+"/</font><font style='font-weight:bold;color:"+sColor+"'>"+items[2]+"</font></center></td></tr>"
bySuiteTable=bySuiteTable+"</table>"
html="<html> <head><title></title><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><body>"+detailTable+"<font size='5' style='font-weight:bold;'>Test Statistics</font>"+totalTable+"<br>"+byTagTable+"<br>"+bySuiteTable+"<br><font size='5' style='font-weight:bold;'>更多详情请查看邮件附件【report.html】和【log.html】!!!</font></body></html>"
print html
read = open(reportSavePath,'w')
read.write(html)
read.close
到此,创建报告的模板脚本已经完成了~ 是不是也没什么难度~那么接下来我们继续发送邮件了
其次就是第二点:相对创建报告,发送邮件的脚本更是easy~主要借助BeautifulSoup库读取html文件~
具体py脚本如下
__author__ = 'niuzhigang'
# -*- coding: utf-8 -*-
#encoding=utf-8 import time
import smtplib
import email
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import sys
from bs4 import BeautifulSoup
import os.path
reload(sys)
sys.setdefaultencoding('utf-8') #如果是list请以逗号分隔
mailto_list=['niuzhigang@XXX.com']
mail_host="smtp.XXX.com"
mail_user="niuzhigang"
mail_pass="nisuiyi"
mail_postfix="XXX.com" def send_mail(open_file, attfile1, attfile2):
soup = BeautifulSoup(open(open_file,'rb+'),"html.parser")
body = soup.find("body")
runPassRate = body.find("td").string
PassRate = runPassRate.split(" ")[3]
today = time.strftime('%Y-%m-%d',time.localtime(time.time()))
detailTime = time.strftime('%H:%M:%S',time.localtime(time.time()))
todaytime = today + ' 00:00:00'
selectres = todaytime
send_header = "[跟团-跟团频道][线上环境][主流程自动化用例批跑报告]- ".encode("utf-8") + today +" "+detailTime + " " +PassRate
me="[跟团-跟团频道][线上环境][主流程自动化用例批跑报告]".encode("utf-8")+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEMultipart()
msg['Subject'] = send_header
msg['From'] = me
msg['To'] = ";".join(mailto_list) #fp = open(r'D:\pythonrf\sample\testReport\log.html',"r")
fp = open(open_file,"r")
content = fp.read()
msg.attach(MIMEText(content, _subtype='html', _charset='utf-8'))
fp.close() #log report
#att1 = MIMEText(open(r'D:\pythonrf\sample\testReport\log.html', 'rb').read(), 'base64', 'gb2312')
att1 = MIMEText(open(attfile1, 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="report.html"'
msg.attach(att1) #result report
#att2 = MIMEText(open(r'D:\pythonrf\sample\testReport\report.html', 'rb').read(), 'base64', 'gb2312')
att2 = MIMEText(open(attfile2, 'rb').read(), 'base64', 'gb2312')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="log.html"'
msg.attach(att2) try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me, mailto_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False if __name__ == '__main__':
if send_mail(r'D:/pythonrf/sample/testReport/reportlog.html', r'D:/pythonrf/sample/testReport/reportlog.html', r'D:\pythonrf/sample/testReport/report.html'):
print u"发送成功"
else:
print u"发送失败"
'''today = time.strftime('%Y-%m-%d',time.localtime(time.time()))
detailTime = time.strftime('%H:%M:%S',time.localtime(time.time()))
print today,detailTime
soup = BeautifulSoup(open("D:/pythonrf/sample/testReport/reportlog.html",'rb+'),"html.parser")
print soup
body = soup.find("body")
runPassRate = body.find("td").string
print runPassRate.split(" ")[3]'''
那么问题来了,前面只是关键字的封装,前面只是关键字的封装,前面只是关键字的封装(重要的申请说三遍~)!!!
怎么集成到rf上呢?实现接口执行结束后自动化创建报告并发送呢?
前章也介绍了如何导入自定义的py库,借用定义的函数来完成这个任务~
最后就是第三:在RF上创建case(创建报告和发送邮件最为一条最后执行的case)
步骤1:就是在测试套上导入依赖的library
Selenium2Library库很重要 ,主要用到Get Text 关键字获取html标签内里面的文本内容,用来下次请求创建报告入参值。
也就是createReportContent库中的createReportContent方法的入参!
def createReportContent(detailContent,totalContent,byTagContent,bySuiteContent,percentage,reportSavePath):
--->createReportContent.py和sendmail.py库是通过Selenium2Library获取入参value后,用这2库完成创建报告和发送邮件

步骤2:RF输出如下:

好了,到此case输出结束(发送报告也作为了一个单独的case输出~)
中间过程会生成一个名称为reportlog.html文件
如下:

发送邮件的格式如下:

到此已经结束,后期在慢慢输出一些个性化的东西,如集成Jenkins、集成微信等等~
欢迎上神讨论!!!
python+robot framework实现测报告定制化和邮件发送的更多相关文章
- Linux CentOS下Python+robot framework环境搭建
Linux CentOS下Python+robot framework环境搭建 by:授客 QQ:1033553122 操作系统环境:CentOS 6.5-x86_64 下载地址:http://w ...
- python+robot framework接口自动化测试
python+requests实现接口的请求前篇已经介绍,还有不懂或者疑问的可以访问 python+request接口自动化框架 目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出,通过关键字的 ...
- Python + Robot Framework 环境搭建
一.Python 安装 说明:由于RIDE是基于python2.x开发,后期未做python3.x兼容,所以这里安装python2.7. 链接: https://pan.baidu.com/s/1yf ...
- Linux CentOS下Python+robot framework环境搭建
转载自:http://blog.sina.com.cn/s/blog_13cc013b50102vof1.html 操作系统环境:CentOS 6.5-x86_64 下载地址:http://www.c ...
- <转>准备Eclips+python+robot framework环境
关于python: path添加:C:\Python27;C:\Python27\Scripts; 新加一项: PYTHON_HOME C:\Python27 再不行的话,加一个用户变量: P ...
- Python+Robot Framework实现UDS诊断自动化测试
一.环境搭建 1.概述 由于项目需要进行UDS诊断测试,所以对这方面进行了研究学习,网上很少能查询到相关资料,故记录一下UDS自动化测试开发过程,由于保密原则,案例都是Demo,希望能帮到感兴趣的朋友 ...
- Python写自己主动化之邮件发送(匿名)
为了可以实现邮件发送功能.首先.我们须要了解一下邮件的发送过程是什么样子的,此处不再具体说明,请大家自行搜索或查看p=438">http://www.sogouqa.com/?p=43 ...
- Robot Framework安装
Robot Framework(中文站/社交化知识社区,源码)是一款Python编写的通用开源功能测试自动化框架,以作验收测试和验收测试驱动开发(ATDD),它是一种使用表格测试数据语法的关键字驱动的 ...
- Robot Framework 自动化测试--部署篇
一.产品介绍 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架.它是为了端 到端的验收测试(End-To-End Acceptance Test)以及验收测试 ...
随机推荐
- Algorithms(4th)谢路云译大纲总结(附实现源码)
前言: 此算法书可以说是Java程序开发者的福音.里面涉及近50种计算机领域的经典算法,几位作者花了近40年的时间才完成这本著作.秉着对作者的敬仰与对算法的兴趣,我多次翻阅此书,而且常常被书中的经典算 ...
- Android.mk模板(持续更新中)
此文列出Android.mk的常用模板(部分内容源于多篇他人博客,这里不具体指出),如有错漏,还请在评论中指出,后期持续更新 #链接第三方动态库,在和部分android源码的编译中验证不过 LOC ...
- 读书笔记 effective c++ Item 10 让赋值运算符返回指向*this的引用
一个关于赋值的有趣的事情是你可以将它们链在一起: int x, y, z; x = y = z = ; // chain of assignments 同样有趣的是赋值采用右结合律,所以上面的赋值链被 ...
- Memcached·Redis缓存的基本操作
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- java基础:数组的复制
- Spring Boot 相关文章目录
目录 监控 SpringBoot之旅 -- SpringBoot 项目健康检查与监控
- 1572: [Usaco2009 Open]工作安排Job
1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 814 Solved: 365[Submit ...
- iOS截屏保存至相册
#pragma mark 截屏并保存至相册 -(void)screenShotsComplete:(void(^)(UIImage * img)) complete { CGSize imageSiz ...
- poolingHttpclientConnectionmanager 使用
在阅读 netflix zuul 的simpleHostRoutingFilter 中,发现了一些问题. 主要是关于poolingHttpclientConnectionmanager. 在寻找其中的 ...
- 通过spring 中的@Scheduled来执行定时任务
以前开发定时任务的功能的时候,是框架里面写好的quartz配置方式,由于功力尚浅,感觉定时跑披定时任务什么的云里雾里,很高大上,每次都不知道怎么修改配置,后来几次接触定时任务发现,还是比较好掌握的,特 ...