测试报告需要发送给相关人员,但每次都要在report目录下去复制太麻烦,可以使用邮件模块自动将生成的报告发送给相关人员
1、 新增utils文件夹,用于存放工具文件
在utils下新增sendmail.py文件
代码
sendmail.py
python">import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from Test.pythonProject.test_selenium_pjz.run import report_dirdef sendmail():host = 'smtp.qq.com'sender = '****@qq.com' # 发送方邮件地址passwd = '****' # 发送方密码 需要在邮箱设置中开启SMTP服务 并获取授权码,此处是填写获取的授权码receiver = '****@qq.com' # 接收报告方邮件地址msg = MIMEMultipart()msg['from'] = sendermsg['to'] = receivermsg['subject'] = '主题'msg.attach(MIMEText('邮件正文'))import osprint(os.path.abspath(__file__))att1 = MIMEText(uiltin">open(report_dir, 'rb').read().decode('utf-8'), 'base64', 'utf-8')att1["Content-Type"] = 'application/octet-stream'# 这里的filename可以任意写,写什么名字,邮件中显示什么名字att1["Content-Disposition"] = 'attachment; filename="report.html"'msg.attach(att1)try:smtpobj = smtplib.SMTP_SSL(host, port=465)#我使用的是QQ邮箱 所以用这个方法,不同的邮箱,这个方法可能不同,如果使用错误的方法,可能会导致连接关闭问题,无法发送邮件smtpobj.login(sender, passwd)smtpobj.sendmail(sender, receiver, msg.as_string())smtpobj.quit()print('send success')except smtplib.SMTPException as e:print(e)print('send err')
2、 修改run.py 调用sendmail函数
代码
run.py
python">import unittest
import time
from HTMLTestRunner import HTMLTestRunner
from Test.pythonProject.test_selenium_pjz.utils import sendmailtestdir = "./cases"
discover = unittest.defaultTestLoader.discover(start_dir=testdir, pattern='test*.py')
cur_time = time.strftime('%Y-%m-%d %H_%M_%S', time.localtime(time.time()))
report_name = "HTMLReport"+cur_time+".html"
report_dir="./report/{}".uiltin">format(report_name)if __name__ == '__main__':with uiltin">open(report_dir, 'w', encoding='utf-8') as f:runner = HTMLTestRunner.HTMLTestRunner(stream=f,title='pjz测试报告名称',description='pjz 测试描述信息',verbosity=2)runner.run(discover)sendmail.sendmail()