python生成自動化測試報告並發送到指定郵箱


#-*-coding:utf-8 -*-
import HTMLTestRunner
import unittest
import time
import sys
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from login import umeiLogin
reload(sys)
sys.setdefaultencoding('utf8')


def new_file(test_dir):
    #列舉test_dir目錄下的所有文件,結果以列表形式返回。
    lists=os.listdir(test_dir)
    #sort按key的關鍵字進行排序,lambda的入參fn為lists列表的元素,獲取文件的最后修改時間
    #最后對lists元素,按文件修改時間大小從小到大排序。
    lists.sort(key=lambda fn:os.path.getmtime(test_dir+'\\'+fn))
    #獲取最新文件的絕對路徑
    file_path=os.path.join(test_dir,lists[-1])
    return file_path


# 3.定義:發送郵件,發送最新測試報告html
def send_email(newfile):
    # 打開文件
    f = open(newfile, 'rb')
    # 讀取文件內容
    mail_body = f.read()
    # 關閉文件
    f.close()

    # 發送郵箱服務器
    smtpserver = 'smtp.163.com'
    # 發送郵箱用戶名/密碼
    user = 'XXXX@163.com'
    password = 'XXXXX'
    # 發送郵箱
    sender = 'XXXXX@163.com'
    # 多個接收郵箱,單個收件人的話,直接是receiver='XXX@163.com'
    receiver = ['XXXXX@163.com']
    # 發送郵件主題
    subject = '自動化測試報告'

    msg = MIMEMultipart('mixed')

    msg_html1 = MIMEText(mail_body, 'html', 'utf-8')
    msg.attach(msg_html1)

    msg_html = MIMEText(mail_body, 'html', 'utf-8')
    msg_html["Content-Disposition"] = 'attachment; filename="TestReport.html"'
    msg.attach(msg_html)



    # 要加上msg['From']這句話,否則會報554的錯誤。
    # 要在163設置授權碼(即客戶端的密碼),否則會報535
    msg['From'] = 'XXXX@163.com'
    #    msg['To'] = 'XXX@doov.com.cn'
    # 多個收件人
    msg['To'] = ";".join(receiver)
    msg['Subject'] = Header(subject, 'utf-8')

    # 連接發送郵件
    smtp = smtplib.SMTP()
    smtp.connect(smtpserver, 25)
    smtp.login(user, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

if __name__=="__main__":
    print '===== Start  ======'
    # 1.執行測試用例,生成最新的測試用例
    # 指定測試用例為當前文件夾下的test_case目錄

    test_dir = 'D:\\study\\TestCase'
    # 指定測試報告的路徑
    test_report_dir = 'D:\\study\\report'

    # 包裝測試用例
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(umeiLogin.umeiLogin))

    #生成與執行時間相同的測試報告
    now = time.strftime('%Y-%m-%d_%H_%M_%S_')
    filename = test_report_dir + '\\' + now + 'result.html'
    fp = open(filename, 'wb')

    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'測試報告', description=u'用例執行情況:')
    runner.run(suite)
    fp.close()

    # 2.取最新測試報告
    new_report = new_file(test_report_dir)

    # 3.發送郵件,發送最新測試報告html
    send_email(new_report)
    print '=====  Over   ======'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM