SMTP自动发送邮件功能
我也是跟着各种博客一步一步搜索出来的,可能在设置邮箱的时候会有各种问题,请参考我的其他博客进行设置
https://blog.csdn.net/ly021499/article/details/82423019
https://blog.csdn.net/ly021499/article/details/80943030
以下代码集成了生成测试报告和自动发送邮件等功能,使用了新的测试报告模版,个人认为美观一点,另附下载链接
链接:https://pan.baidu.com/s/1kwh7nAdc-vC0NbEK4PfODA
提取码:j77w
#-*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import BSTestRunner # 注意此处我所使用的是BSTestRunner,博客附下载链接
import unittest
import time
import os
\'\'\'
_(\_/)
,((((^`\
(((( (6 \
,((((( , \
,,,_ ,((((( /"._ ,`,
((((\\ ,... ,(((( / `-.-\'
))) ;\' `"\'"\'""(((( (
((( / ((( \
)) | |
(( | . \' |
)) \ _ \' `t ,.\')
( | y;- -,-""\'"-.\ \/
) / ./ ) / `\ \
|./ ( ( / /\'
|| \\ //\'|
|| \\ _//\'||
|| )) |_/ ||
\_\ |_/ ||
`\'" \_\
`\'"
\'\'\'
# ✎﹏₯㎕﹍﹍ 定义发送邮件 ζั͡ޓއއއ๓º
def send_mail(new_file):
# 发信邮箱
sender = Sender
# 收信邮箱
receiver = Receiver
# 打开邮件
efile = open(new_file, \'rb\')
email_body = efile.read()
efile.close()
# 实例化一个带附件的示例
message = MIMEMultipart()
# 定义邮件正文内容
message.attach(MIMEText(email_body, _subtype=\'html\', _charset=\'utf-8\'))
# 定义抬头
message[\'From\'] = Sender
message[\'To\'] = Receiver
# 定义邮件主题
message[\'Subject\'] = EmailTitle
# 定义发送时间(不定义的可能有的邮件客户端会不显示发送时间)
message[\'date\'] = time.strftime(\'%a, %d %b %Y %H:%M:%S %z\')
att = MIMEText(email_body, _subtype=\'base64\', _charset=\'utf-8\')
# 构造附件,传送当前目录下的 test.txt 文件
att["Content-Type"] = \'application/octet-stream\'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att["Content-Disposition"] = \'attachment; filename=%s\' %AttName
message.attach(att)
# 连接SMTP服务器
smtp = smtplib.SMTP()
smtp.connect(SMTP)
# 用户名密码
smtp.login(Sender, EmailPassword)
smtp.sendmail(sender, receiver, message.as_string())
smtp.quit()
print(\'✎biubiubiu ₯㎕~~~ 导弹发射成功,颤抖吧!愚蠢的人类 ޓއއއ \')
# ✎﹏₯㎕﹍﹍ 查找最新生成的测试报告文件 ζั͡ޓއއއ๓º
def send_report(testreport):
result_dir = testreport
lists = os.listdir(result_dir)
lists.sort(key=lambda fn: os.path.getmtime(result_dir + "\\" + fn))
print (u\'最新的导弹已制成,即将进入发射程序: \'+lists[-1])
# 找到最新生成的文件
new_file = os.path.join(result_dir, lists[-1])
print(new_file)
#调用发邮件模块
send_mail(new_file)
# ✎﹏₯㎕﹍﹍ 将用例添加到测试套件 ζั͡ޓއއއ๓º
def creatsuite():
testunit = unittest.TestSuite()
# 定义测试文件查找的目录
testcase_path = TestCasePath
# 定义 discover 方法的参数
discover = unittest.defaultTestLoader.discover(testcase_path, pattern=\'test*.py\',top_level_dir=None)
# discover 方法筛选出来的用例,循环添加到测试套件中
for test_case in discover:
print(test_case)
testunit.addTests(test_case)
return testunit
def main():
now = time.strftime("%Y-%m-%d %H_%M")
# 报告存储的路径
report_path = ReportPath
# 构建文件完整路径
filename = report_path + ReportName + now + \'.html\'
# 打开报告文件
file = open(filename, \'wb\')
# 设置报告头部信息
runner = BSTestRunner.BSTestRunner(stream=file, title=Title,
description=Description)
# 拿到测试套件并运行
all_test_case = creatsuite()
runner.run(all_test_case)
# 关闭生成的报告
file.close()
# 发送报告
send_report(ReportPath)
if __name__ == \'__main__\':
# 设置发信邮箱
Sender = \'xxx@yyy.com\' # 发信邮箱账号
# 设置收信邮箱
Receiver= \'xxxxxx@qq.com\' # 收信邮箱密码
# 设置发信邮箱密码
EmailPassword = \'xxxxxxx\' # 此处填写你在邮箱生成的客户端专用密码
# 设置邮件标题
EmailTitle = u"自动化测试报告"
# 设置邮件正文内容
BodyContent = \'此邮件为执行自动化脚本后自动发送邮件,请勿回复!\'
# 设置邮件附件名称
AttName = "TestReport.html"
# 设置testCase存储路径
TestCasePath = os.path.dirname(os.path.abspath(\'.\')) + \'\\testcase\'
# 设置SMTP服务器-(现在用的QQ邮箱服务器)
SMTP = "smtp.exmail.qq.com"
# 设置报告的名字
ReportName = \'TestReport \'
# 设置报告存储的路径
ReportPath = os.path.dirname(os.path.abspath(\'.\')) + \'\\reports\\\'
# 设置报告主题
Title = u\'Big data platform\'
# 设置报告描述内容
Description = u\'This is the automation test report of the big data platform for reference only.\'
# 调用main()方法启动程序
main()