邮件发送

每次自动化测试需要一定的时间,时间却又不固定,所以不知道什么时候完成了,什么时候还没跑完,那么就需要一个东西来提醒我们已经运行完了,快点去看测试结果,至于提醒的方式是怎么样的,可以根据自己的情况来看,发邮件呢还是发短信呢还是call电话呢,还是微信或者钉钉呢,都可以,不过普遍是邮件吧,邮件还可以带附件信息,所以更方便,承载的信息更多

其实可以再申请一个公司的AutoTest的邮箱号,但是难得麻烦了,所以用的另外一个qq号的邮箱来做为发送邮箱号,为了不显示出了我的qq号码,所以在qq邮箱中设置申请一个工作的邮箱名,这样就不是"号码@qq.com"这种格式了,变成了foxmail的邮箱号了

邮箱在第三方登录的时候,密码使用的都是授权码,所以我们开通各种服务,生成一个授权码

    测试完成后,会生成一个测试报告,这测试报告中包含了,失败成功用例名,总数,成功数,失败数,日志等详细信息,我需要把报告中的这些信息全部提取出来,然后自己组装成邮件发送的内容信息,测试报告是html的,所以信息的提取也可以使用之前说的xpath的方式来提取,我使用的是re来直接匹配信息,然后加上各种换行符和tab符,组成一串信息来发送
   def read_result(report):try:result = []with open('C:\Auto-Test\Report\\%s' % report,'r',encoding='utf-8') as f:data = f.read()top_info = re.findall(r'(?:"testAll":\s)(\d{1,4})|"testFail":\s(\d{1,4})|"testPass":\s(\d{1,4})|"beginTime":\s"(\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2})"|"totalTime":\s"(\d{1,4})s"',data)name_info = re.findall(r'"description": "(.*)"',data)result_info = re.findall(r'"status": "(.*)"',data)info = list(zip(name_info,result_info))for i in top_info:for t in i:if t!='':result.append(t)email_info = '测试已完成,简要如下:\n\t用例总数:%s\n\t成功数:%s\n\t失败数:%s\n\t开始时间:%s\n\t总耗时:%s秒\n\t成功率:%f\n\t失败率:%f\n\n失败如下:'%(result[1],result[0],result[2],result[3],result[4],float(result[0])/float(result[1])*100,float(result[2])/float(result[1])*100)index = 1for i in info:if i[1]=='失败':email_info = email_info + '\n\t(%d).%s\t\t'%(index,i[0])index+=1index = 1email_info = email_info + '\n\n成功如下:'for i in info:if i[1]=='成功':email_info = email_info + '\n\t(%d).%s\t\t'%(index,i[0])index+=1return email_infoexcept Exception as e:logger.error('ERROR:%s'%e)

最终输出的信息是这样子的,包含简要信息,其实还可以加入测试的版本信息,但是我需要获取多个设备的信息,暂时就没有写了,邮件主要起个提示作用和简要信息的输出和详细日志附件的输出,工作使用的是钉钉,那我们将邮件接收则设置为钉钉的邮箱
@dingwalk.com,每当运行完成后,钉钉收到邮件会直接闪烁的方式提醒,感觉很方便
本来想使用html的方式把信息直接嵌入在邮件内容中,以网页的方式在邮件中显示,但是钉钉邮件中的信息都做的处理,便签显示出来都是标签名称,没有生效,所以还是自己组串了

使用python来发送带有附件的邮件,[‘xxxxxx@dingtalk.com’],可以是多个邮件号码,那么则发送给多个邮箱

   def send_report_email(info,receivers,report_name):sender = '@foxmail.com'  # 发送方的邮箱my_pass = ''  # 发送方的密码def send(recv):message = MIMEMultipart()message['From'] = Header(sender, 'utf-8')message['To'] = Header(recv, 'utf-8')subject = 'AutoTest_Report'message['Subject'] = Header(subject, 'utf-8')message.attach(MIMEText(info, 'plain', 'utf-8'))att1 = MIMEText(open('C:\Auto-Test\Report\\%s' % report_name, 'rb').read(), 'base64', 'utf-8')att1["Content-Type"] = 'application/octet-stream'att1["Content-Disposition"] = 'attachment; filename="%s"' % report_namemessage.attach(att1)try:smtpObj = smtplib.SMTP_SSL("smtp.qq.com", 465)smtpObj.login(sender, my_pass)smtpObj.sendmail(sender, recv, message.as_string())logger.info("测试已完成!    发送邮件到%s"%recv)except smtplib.SMTPException as e:logger.error("Error:%s 无法发送邮件" % e)for i in receivers:send(i)
Tool.send_report_email(info,['xxxxxx@dingtalk.com'],'Fgap_Report_quick_check_2020-09-04-17-36-53.html')

几种邮件的格式发送方法

1.发送不带附件的纯文本信息的邮件

#coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddrmy_sender='465xxxxxx@qq.com'    # 发件人邮箱账号
my_pass = '这里使用的是qq邮箱生成的密码'              # 发件人邮箱密码
my_user=['131xxxx@qq.com','465xxxx@qq.com']    # 收件人邮箱账号
def mail():ret=Truetry:msg=MIMEText('填写邮件内容','plain','utf-8')msg['From']=formataddr(["zss",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号msg['To']=formataddr(["zw",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号msg['Subject']="这是一封测试邮件"                # 邮件的主题,也可以说是标题server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP_SSL服务器,端口是465server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码server.sendmail(my_sender,my_user,msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件server.quit()  # 关闭连接except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=Falseret=Falsereturn ret
if __name__ == '__main__':ret=mail()if ret:print("邮件发送成功")else:print("邮件发送失败")

2.发送带附件的纯文本信息的邮件

#coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Headersender = '4xxxxxx@qq.com'  #发送方的邮箱
my_pass = '这里使用的是qq邮箱生成的密码'   #发送方的密码
receivers = ['xxxxxxxx@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱,列表的形式才存储多个接收方#创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("收件人名", 'utf-8')#收件人的姓名
message['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'  #邮件的标题
message['Subject'] = Header(subject, 'utf-8')#邮件正文内容
message.attach(MIMEText('这是一个带有附件的邮件发送测试……', 'plain', 'utf-8'))att1 = MIMEText(open('zss.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'att1["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att1)#构造附件2,传送当前目录下的 runoob.txt 文件
att2 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att2)try:smtpObj = smtplib.SMTP_SSL("smtp.qq.com", 465)smtpObj.login(sender, my_pass)smtpObj.sendmail(sender, receivers, message.as_string())print "邮件发送成功"
except smtplib.SMTPException:print "Error: 无法发送邮件"

3.发送html格式中带有图片的邮件

#coding:utf-8
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Headersender = '4xxxxxxx@qq.com'#发送方的邮箱
password = 'qgusxxxxx'  #发送方的密码
receivers = ['4xxxxx@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱msgRoot = MIMEMultipart('related')
msgRoot['From'] = Header("收件人名", 'utf-8')#收件人的姓名
msgRoot['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试' #邮件的标题
msgRoot['Subject'] = Header(subject, 'utf-8')msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative) #邮件正文内容 表示什么类型,html还是文本
#message.attach(MIMEText('这是一个带有附件的邮件发送测试……', 'plain', 'utf-8'))
#html的内容
mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.test.top">Test-one链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))fp = open('test.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)try:smtpObj = smtplib.SMTP_SSL('smtp.qq.com',465) #设置服务器smtpObj.login(sender,password)  #登陆smtpObj.sendmail(sender, receivers, msgRoot.as_string())#发送print "邮件发送成功"
except smtplib.SMTPException:print "Error: 无法发送邮件"

关注“码点小干货”公众号,一起分享一起交流各类信息技术和工具资源

愿你眼中总有光芒! - 愿你活成想要的样子!

SMTP模块的相关方法 方法 描述
SMTP.set_debuglevel(level) 设置输出debug调试信息,默认不输出
SMTP.docmd(cmd[, argstring]) 发送一个命令到SMTP服务器 SMTP.connect([host[,
port]]) 连接到指定的SMTP服务器 SMTP.helo([hostname]) 使用helo指令向SMTP服务器确认你的身份
SMTP.ehlo(hostname) 使用ehlo指令像ESMTP(SMTP扩展)确认你的身份
SMTP.ehlo_or_helo_if_needed() 如果在以前的会话连接中没有提供ehlo或者helo指令,这个方法会调用ehlo()或helo()
SMTP.has_extn(name) 判断指定名称是否在SMTP服务器上
SMTP.verify(address) 判断邮件地址是否在SMTP服务器上 SMTP.starttls([keyfile[,
certfile]]) 使SMTP连接运行在TLS模式,所有的SMTP指令都会被加密 SMTP.login(user,
password) 登录SMTP服务器 SMTP.sendmail(from_addr, to_addrs, msg,
mail_options=[], rcpt_options=[]) 发送邮件

from_addr:邮件发件人

to_addrs:邮件收件人

msg:发送消息

SMTP.quit() 关闭SMTP会话 SMTP.close() 关闭SMTP服务器连接

自动化测试之邮件发送相关推荐

  1. python自动化通过邮件发送测试结果

    ################# #单人发送文本文件 ################# import smtplib from email.mime.text import MIMEText fr ...

  2. 自动化测试之邮件模板

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>${E ...

  3. 无法用php smtp发送邮件. 您的服务器可能没有配置用此方法_补充:Web自动化邮件发送...

    前言      最近有小伙伴提醒,说还有邮件服务没有发文章,后面自己检查发现确实自己漏了,所以今天给大家补上. 首先web自动化可以自动生成报告,但是在实际工作中,最好能够将报告发送给指定的相关人员, ...

  4. 【jenkins】创建一个project基础配置、自动化邮件发送、pytest_terminal_summary收集结果

    [jenkins]创建一个project基础配置 一. 源码管理:以git仓库添加为例 二.Build Steps:以python为例 问题一:jenkins构件python脚本后,报告无法在jenk ...

  5. Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...

  6. Selenium+python怎么搭建自动化测试框架、执行自动化测试用例、生成自动化测试报告、发送测试报告邮件

    目录 一.项目结构介绍 1.mztestpro测试项目 2.bbs目录 3.test_case 二.编写公共模块 三.编写Page Object 四.编写测试用例 五.执行测试用例 小结: 本人在网上 ...

  7. java 发送邮件_Jenkins实现自动化邮件发送踩坑记录

    文章简介 本文分享Jenkins实现邮件发送,安装Jenkins可参考jenkins安装.写这篇文章,是在实际使用Jenkins过程中遇到这样一个问题,当每次Jenkins构建成功或者失败后,需要个人 ...

  8. 基于python的毕业论文邮箱收发系统_基于python语言的自动化邮件发送总结

    发邮件功能 有很多种,我目前 使用的是python的smptlib 模块提供的发邮件功能,可以使用里面的SMTP对象的sendmail方法发邮件. # -*- coding: utf-8 -*- '' ...

  9. 无法用php smtp发送邮件. 您的服务器可能没有配置用此方法_Web自动化测试:邮件发送测试报告...

    在我们运行完整个项目后,已经生成了 测试报告,一般自动化会在本地或者公司服务器上运行,那如何获取自动化测试的运行结果呢,此时就需要把测试结果以邮件的形式发送到邮箱,这样就可以在测试完成的第一时间知道测 ...

  10. python随机抽取人名_python实现艾宾浩斯背单词功能,实现自动提取单词、邮件发送,再也不用担心背单词啦...

    已经完成了利用python爬虫实现定时QQ邮箱推送英文文章,辅助学习英语的项目,索性就一口气利用python多做一些自动化辅助英语学习的项目,对自己的编程能力和英文水评也有一定的帮助,于是在两天的努 ...

最新文章

  1. 局域网组建与维护(1)
  2. Http Module 介绍(转)
  3. 行业观察丨激荡二十年——货代软件1999—2019
  4. 计算机休眠能降低硬件损耗,Win7居然会出现“失眠”——Win7无法休眠问题解析...
  5. orcl导入dmp语句_oracle中导入dmp数据注意事项
  6. php搜索文件名,PHP搜索文件且列出文件名的代码参考
  7. Web 服务器错误代码
  8. OpenProcess()函数
  9. Python3 XML解析
  10. 能源之星评级对数据中心IT设备的影响
  11. Netty高级进阶之基于Netty的Websocket开发网页聊天室
  12. 那个人路过了青春一阵子,却会在记忆里搁浅一辈子
  13. svchost.exe不停下载
  14. Linux设备模型之device_add
  15. js 屏蔽原生鼠标和键盘事件
  16. 从苏宁电器到卡巴斯基第35篇:我与卡巴斯基的邂逅(中)
  17. leetcode:1838. 最高频元素的频数【排序 + 前缀和 + 二分 + 思维】
  18. 会计学原理学习笔记——第一章——总论(1.5会计目标)
  19. CEAC 之《计算机应用助理工程师》1
  20. 淘宝迪士尼抢购脚本 无需修改代码 只需要修改抢购时间 附上安装教程

热门文章

  1. 动环监控系统的主要功能,动环监控系统的监控对象有哪些
  2. ecshop判断是手机访问还是web访问
  3. 香橙派借助语音模块实现语音刷抖音
  4. 连接mysql数据库error 2003_连接mysql数据库error 2003
  5. 糗事百科成人版段子爬虫实战
  6. 【设计模式】设计模式总览-----程序员的九阳神功
  7. 基于Python飞机票销售系统 毕业设计-附源码141432
  8. 用C语言写一个数字版的3阶魔方
  9. 数据结构:串(String)【详解】
  10. python文件重命名加日期_Python文件创建日期和Critiqu的重命名请求