中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python自動發送測試報告郵件功能的實現

發布時間:2020-09-22 11:59:20 來源:腳本之家 閱讀:201 作者:老_大叔o 欄目:開發技術

自動化發郵件功能也是自動化測試項目中的重要需求之一。在自動化腳本運行完成之后,郵箱就可以收到最新的測試報告結果,把這種主動的且不及時的查看變成被動且及時的查收,就方便多了。

首先我們需要一份漂亮且通俗易懂的測試報告來展示自動化測試成果, HTMLTestRunnerpython 標準庫 unittest 單元測試框架的一個擴展,它生成易于使用的HTML測試報告。

下載地址: http://tungwaiyip.info/software/HTMLTestRunner.html

這個擴展非常簡單,只有一個.py文件,選中后直接下載到本地即可。安裝方法也很簡單,將其復制到python的安裝目錄下即可。

windows:將下載的文件保存在../Python35/Lib目錄下

Linux(ubuntu):以root身份將HTMLTestRunner.py復制到/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='用例執行情況:'
 )
 runner.run(testunit) # 運行測試用例
 fp.close() # 關閉報告文件

代碼分析

首先,將HTMLTestRunner模塊用import導入進來

其次,通過open()方法以二進制寫模式打開當前目錄下的result.html,如果沒有,則自動創建該文件。

接著,調用HTMLTestRunner模塊下的HTMLTestRunner類。stream指定測試報告文件,title用于定義測試報告的標題,description用于定義測試報告的副標題。

最后,通過HTMLTestRunner的run()方法來運行測試套件中所組裝的測試用例。最后通過close()關閉測試報告文件。

python自動發送測試報告郵件功能的實現

自動發郵件

import smtplib
from email.mime.text import MIMEText
from email.header import Header
#發送郵箱服務器
smtpserver='smtp.**.com'
#發送郵箱用戶/密碼
user='********@**.com'
password='********'(授權碼)
#發送郵箱
sender='********@**.com'
#接收郵箱
receiver='*******@**.com'
#發送郵件主題
subject='python email'
#編寫html類型的郵件正文
msg=MIMEText('<HTML><H1>你好</H1></HTML>','html','utf8')
msg['Subject']=Header(subject,'utf-8')
#連接發送郵件
smtp=smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()

發送帶附件的郵件

import smtplib
from email.mime.text import MIMEText
from email.header import Header
#發送郵箱服務器
smtpserver='smtp.**.com'
#發送郵箱用戶/密碼
user='********@**.com'
password='********'(授權碼)
#發送郵箱
sender='********@**.com'
#接收郵箱
receiver='*******@**.com'
#發送郵件主題
subject='python email'
#發送的附件
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)
#連接發送郵件
smtp=smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()

整合自動發郵件功能

解決了前面的問題后,現在就可以將自動發郵件功能集成到自動化測試項目中了。

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
#定義發送郵件
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='用例執行情況:')
 runner.run(discover)
 fp.close()
 new_report=new_report(test_report)
 send_mail(new_report)

整個程序的執行過程可以分為三個步驟:

  • 通過unittest框架的discover()找到匹配測試用例。由HTMLTestRunner的run()方法執行測試用例并生成最新的測試報告。
  • 調用new_report()函數找到測試報告目錄(report)下最新生成的測試報告,返回測試報告的路徑。
  • 將得到的最新測試報告的完整路徑傳給send_mail()函數,實現發郵件功能。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾阳县| 射洪县| 汶川县| 中方县| 财经| 府谷县| 启东市| 如皋市| 延寿县| 洮南市| 黄石市| 西丰县| 清苑县| 德令哈市| 屏东市| 湟源县| 望谟县| 醴陵市| 涿鹿县| 澄迈县| 新余市| 天水市| 金山区| 渭南市| 肃南| 南城县| 威宁| 舒城县| 璧山县| 莫力| 大城县| 乌拉特中旗| 甘洛县| 武山县| 惠水县| 邻水| 平昌县| 安远县| 濮阳市| 浦江县| 博客|