您好,登錄后才能下訂單哦!
自動化發(fā)郵件功能也是自動化測試項目中的重要需求之一。在自動化腳本運行完成之后,郵箱就可以收到最新的測試報告結(jié)果,把這種主動的且不及時的查看變成被動且及時的查收,就方便多了。
首先我們需要一份漂亮且通俗易懂的測試報告來展示自動化測試成果, HTMLTestRunner
是 python
標準庫 unittest
單元測試框架的一個擴展,它生成易于使用的HTML測試報告。
下載地址: http://tungwaiyip.info/software/HTMLTestRunner.html
這個擴展非常簡單,只有一個.py文件,選中后直接下載到本地即可。安裝方法也很簡單,將其復(fù)制到python的安裝目錄下即可。
windows:將下載的文件保存在../Python35/Lib目錄下
Linux(ubuntu):以root身份將HTMLTestRunner.py復(fù)制到/usr/local/Python3.7/dist-packages/ 目錄下
修改HTMLTestRunner
#第 94 行 import StringIo 修改為: import io #第 539 行 self.outputBuffer=StringIO.StringIO() 修改為: self.outputBuffer=io.StringIO() #第 631 行 print >>sys.stderr, 'nTime Elapsed: %s' % (self.stopTime-self.startTime) 修改為: print(sys.stderr, 'nTime Elapsed: %s' % (self.stopTime-self.startTime)) #第 642 行 if not rmap.has_key(cls): 修改為: if not cls in rmap: #第 766 行 uo=o.decode('latin-1') 修改為: uo=o #第 772 行 ue=e.decode('latin-1') 修改為: ue=e
生成HTML測試報告
from selenium import webdriver import unittest from HTMLTestRunner import HTMLTestRunner class Baidu(unittest.TestCase): def setUp(self): self.driver=webdriver.Firefox() self.driver.implicitly_wait(10) self.base_url="https://www.baidu.com" def test_baidu_search(self): driver=self.driver driver.get(self.base_url) driver.find_element_by_id("kw").send_keys("HTMLTestRunner") driver.find_element_by_id("su").click() def tearDown(self): self.driver.quit() if __name__=="__main__": testunit=unittest.TestSuite() testunit.addTest(Baidu("test_baidu_search")) #定義報告存放路徑 fp=open('./result.html','wb') #定義測試報告 runner=HTMLTestRunner( stream=fp, title='百度搜索測試報告', description='用例執(zhí)行情況:' ) runner.run(testunit) # 運行測試用例 fp.close() # 關(guān)閉報告文件
代碼分析
首先,將HTMLTestRunner模塊用import導(dǎo)入進來
其次,通過open()方法以二進制寫模式打開當前目錄下的result.html,如果沒有,則自動創(chuàng)建該文件。
接著,調(diào)用HTMLTestRunner模塊下的HTMLTestRunner類。stream指定測試報告文件,title用于定義測試報告的標題,description用于定義測試報告的副標題。
最后,通過HTMLTestRunner的run()方法來運行測試套件中所組裝的測試用例。最后通過close()關(guān)閉測試報告文件。
自動發(fā)郵件
import smtplib from email.mime.text import MIMEText from email.header import Header #發(fā)送郵箱服務(wù)器 smtpserver='smtp.**.com' #發(fā)送郵箱用戶/密碼 user='********@**.com' password='********'(授權(quán)碼) #發(fā)送郵箱 sender='********@**.com' #接收郵箱 receiver='*******@**.com' #發(fā)送郵件主題 subject='python email' #編寫html類型的郵件正文 msg=MIMEText('<HTML><H1>你好</H1></HTML>','html','utf8') msg['Subject']=Header(subject,'utf-8') #連接發(fā)送郵件 smtp=smtplib.SMTP() smtp.connect(smtpserver) smtp.login(user,password) smtp.sendmail(sender,receiver,msg.as_string()) smtp.quit()
發(fā)送帶附件的郵件
import smtplib from email.mime.text import MIMEText from email.header import Header #發(fā)送郵箱服務(wù)器 smtpserver='smtp.**.com' #發(fā)送郵箱用戶/密碼 user='********@**.com' password='********'(授權(quán)碼) #發(fā)送郵箱 sender='********@**.com' #接收郵箱 receiver='*******@**.com' #發(fā)送郵件主題 subject='python email' #發(fā)送的附件 sendfile=open('D:\\test.txt','rb').read() att=MIMEText(sendfile,'base64','utf-8') att["Content-Type"]='application/octet-stram' att["content-Disposition"]='attachment;filename="test.txt"' msgRoot=MIMEMultipart('related') msgRoot['Subject']=subject msgRoot.attach(att) #連接發(fā)送郵件 smtp=smtplib.SMTP() smtp.connect(smtpserver) smtp.login(user,password) smtp.sendmail(sender,receiver,msg.as_string()) smtp.quit()
整合自動發(fā)郵件功能
解決了前面的問題后,現(xiàn)在就可以將自動發(fā)郵件功能集成到自動化測試項目中了。
import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.text import MIMEText import unittest import time import os #定義發(fā)送郵件 def send_mail(file_new): f=open(file_new,'rb') mail_body=f.read() f.close() msg=MIMEText(mail_body,'html','utf-8') msg['Subject']=Header("自動化測試報告",'utf-8') smtp=smtplib.SMTP() smtp.connect("******.com") smtp.login(****@**.com,*******) smtp.sendmail(****@**.com,****@**.com,msg.as_string()) smtp.quit() print('email has send out !') #查找測試報告目錄,找到最新生成的測試報告文件 def new_report(testreport): lists=os.listdir(testreport) lists.sort(key=lambda fn: os.path.getmtime(testreport+"\\"+fn)) file_new=os.path.join(testreport,lists[-1]) print(file_new) return file_now if __name__=='__main__': test_dir='D:\\testpro\\test_case' test_report='D:\\testpro\\report' discover=unittest.defaultTestLoader.discover(test_dir,pattern='test_*.py') now=time.strftime("%Y-%M-%D_%H_%M_%S") filename=test_report+'\\'+now+'result.html' fp=open(filename,'wb') runner=HTMLTestRunner(stream=fp,title='測試報告',description='用例執(zhí)行情況:') runner.run(discover) fp.close() new_report=new_report(test_report) send_mail(new_report)
整個程序的執(zhí)行過程可以分為三個步驟:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。