简介
  上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件。发送带附件的需要导入另外一个模块 MIMEMultipart。还有就是测

试负责人不止一个人,需要将测试报告发给多个人,也就是多个收件人。这篇主要是围绕这两个主题进行讲解的。

大致思路
(一)带有附件发送邮件
1、导入模块 MIMEMultipart

from email.mime.multipart import MIMEMultipart
2、先读取要发送文件的内容,file_new 是测试报告路径的参数名

3、下图红色框框 file_name 参数是发送的附件重新命名


4、file_new 是测试报告路径的参数名,发送邮件是将其传入


5、运行结果


6、查看收件箱


(二)发送给多个收件人
上面都是发给一个收件人,那么如何一次发给多个收件人呢?其实是非常简单的,只需改两个小地方,即可,从这里就可以看出python的强大之处。

1、源码

2、仿造修改

3、运行结果


4、收件箱查看

公司邮箱
QQ邮箱


参考代码

coding=utf-8

#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

#2.注释:包括记录创建时间,创建人,项目名称。
‘’’
Created on 2019-5-7
@author: 北京-宏哥
Project:学习和使用将测试报告通过邮件发出去且邮件带有附件
‘’’
#3.导入unittest模块
import unittest
import os
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import smtplib
#4.编写测试用例和断言
def all_case():
# 待执行用例的目录
#case_dir = “C:\Users\DELL\PycharmProjects\honggetest\case”
case_dir = os.path.join(os.getcwd(), “case”)
testcase = unittest.TestSuite()
discover = unittest.defaultTestLoader.discover(case_dir,
pattern=“test*.py”,
top_level_dir=None)
# #discover方法筛选出用例,循环添加到测试套件中
# for test_suit in discover:
# for test_case in test_suit:
# #添加用力到testcase
# testcase.addTests(test_case)
# print(testcase)
testcase.addTests(discover) # 直接加载 discover 可以兼容python2和3
print(testcase)
return testcase

====定义发送邮件

def send_mail(file_new):
#-----------1.跟发件相关的参数------
smtpserver = ‘smtp.mxhichina.com’ #发件服务器
port = 0 #端口
username = ‘nXXX@ceXx.cn’ #发件箱用户名
password = ‘ceXXx@@123’ #发件箱密码
sender = ‘XXly@cedex.cn’ #发件人邮箱
receiver = [‘hongge@com.cn’,‘1918991791@qq.com’] #收件人邮箱
# ----------2.编辑邮件的内容------
#读文件
f = open(file_new, ‘rb’)
mail_body = f.read()
f.close()
# 邮件正文是MIMEText
body = MIMEText(mail_body, ‘html’, ‘utf-8’)
# 邮件对象
msg = MIMEMultipart()
msg[‘Subject’] = Header(“自动化测试报告”, ‘utf-8’).encode()#主题
msg[‘From’] = Header(u’测试机 <%s>’%sender) #发件人
msg[‘To’] = Header(u’测试负责人 <%s>’%receiver) #收件人
msg[‘To’] = ‘;’.join(receiver)
msg[‘date’] = time.strftime("%a,%d %b %Y %H:%M:%S %z")
msg.attach(body)
# 附件
att = MIMEText(mail_body, “base64”, “utf-8”)
att[“Content-Type”] = “application/octet-stream”
att[“Content-Disposition”] = ‘attachment; filename=“test_report.html”’
msg.attach(att)
# ----------3.发送邮件------
try:
smtp = smtplib.SMTP()
smtp.connect(smtpserver) # 连服务器
smtp.login(sender, password)
except:
smtp = smtplib.SMTP_SSL(smtpserver, port)
smtp.login(sender, password) # 登录
smtp.sendmail(sender, receiver, msg.as_string()) # 发送
smtp.quit()
# #发送邮件
# smtp = smtplib.SMTP()
# smtp.connect(‘smtp.mxhichina.com’) # 邮箱服务器
# smtp.login(username, password) # 登录邮箱
# smtp.sendmail(sender, receiver, msg.as_string()) # 发送者和接收者
# smtp.quit()
print(“邮件已发出!注意查收。”)

查找测试目录,找到最新生成的测试报告文件

def new_report(test_report):
lists = os.listdir(test_report) # 列出目录的下所有文件和文件夹保存到lists
lists.sort(key=lambda fn: os.path.getmtime(test_report + “\” + fn)) # 按时间排序
file_new = os.path.join(test_report, lists[-1]) # 获取最新的文件保存到file_new
print(file_new)
return file_new
if name == “main”:
# 返回实例
runner = unittest.TextTestRunner()
#导入第三方模块HTMLTestRunner
import HTMLTestReportCN
import time
# 获取当前时间,这样便于下面的使用。
now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))
#保存生成报告的路径
report_path = “C:\Users\DELL\PycharmProjects\honggetest\report\”+now+"_result.html"
fp = open(report_path,‘wb’)
runner = HTMLTestReportCN.HTMLTestRunner(stream=fp,
title=u"这是我的自动化测试用例",
description=u"用例执行情况",
verbosity = 2
)
# run 所有用例
runner.run(all_case())
#关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。
fp.close()
#测试报告文件夹
test_path = “C:\Users\DELL\PycharmProjects\honggetest\report\”
new_report = new_report(test_path)
send_mail(new_report) # 发送测试报告

小结
1、第二处我注释掉也可以发出去,两个收件人可以收到邮件,但是如果这样的话,公司邮箱收件人只显示一个收件人,QQ邮箱显示两个收件人。

公司邮箱 PS:如果将红色框上边的注释掉,下边的不注释,就可以看到两个收件人的邮箱


以下是个人愚见,如果不对请指出


以上是导入的包,通过email和smtplib实现发邮件。

折腾好久,发现是这样:email中收件人和sendmail中的收件人是没啥联系的。


sendmail中收件人,它的格式应该为list。这个为实际的收件人地址。

而msg[‘To’] 格式是字符串(str)。这个只是为了邮件中打印出来而已。

sendmail查源码,python/lib/smtplib.py大概690行左右,或者搜索tolist。

2、在使用python添加附件发送时报错:Cannot attach additional subparts to non-multipart/*

查询得知,错误的原因在于缺少这行代码:

msg = MIMEMultipart()

将这行加上:msg = MIMEMultipart() 即可

邮件收不到的几种原因
1、Subject 和正文内容不要用 hello、hehe、test 等单词

2、from(发件人)和 to(收件人)不要为空,(要不然会被认为是垃圾邮件)

3、找不到的话,先看下垃圾信箱,是不是跑到垃圾箱了

4、如果前几次可以收到,后来收不到了,需改下 subject 内容(因为每次都是一个 subject,系统也会拒收的,把 subject 内容设置为动态的是最好的)

5、部分邮箱是 ssl 加密了的,所以无法发送,如:qq 邮箱(用授权码去登录)

6、要是按照上面的步骤来报错了,说明代码抄错了,多检查几次。

python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)相关推荐

  1. python接口自动化(十八)--重定向(Location)(详解)

    简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url.URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作.但是自己又不希望通过主域 ...

  2. python接口自动化(十一)--发送post【data】(详解)

    简介 前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data ...

  3. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)–发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先了 ...

  4. python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)

    简介 前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,我们也不能放在那里不管了,这样即使你报告在漂亮,领导也看不到.因此如果想向领导汇报工作,不仅需要提供更直观的测试报告. ...

  5. Python接口自动化响应结果json格式化输出+断言响应结果中指定的属性值+其他

    一.Python字典 二.Python元组 三.接口响应值转为字典格式 四.接口响应值以json格式输出并添加到allure报告中 五.断言响应结果中指定的属性值 六.TypeError: strin ...

  6. python接口自动化(三十九)- logger 日志 - 上(超详解)

    简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP, ...

  7. python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)

    简介 本篇总结了 QQ (SSL)邮箱和 163(非SSL) 邮箱发送邮件,专治各种不行,总之看完这篇以后麻麻再也不用担心我的邮件收不到了.以下代码兼容 python2 和 python3,运行无异常 ...

  8. python接口自动化(十六)--参数关联接口后传(详解)

    简介 大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础.因此再在沙场实例演练一下博客园的相关接口.我们用自动化发随笔之后,要想接着对这篇随笔操 ...

  9. python接口自动化(十五)--参数关联接口(详解)

    简介 我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jen ...

最新文章

  1. 22 岁专访库克、B 站 3 天涨粉百万,他将毕设树莓派扫描仪升级,繁星散落在校空!...
  2. spring3.x企业应用开发实战 pdf_吃透Spring全家桶:Spring源码+SpringBoot+SpringCloud实战...
  3. centos7 下安装mysql5.7
  4. spring cloud构建互联网分布式微服务云平台-Ribbon
  5. jtable mysql数据库_使用MySQL数据库语法错误填充jTable
  6. Office文档模型深入---Outlook文档模型与开发实战(1)
  7. Visual Studio Code
  8. 2021Q1美妆行业季度观察报告
  9. 随想录(用python开发网站)
  10. Java Servlet Filter
  11. 韩顺平 linux视频教程
  12. 自己动手制作USB启动盘
  13. 基于单片机的表决器(七人)系统设计(#0496)
  14. 论文笔记:PPT: Pre-trained Prompt Tuning for Few-shot Learning
  15. Java多线程并发面试
  16. PHP - 性能测试工具
  17. 基因组测序为什么没完没了?
  18. linux系统的6000端口是什么,3种关闭linux系统端口方法
  19. 52o1314小符号_我要1314数字的特殊符号。数字很小的那种
  20. 思路如此简单的购买水果问题

热门文章

  1. 计算机的配置以及简单的操作
  2. navicat premium相关应用(将oracle数据库迁移到mysql等)
  3. 罗佳琪的第三次预备作业——虚拟机的安装及Linux的初步学习
  4. CentOS中TFTP配置
  5. LeetCode-Linked List Cycle II
  6. oracle 数据类型详解---日期型(转载)
  7. 浅谈微博营销如何吸引流量
  8. 解决VS+QT无法生成moc文件的问题
  9. 【报告分享】2020年抖音美妆直播报告.pdf(附下载链接)
  10. 速成pytorch学习——3天自动微分机制