python+selenium+unittest发送邮件并附带附件

这几天由于需要结合jenkins执行自动化脚本并发送报告附件,折腾了几天,解决了,源码如下:

部分读取配置文件等内容可以根据自己公司的内容做增减

#coding=utf-8
from HTMLTestRunner import HTMLTestRunner
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib,sys,unittest,configparser,os

# ==============定义发送邮件==========
def send_mail(file_new,title):
    #读取报告
    f = open(file_new, 'rb')
    mail_body = f.read()
    f.close()

    #设置邮件信息
    msg = MIMEMultipart()
    msg["subject"] = title  #主题
    body = MIMEText(mail_body, "html", "utf-8")
    msg.attach(body)
    #添加附件
    att = MIMEText(mail_body, "html", "utf-8")
    att["Content-Type"] = "application/octet-stream"
    att["Content-Disposition"] = 'attachment; filename="CRM_UItest_report.html"'  #定义附件名称
    msg.attach(att)
    #配置邮箱信息
    smtp = smtplib.SMTP()
    smtp.connect('192.168.0.1')  # 邮箱服务器
    smtp.login("abcd", "123456")  # 登录邮箱-->abcd为登录服务器账号,123456为登录服务器密码
    smtp.sendmail("[email protected]", "[email protected]", msg.as_string())  # 配置发送邮箱[email protected]和接收邮箱[email protected],接收邮箱可以定义成字符串"[email protected],[email protected]",设置多个接受者
    smtp.quit()
    print("Email had send! Please recevie")

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

if __name__ == "__main__":
    #定义配置(可以根据公司实际需要增减此部分)
    config = configparser.ConfigParser()
    #获取相对路径
    dir = os.path.dirname(os.path.abspath('.'))
    #获取配置文件
    file_path = dir + '/config/config.ini'
    #读取配置文件
    config.read(file_path)
    #定义变量
    URL_address = config.get('testServer', 'URL_address')
    version = config.get('testServer', 'version')
    testcase_path = dir + '\\test_case\\'
    crm_path = dir + '\\report\\'

    curPath = os.path.abspath(os.path.dirname(__file__))
    rootPath = os.path.split(curPath)[0]
    sys.path.append(rootPath)

    #获取测试用例
    discovers = unittest.defaultTestLoader.discover(testcase_path,pattern = 'test*.py',top_level_dir=None)
    #discovers = unittest.defaultTestLoader.discover(testcase_path, pattern='test.py')
    #now = time.strftime("%Y-%m-%d_%H-%M-%S")
    filename = dir + '\\report\\CRM_UItest_report.html'  
    fp = open(filename, 'wb')
    #定义报告名称
    title = 'CRM系统_' + URL_address[:2] + '环境_' + version + '版本UI自动化测试报告'
    #runner = HTMLTestRunner(stream=fp,title='CRM系统UI自动化测试报告',description='测试用例执行情况')
    #生成HTML报告
    runner = HTMLTestRunner(stream=fp, title=title, description='测试用例执行情况')
    #执行测试用例
    runner.run(discovers)
    fp.close()

    new_report = new_report(crm_path)
    send_mail(new_report,title)  # 发送测试报告

猜你喜欢

转载自www.cnblogs.com/xiaopeng4Python/p/10559869.html