• selenium2学习:单元测试框架(6):自动发送邮件


    1.1     自动发送邮件

    1.1.1      自动发送(无附件)

    Python的smtplib模块提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。使用SMTP对象的sendmail方法发送邮件。

    内容如下编写:

    '''发送邮件:正文'''
    # coding=utf-8  
    import smtplib  
    from email.mime.text import MIMEText  
    from email.header import Header
    
    #发送邮箱服务器
    smtpserver="smtp.126.com"
    #发送邮箱用户名和密码
    username="tianshixia111@126.com"  
    password="1121228" 
    
    #发送邮箱
    sender="tianshi1212@126.com"
    #接收邮箱
    receiver="tianshi1111@126.com"
    #邮件主题
    subject="邮件主题信息:标题,是的,就酱~~~"
    
    #html类型的邮件正文 
    msg=MIMEText('<html><h1>同学你好~!这是自动发给你的邮件,请问怎么文字换行显示呢?</h1></html>','html','utf-8')  
    msg['subject']=Header(subject,'utf-8')
     
    #连接发送邮件
    smtp=smtplib.SMTP()  
    smtp.connect(smtpserver)  
    smtp.login(username,password)  
    smtp.sendmail(sender,receiver,msg.as_string())  
    smtp.quit() 

    邮件内容:

     

    1.1.2      自动发送含附件

    # 发送邮件:附件
    # coding=utf-8  
    import smtplib  
    from email.mime.text import MIMEText   #MIMRText()定义邮件正文  
    from email.header import Header
    from email.mime.multipart import MIMEMultipart   #MIMEMulipart模块构造带附件
    
    #发送邮箱服务器
    smtpserver="smtp.126.com"
    #发送邮箱用户名和密码
    username="tianshixiao8@126.com"  
    password="jxba0128" 
    
    #发送邮箱
    sender="tianshixiao8@126.com"
    #接收邮箱
    receiver="tianshixiao8@126.com"
    #邮件主题
    subject="邮件主题信息:标题,有附件,是的~就酱~~~"
    #发送附件
    sendfile = open('D:Report_180519-120941.html','rb').read()
    att = MIMEText(sendfile,'base64','utf-8')
    att["Content-Type"] = "application/octet-stream"  
    att["Content-Disposition"] = 'attachment;filename = "Report_180519-120941.html"'
    
    msgroot = MIMEMultipart('related')
    msgroot['Subject'] = subject
    msgroot.attach(att)
    
    
    #连接发送邮件
    smtp=smtplib.SMTP()  
    smtp.connect(smtpserver)  
    smtp.login(username,password)  
    smtp.sendmail(sender,receiver,msgroot.as_string())  
    smtp.quit()  

    邮件内容:

     

    注:原来本句为如下编写:

    att["Content-Disposition"] = "attachment;filename = 'Report_180519-120941.html'"

    导致邮件的附件含’’,如下图

     

    后改为:
    att["Content-Disposition"] = 'attachment;filename = "Report_180519-120941.html"' 正常。

    1.1.3      查找最新报告(筛选文件)

    # 查找最新的html文件
    #coding=utf-8  
    import os
    
    #定义文件目录
    result_dir=".\"  
    lists=os.listdir(result_dir) #将文件放在列表中
    reports = []
    for file in lists:         
        if file.startswith("Report") and file.endswith(".html"):  #筛选以Report开头的html格式的文件
            reports.append(file)
            
    # 排序html格式的文件        
    reports.sort(key=lambda fn: os.path.getmtime(result_dir+"\"+fn))
    #打印出最新的文件
    print (reports[-1]) 
    file=os.path.join(result_dir,reports[-1])  
    print (file) 

    1.1.4      整合自动发送邮件

    步骤:

    1、  通过unittest框架的discover()找到匹配的测试用例,由HTMLTestRunner的run()方法执行测试用例并生成测试报告;

    2、  调用第一种写法的findnew()的findfile()或第二种写法findfile()找到最新的测试报告,返回测试报告的路径;

    3、  将该报告传给send_mail()函数,将报告以正文的形式发送。

    粗糙暴力写法:

    # 因为原目录下不仅仅有report文件,所以对report文件进行了筛选
    # =====查找最新的html文件(在筛选后的文件列表中排序寻找最新的)
    #coding=utf-8  
    import os
    class findnew():
        def __init__(self,result_dir,lists):
            self.result_dir = result_dir
            self.lists = lists
        def findfile(self):
            #定义文件目录
            self.lists.sort(key=lambda fn: os.path.getmtime(self.result_dir+"\"+fn))   # 排序html格式的文件
            file1=os.path.join(self.result_dir,reports[-1])                   #返回最新的文件
            return file1
    
    
    
    
    # =====发送邮件:附件
    # coding=utf-8  
    import smtplib  
    from email.mime.text import MIMEText                   #MIMRText()定义邮件正文  
    from email.header import Header
    from email.mime.multipart import MIMEMultipart         #MIMEMulipart模块构造带附件
    
    def send_mail(reportfile):
        f = open(reportfile,'rb')                              #将报告的内容赋给变量mail_body
        mail_body = f.read()
        f.close()
        #发送邮箱服务器
        smtpserver="smtp.126.com"
        #发送邮箱用户名和密码
        username="tianshixiao8@126.com"
        password="jxba0128"
    
        #发送邮箱
        sender="tianshixiao8@126.com"
        #接收邮箱
        receiver="tianshixiao8@126.com"
        #邮件主题
        subject="邮件主题信息:标题,有附件,是的~就酱~~~"
        
        msg = MIMEText(mail_body,'html','utf-8')              #正文为报告的内容
        msg['subject']=Header(subject,'utf-8')
    
        #连接发送邮件
        smtp=smtplib.SMTP()
        smtp.connect(smtpserver)
        smtp.login(username,password)
        smtp.sendmail(sender,receiver,msg.as_string())
        smtp.quit()
    
    
    # ======生成报告
    import unittest
    from HTMLTestRunner import HTMLTestRunner
    import time
    
    if __name__ == '__main__':
        #定义测试用例的目录为当前目录
        test_dir = '.\'
        discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
        now = time.strftime("%y%m%d-%H%M%S")
        filename = test_dir + '/' + 'Report_' + now + '.html'
        fp = open(filename,'wb')
        runner = HTMLTestRunner(stream=fp,  #stream指定测试报告文件
                                title='计算器测试报告',   #测试报告标题
                                description='用例执行情况如下:')  #副标题
    
        runner.run(discover)
        fp.close()
    
        lists1=os.listdir(test_dir) #将文件放在列表中
        reports = []
        for file in lists1:
            if file.startswith("Report") and file.endswith(".html"):  #筛选以Report开头的html格式的文件
                reports.append(file)
                
        newreport = findnew(test_dir,reports).findfile()
        print(newreport)
        send_mail(newreport)

     另一种精致写法:

    import os
    import smtplib  
    from email.mime.text import MIMEText                   #MIMRText()定义邮件正文  
    from email.header import Header
    from email.mime.multipart import MIMEMultipart         #MIMEMulipart模块构造带附件
    import unittest
    from HTMLTestRunner import HTMLTestRunner
    import time
    
    #coding=utf-8 
    # 因为原目录下不仅仅有report文件,所以对report文件进行了筛选
    # =====查找最新的html文件(先对文件进行筛选,然后再在筛选后的文件列表中排序寻找最新的)
    def findfile(result_dir):
        lists1=os.listdir(result_dir) #将文件放在列表中
        reports = []
        for file in lists1:
            if file.startswith("Report") and file.endswith(".html"):  #筛选以Report开头的html格式的文件
                reports.append(file)
        reports.sort(key=lambda fn: os.path.getmtime(result_dir+"\"+fn))   # 排序html格式的文件
        file1=os.path.join(result_dir,reports[-1])                   #返回最新的文件
        return file1   
    
    
    # =====发送邮件:附件 
    def send_mail(reportfile):
        f = open(reportfile,'rb')                              #将报告的内容赋给变量mail_body
        mail_body = f.read()
        f.close()
        #发送邮箱服务器
        smtpserver="smtp.126.com"
        #发送邮箱用户名和密码
        username="tianshixiao8@126.com"
        password="jxba0128"
    
        #发送邮箱
        sender="tianshixiao8@126.com"
        #接收邮箱
        receiver="tianshixiao8@126.com"
        #邮件主题
        subject="邮件主题信息:标题,有附件,是的~就酱~~~"
        
        msg = MIMEText(mail_body,'html','utf-8')              #正文为报告的内容
        msg['subject']=Header(subject,'utf-8')
    
        #连接发送邮件
        smtp=smtplib.SMTP()
        smtp.connect(smtpserver)
        smtp.login(username,password)
        smtp.sendmail(sender,receiver,msg.as_string())
        smtp.quit()
    
    
    # ======生成报告,并发送
    if __name__ == '__main__':
        #定义测试用例的目录为当前目录
        test_dir = '.\'
        discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
        now = time.strftime("%y%m%d-%H%M%S")
        filename = test_dir + '/' + 'Report_' + now + '.html'
        fp = open(filename,'wb')
        runner = HTMLTestRunner(stream=fp,  #stream指定测试报告文件
                                title='计算器测试报告',   #测试报告标题
                                description='用例执行情况如下:')  #副标题
        runner.run(discover)
        fp.close()
    
        newreport = findfile(test_dir)
        send_mail(newreport)

    执行结果:

     
     
     
     
     
  • 相关阅读:
    Objective-C 关于锁的种类
    iOS多线程编程Part 1/3
    isa基础知识
    block学习笔记
    关于GCD使用
    iOS开发多线程篇—NSOperation基本操作
    iOS开发多线程篇—基础知识 NSOperation
    iOS开发多线程篇—单例模式(ARC)
    iOS开发多线程篇—GCD的常见用法
    OS开发多线程篇—线程间的通信
  • 原文地址:https://www.cnblogs.com/jxba/p/9060160.html
Copyright © 2020-2023  润新知