py37 unitest+html_sendmail

架构

 1.testcase

#coding:utf-8
import unittest
import os,time
#import HTMLTestRunner3   #py3版本
import HTMLTestRunnerNew  #报告样式美化


#测试用例
class Test(unittest.TestCase):
    """测试用例1"""
    def setUp(self):
        print("start")

    def tearDown(self):
        time.sleep(1)
        print("end")

    def test01(self):
        """用例描述1:登录xxx,账户xxx"""
        print("执行测试用例1")

    def test02(self):
        """用例描述2:访问百度"""
        print("执行测试用例2")

if __name__=="__main__":
    #1直接执行
    #unittest.main()
    #2执行测试报告
    test=unittest.TestSuite()
    test.addTest(Test("test01"))
    test.addTest(Test("test02"))
    #添加时间
    now=time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
    #报告路径
    report_path="F:\download\report\report_"+now+".html"
    fp=open(report_path,"wb")
    runner=HTMLTestRunnerNew.HTMLTestRunner(stream=fp,
                                           title="这是我的自动化测试用例",
                                           description="用例执行情况",
                                           verbosity = 2)   #verbosity = 2  执行一个用例打印一条信息
    runner.run(test)
    #关闭文件
    fp.close()

2.执行

#coding=utf-8

import unittest
import os
import time
#import HTMLTestRunner3  #老样式,发送邮件可以看到页面样式
import HTMLTestRunnerNew  #美化样式,发送邮件看不到页面样式
import sendemail_report as email  #导入邮件模块

#测试用例
def all_case():
    """所有用例"""
    #待执行用例的目录
    #case_dir=r"F:/download/
    case_dir=os.path.join(os.getcwd(),"case")
    testcase=unittest.TestSuite()
    discover=unittest.defaultTestLoader.discover(case_dir,pattern="test*.py",top_level_dir=None)

    testcase.addTests(discover)
    print(testcase)
    return testcase

#查找new测试报告
def new_report(test_report):
    lists=os.listdir(test_report)  #列出目录洗所有文件夹
    lists.sort(key=lambda  fn:os.path.getmtime(test_report+"\"+fn))  #按时间排序
    file_new=os.path.join(test_report,lists[-1])  #获取最新的
    print("最新的报告是:",file_new)
    return file_new


if __name__=="__main__":

    #返回实例
    runner=unittest.TextTestRunner()
    #获取当前时间
    now=time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
    #保存报告路径
    report_path="F:\download\report\report_"+now+".html"
    fp=open(report_path,"wb")
    runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp,
                                            title="这是我的自动化测试用例",
                                            description="用例执行情况",
                                            verbosity=2)
    #run 所有用例
    runner.run(all_case())
    #关闭文件
    fp.close()

    # 查找最新的测试报告,并发送邮件
    report_path="F:\download\report\"
    new_report=new_report(report_path)
    email.send_mail_html(new_report)
    #email.send_mail_file(new_report)  #带报告附件

3.sendmail

#coding=utf-8
"""
Created on
@author:
Project:py37发送html邮件及附件
"""

from email.header import Header
from email.mime.text import MIMEText
import smtplib

from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.utils import parseaddr,formataddr
from email import encoders

import os
import time

#邮件配置参数
From_addr = "xx@xx.com"
Password = "xx"
To_addr = "xx@xx.com" 
Smtp_server = "smtp.exmail.qq.com"
###

#发送邮件
def send_mail_txt(file_new):
    """发送邮件"""
    # 读取html报告文件内容
    print('正在发送中-------------------------')
    with open(file_new, 'rb') as f:
        mail_body = f.read()

    def _format_addr(s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))

    # 1.文本
    msg = MIMEText(mail_body, 'plain', 'utf-8')

    #邮件参数传递
    from_addr =From_addr
    password =Password
    to_addr = To_addr
    cc_mail = 'xx@xxx.com'  #抄送人员,#to_addr+cc_mail
    smtp_server = Smtp_server

    # 邮件对象
    msg['From'] = _format_addr('测试负责人 <%s>' % from_addr)
    msg['To'] = _format_addr('管理员 <%s>' % to_addr)
    msg['Subject'] = Header('测试机', 'utf-8').encode()
    msg['date'] = time.strftime("%a,%d %b %Y %H:%M:%S %z")

    # 发送邮件
    server = smtplib.SMTP(smtp_server, 25)
    #server.set_debuglevel(1)   #打印信息
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()
    print("邮件已发出!注意查收。")

#发送邮件
def send_mail_html(file_new):
    """发送邮件"""
    # 读取html报告文件内容
    print('正在发送中-------------------------')
    with open(file_new, 'rb') as f:
        mail_body = f.read()

    #邮件内容封装
    def _format_addr(s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))

    #邮件参数传递
    from_addr =From_addr
    password =Password
    to_addr = To_addr
    cc_mail = 'xx@xxx.com'  #抄送人员,#to_addr+cc_mail
    smtp_server = Smtp_server

    # html邮件正文
    msg = MIMEText(mail_body, 'html', 'utf-8')

    # 邮件对象
    msg['From'] = _format_addr('测试负责人 <%s>' % from_addr)
    msg['To'] = _format_addr('管理员 <%s>' % to_addr)
    msg['Subject'] = Header('测试机', 'utf-8').encode()
    msg['date'] = time.strftime("%a,%d %b %Y %H:%M:%S %z")

    # 发送邮件
    server = smtplib.SMTP(smtp_server, 25)
    #server.set_debuglevel(1)   #打印信息
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()
    print("邮件已发出!注意查收。")

# 发送邮件,带附件
def send_mail_file(file_new):
    """发送带附件的邮件"""
    # file=带文件,其他是待图片png格式
    # 读取html报告文件内容
    print('正在发送中-------------------------')
    with open(file_new, 'rb') as f:
        mail_body = f.read()

    # 邮件内容封装
    def _format_addr(s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))

    # 邮件参数传递
    from_addr = From_addr
    password = Password
    to_addr = To_addr
    cc_mail = 'xx@xxx.com'  # 抄送人员,#to_addr+cc_mail
    smtp_server = Smtp_server

    #邮件正文是MIMEText
    body = MIMEText(mail_body, 'html', 'utf-8')
    msg=MIMEMultipart()

    # 邮件对象
    msg['From'] = _format_addr('测试负责人 <%s>' % from_addr)
    msg['To'] = _format_addr('管理员 <%s>' % to_addr)
    msg['Subject'] = Header('测试机', 'utf-8').encode()
    msg['date'] = time.strftime("%a,%d %b %Y %H:%M:%S %z")

    msg.attach(body)
    #MIMEBase标识附件的对象
    att=MIMEText(mail_body,'base64','utf-8')
    att["Content-Disposition"]='attachment;filename=%s'%file_new
    msg.attach(att)

    # 发送邮件
    server = smtplib.SMTP(smtp_server, 25)
    # server.set_debuglevel(1)   #打印信息
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()
    print("邮件已发出!注意查收。")

if __name__=="__main__":
    file_new=r"F:/download/report/report.html"
    file_png=r"F:/download/test.png"
    send_mail_html(file_new)
    #发送文件
    send_mail_file(file_new)
    #发送图片
    #send_mail_file(file_png)
    #server
    file_body=r"F:/download/txt.txt"
    send_mail_txt(file_body)
原文地址:https://www.cnblogs.com/lisa2016/p/12561174.html