selenium 自动发送邮件_最新的测试报告
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 需要准备的信息:
# SMTPSERVER = 'smtp.qq.com' # 发邮件服务器
# USERNAME = 'hnx****@qq.com' # 用户名
# PASSWORD = 'qtiyqviftfucbeje' # 密码
# SEND = 'hn****@qq.com' # 发邮件者
# RECRIVER = 'hn****@qq.com' # 接收邮件这
# SUBJECT = 'Python email test' # 发送邮箱主题
# EMAIL_TEXT = "这是一个自动发送邮件的测试邮件" # 邮件内容
# REPORT_PATH = '../reprot' # 测试报告位置 邮件附件
# PATH = "../data_file/data.ymal"
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1.首先,创建一个在项目目录中创建一个 data_file/data.yaml 文件
data:
"SMTPSERVER": "smtp.qq.com"
"USERNAME": "******@qq.com"
"PASSWORD": "qtiyqviftfucbeje"
"RECRIVER": "******@qq.com"
"SUBJECT": "Python email test"
"EMAIL_TEXT": "这是一个自动发送邮件的测试邮件"
"REPORT_PATH": "../report"
还需要创一个report的放置测试报告的文件夹,里面放置文件为html格式。
基础项目目录如下:
object:
- data_file
- data.ymal
- base
- __init__.py
- casebase.py
- testcase
- test_001.py
- test_002.py
- testpage
- page001.py
- page002.py
- testsuite
- suite.py
- runer
- runner.py
- tool
- E_mail.py
2.调用相关方法, 写一个E_mail 类来封装这个邮件发送的
import datetime
import os
import smtplib
import yaml
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
class E_mail(object):
TIME = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 使用格式化时间,方便时间后期调用
def __init__(self, server, username, password, to, subject=None, text=None, reportpath='../report' or None):
self.rpp = reportpath # 测试报告的位置
self.lists = os.listdir(reportpath) # 系统获取默认的目录下文件
self.server = server # 邮箱服务器
self.user = username # 邮箱地址
self.pwd = password # 邮箱密码
self.to = to # 发送给谁
self.sub = subject # 邮件标题
self.txt = text # 邮件内容
self.smtp = smtplib.SMTP() # 调用邮箱协议
self.msg = MIMEMultipart() # 调用邮箱携带 超文本内容 协议方式,而且兼容MIMEText(多用途互联网邮件扩展类型)
self.att = MIMEText(open(self.__new_dir(), 'r+', encoding='utf-8').read(), 'base64', 'utf-8')
def comment(self):
"""
该方法最主要输出的是文本类邮件,且只输出文本类邮件
"""
self.msg['Subject'] = Header(
f'{self.sub}(' + str(self.TIME) + ')', 'utf8') # 在邮箱的超文本协议中添加 标题
self.msg['From'] = self.user # 谁发送
self.msg['To'] = self.to # 发送给谁
self.msg.attach(MIMEText(self.txt, 'html', 'utf-8')) # 执行发送内容
print("成功获取正文内容")
def __new_dir(self):
"""获取最新测试报告"""
self.lists.sort(key=lambda fn: os.path.getmtime(self.rpp + "\\" + fn)) # 根据所在目录的内容用时间排序(从旧到新)
return os.path.join(self.rpp, self.lists[-1]) # 返回给当前函数,(self.rpp)当前地址的倒数第一个文件
def accessory(self):
"""获取最新的测试报告,并把测试报告写进邮件中"""
# Content-Type 指示响应内容的格式
self.att["Content-Type"] = 'application/octet-stream'
# content-disposition 指示如何处理响应内容。
# inline:直接在页面显示 attchment:以附件形式下载
self.att["Content-Disposition"] = f'attachment; filename={self.rpp + self.TIME}'
self.msg.attach(self.att)
print("成功获取附件")
def send(self):
"""发送邮件"""
self.smtp.connect(self.server) # 获取邮箱的服务器
self.smtp.login(self.user, self.pwd) # 登录邮箱账户
self.smtp.sendmail(self.user, self.to, self.msg.as_string()) # 发送邮件
self.smtp.quit() # 关闭邮箱
print("邮件发送成功")
3.为方便使用ymal进行参数化,再写一个新的类封装上一个类:
class Email_send(object):
"""重新封装邮件"""
def __init__(self, path="../data_file/data.ymal" or None):
self.PATH = path
def e_send(self):
"""获取ymal文件中的data中的参数"""
with open(self.PATH, encoding="utf-8") as yaml_file:
data = yaml.safe_load(yaml_file)
value = list(data["data"].values())
try:
# 执行发送邮件的过程
email = E_mail(value[0], value[1], value[2], value[3], value[4], value[5], value[6]) # 实例化E_mail对象,调用参数
email.comment() # 发送文本信息
email.accessory() # 发送附件内容
email.send() # 发送邮件
except(ValueError, ArithmeticError):
print("配置文件参数值异常")
4.最后实例化对象并调用,携带附件的邮件发送成功:
# 使用的时候直接在需要的位置调用Email_send,输入参数PATH,因为我这里写了默认参数就不写了
em = Email_send()
em.e_send()
欢迎同学和我一起来学习python自动化