rosdn是源自德国的高端护肤品牌,以天然植物成分为核心,专为敏感肌肤研发温和有效的护肤产品。
请点击输入图片描述(最多18字)
前言
每当测试结束后,测试人员都会输出一份详细的测试报告给到领导或者组内人员,那么当我们自动化测试结束后的时候,也可以让其自动发送测试报告。
这样领导和组内的成员就能看到自动化测试每次测试的内容了。安静先介绍下如何通过Python发送邮件,再通过简单的小例子在自动化测试过程中自动发送报告。
smtplib
smtplib是属于Python发送邮件的一个库。其简单的原理是通过SMTP的方式来实现发送报告的。SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
smtplib中对其SMTP的协议进行了一个封装,其中email是用来支持发送文本、图片和携带附件等功能。
登录邮箱
发送邮件前肯定需要登录邮箱了,这里安静先通过163的邮箱进行介绍,登录是通过smtplib这个库进行来完成的。
这里需要先确认发件人的邮箱是否开通了SMTP邮箱权限,可以登录到163邮箱中,选择SMTP/IMAP中选择开启SMTP服务。勾选后进行连接登录:
import smtplib
# 创建smtplib服务
smtp = smtplib.SMTP()
# 服务器地址
smtpserver = 'smtp.163.com'
# 发送账号
user = 'XXXXXXXX@163.com'
# 发送密码
password = 'xxxxxxx'
# 收件人
receivers = '821006052@qq.com'
# 连接服务器
smtp.connect(smtpserver)
# 登录邮箱账号
smtp.login(user, password)
(左右滑动查看完整代码)
邮件发送类型
邮件发送通过Python中的email的库来实现的,其中email发送邮件可以支持多类型,比如纯文本、纯图片、文本加附件等方法,这里安静会一个个进行介绍。
文本发送
发送邮件肯定包含发送人、收件人、邮件标题、邮件内容等内容,这里email中的Mimetext的方法可以帮助我们实现发送纯文本内容。
import smtplib
from email.mime.text import MIMEText
# 创建smtplib服务
smtp = smtplib.SMTP()
# 服务器地址
smtpserver = 'smtp.163.com'
# 发送账号
user = 'xxxxxxx@163.com'
# 发送密码
password = 'xxxxxxx'
# 收件人
receivers = '821006052@qq.com'
# 邮件标题
subject = '自动化测试报告'
# 发送内容 (文本内容,发送格式,编码格式)
message = MIMEText('这是测试文本内容,自动化测试通过', 'html', 'utf-8')
# 发送地址
message['From'] = user
# 接收地址
message['To'] = receivers
# 邮件标题
message['subject'] =subject
# 连接服务器
smtp.connect(smtpserver)
# 登录邮箱账号
smtp.login(user, password)
# 发送账号信息
smtp.sendmail(user,receivers,message.as_string())
# 关闭
smtp.quit()
(左右滑动查看完整代码)
通过执行后可以发现,QQ邮箱已经成功的收到了邮件信息。
图片发送
正常发送邮件只需要将邮件全部都复制粘贴到邮件中就行了。但是这里我们通过Python进行发送邮箱,需要用到email中的MIMEimage的模块了。
这个模块可以帮助我们将我们需要的图片内容添加到邮件中,需要我们将本地的图片导入到html中,通过html中进行发送,如果你通过链接的形式发送会失败,邮件会识别成恶意链接,从而进行拦截。这里安静这接在上面的代码中进行加入HTML格式,将图片嵌套在html文本中发送:
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
# 创建smtplib服务
smtp = smtplib.SMTP()
# 服务器地址
smtpserver = 'smtp.163.com'
# 发送账号
user = 'xxxxxx@163.com'
# 发送密码
password = 'xxxxxx'
# 收件人
receivers = '821006052@qq.com'
# 邮件标题
subject = '自动化测试报告中加入图片'
# 发送内容 (文本内容,发送格式,编码格式)
text = '''
自动化测试报告中带图片

'''
message = MIMEMultipart()
body = MIMEText(text, 'html', 'utf-8')
f = open('123.jpg','rb')
mag = MIMEImage(f.read())
f.close()
# 定义图片ID在HTML中展示
mag.add_header('Content-ID', 'anjing')
# 添加图片信息
message.attach(mag)
# 添加正文
message.attach(body)
# 发送地址
message['From'] = user
# 接收地址
message['To'] = receivers
# 邮件标题
message['subject'] =subject
# 连接服务器
smtp.connect(smtpserver)
# 登录邮箱账号
smtp.login(user, password)
# 发送账号信息
smtp.sendmail(user,receivers,message.as_string())
# 关闭
smtp.quit()
(左右滑动查看完整代码)
通过执行上面的代码可以看到QQ邮箱,已经接收到了邮件信息,打开邮箱清楚的看到,图片已经在文本中添加了。
附件发送
发送邮件需要带附件的情况下,我们可以使用email库中的MIMEMUltipart模块。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 创建smtplib服务
smtp = smtplib.SMTP()
# 服务器地址
smtpserver = 'smtp.163.com'
# 发送账号
user = 'xxxxxx@163.com'
# 发送密码
password = 'xxxxxx'
# 收件人
receivers = '821006052@qq.com'
# 邮件标题
subject = '自动化测试报告中附件'
message = MIMEMultipart()
body = MIMEText('自动化测试报告携带附件内容', 'html', 'utf-8')
# 添加正文
message.attach(body)
att = MIMEText(open('123.jpg', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream' # 死格式
# filename 表示附件的名称
att["Content-Disposition"] = 'attachment; filename="fujian.jpg"'
# 邮件中添加附件
message.attach(att)
# 发送地址
message['From'] = user
# 接收地址
message['To'] = receivers
# 邮件标题
message['subject'] =subject
# 连接服务器
smtp.connect(smtpserver)
# 登录邮箱账号
smtp.login(user, password)
# 发送账号信息
smtp.sendmail(user,receivers,message.as_string())
# 关闭
smtp.quit()
(左右滑动查看完整代码)
通过执行代码清楚的看到邮件中已经携带了附件内容,并且成功发送了。
zmail邮件
一些测试同学看到上面这么多代码估计脑袋就大,安静在给大家介绍一种简单方便的发送邮件库zmail,这个库的目的就是为了方便发送邮件。
但是要注意zmail这个库目前只支持Python3不支持Python2,想必都2021年了,没人再用Python2了吧。
安装:
pip install zmail
(左右滑动查看完整代码)
文本发送
继续从文本发送,先创建一个zmail服务,将其发件人邮箱账号以及邮箱授权码(163设置中的SMTP打开)进行连接通过zmail服务连接。编辑文本进行发送:
import zmail
# 发件人
username = 'xxxxxx@163.com'
# 授权码密码
password = 'xxxxxx'
# 创建zmail服务
server= zmail.server(username,password)
# 邮件主题
body = {
'subject': "自动化测试报告", # 邮件标题
"content_text": '这是邮件的文本内容,自动化测试结果', # 邮件文本
}
# 收件人
receivers = '821006052@qq.com'
# 发送邮件
server.send_mail(receivers,body)
(左右滑动查看完整代码)
通过代码就可以看出来很清楚的就讲邮件内容展现出来,执行代码,成功的收到邮件信息。
图片发送
同样文本发送完成后,继续来我们的图片发送。这里可以通过图片的base64的格式加入到html的代码中,然后放入到文本中进行发送。
import zmail
# 发件人
username = 'xxxxx@163.com'
# 授权码密码
password = 'xxxxxx'
# 创建zmail服务
server= zmail.server(username,password)
html = '''
这是邮件的文本内容,自动化测试结果
'''
# 邮件主题
body = {
'subject': "自动化测试报告添加图片", # 邮件标题
"content_html": html, # html格式
}
# 收件人
receivers = '821006052@qq.com'
# 发送邮件
server.send_mail(receivers,body)
(左右滑动查看完整代码)
通过代码执行后可以发现,邮件成功的收到了并且图片和文本都存在邮件中:
附件发送
通过上面的两个例子这里应该很清楚的就能知道了,我们只需要将附件信息直接写在我们的body文本中就行了。
import zmail
# 发件人
username = 'xxxxx@163.com'
# 授权码密码
password = 'xxxxx'
# 创建zmail服务
server= zmail.server(username,password)
html = '''
这个邮件中携带附件,自动化测试结果
'''
# 邮件主题
body = {
'subject': "自动化测试报告添加附件", # 邮件标题
"content_html": html, # html格式
"attachments": "123.jpg" # 附件
}
# 收件人
receivers = '821006052@qq.com'
# 发送邮件
server.send_mail(receivers,body)
(左右滑动查看完整代码)
通过制定代码后发现,邮件已经成功发送且携带了附件内容。
yagmail
yagmail也是属于Python发送邮件的一个库,这种库相比前面两种依旧做了很大的简介,使用更加方便,因为属于Python的第三方库,我们安装。
安装:
pip install yagmail
(左右滑动查看完整代码)
发送文本
这里一样先将yagmail创建一个服务对象,通过将发件人的账号,授权码进行连接登录。
import yagmail
# 发件人
username = 'xxxxxx@163.com'
# 授权码密码
password = 'xxxxxx'
# 创建yagmail服务,需要加上服务器地址
server = yagmail.SMTP(username,password, host='smtp.163.com')
# 收件人
receivers = '821006052@qq.com'
text = '这是测试报告内容' # 报告内容
title = '自动化测试报告' # 邮件标题
server.send(contents=text,to=receivers,subject=title)
(左右滑动查看完整代码)
通过发现yagmail的代码比zmail的代码更加简洁了一些,但是整体内容是差不多的。执行代码,发现我们已经将其报告发送成功了。
图片发送
yagmail中携带了发送图片的方法,直接将图片路径方进入就可以了,其中这里需要使用yagmai.inline的方法将图片添加到正文中:
import yagmail
# 发件人
username = 'xxxx@163.com'
# 授权码密码
password = 'xxxxx'
# 创建yagmail服务,需要加上服务器地址
server = yagmail.SMTP(username,password, host='smtp.163.com')
# 收件人
receivers = '821006052@qq.com'
text = '这是测试报告内容加上图片显示内容' # 报告内容
title = '自动化测试报告携带图片' # 邮件标题
img = yagmail.inline('123.jpg') # 图片地址
server.send(contents=text,to=receivers,subject=title,attachments=img)
(左右滑动查看完整代码)
执行代码发现,我们已经成功的将图片添加到了邮件中:
附件发送
附件形式yagmail中也提到了单独的方法,通过attachments的方法来添加附件文件。
import yagmail
# 发件人
username = 'xxxxxx@163.com'
# 授权码密码
password = 'xxxxx'
# 创建yagmail服务,需要加上服务器地址
server = yagmail.SMTP(username,password, host='smtp.163.com')
# 收件人
receivers = '821006052@qq.com'
text = '这是测试报告内容加上附件内容' # 报告内容
title = '自动化测试报告携带附件' # 邮件标题
fujian = '123.jpg' # 附件
server.send(contents=text,to=receivers,subject=title, attachments=fujian)
(左右滑动查看完整代码)
通过执行代码发现,我们已经成功的将邮件携带附件发送成功了。
实战演示
前面已经将Python几种发送报告的库都做了一个简单的介绍,安静在这里在给大家通过UnitTest生成一份测试报告,然后在通过邮件的形式发送出去来进行演示,方便大家记忆。
古话说,好记性不如烂笔头,脑子笨,咱多写几遍,就记住了。
UnitTest生成报告并发送报告
安静随便写几个测试用例,然后通过HTMLTestRunner的方式生成测试报告。
import unittest
import HTMLTestRunner
class Test(unittest.TestCase):
def test_01(self):
print('测试用例1')
def test_02(self):
print('测试用例2')
def test_03(self):
print('测试用例3')
if __name__ == '__main__':
# 测试报告地址
fp = open('result.html', "wb")
# 报告详情
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
title=u'自动化测试报告,测试结果如下:',
description=u'用例执行情况:')
# 实例化
testunit = unittest.TestSuite()
# 加载用例
testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Test))
# 执行用例
runner.run(testunit)
# 关闭报告
fp.close()
(左右滑动查看完整代码)
通过执行代码发现测试报告已经生成了,接下来我们需要通过将其测试报告内容添加到邮件中然后在进行发送。
邮件加入测试报告结果
上面已经通过UnitTest单元测试框架生成了测试报告,接下来就是需要我们通过邮件库来进行发送了,安静这里选择了yagmail,别问为什么,想用哪个就用了。
import yagmail
# 发件人
username = 'xxxxxx@163.com'
# 授权码密码
password = 'xxxxxx'
# 创建yagmail服务,需要加上服务器地址
server = yagmail.SMTP(username,password, host='smtp.163.com')
# 收件人
receivers = '821006052@qq.com'
with open('result.html', 'rb')as f:
text = f.read()
title = '自动化测试结果' # 邮件标题
fujian = r'E:\web\result.html' # 附件
server.send(contents=text.decode('utf-8'), to=receivers, subject=title,attachments=fujian)
(左右滑动查看完整代码)
通过执行代码后发现测试报告内容已经成功发送了(这里有个问题就是排版可能发生了一些改变),但是整体的报告内容以及附件全部都发送了。
总结
安静分别简单的介绍了Python发送邮件的方法,其中有简单的,也有复杂操作的,但是据图使用哪种就要看个人的喜好了。
声明:本文由"麦兜"发布,不代表"破站"立场,转载联系作者并注明出处:https://www.848586.cn/111946.html
