最完整的自動化測試流程:Python編寫執行測試用例及定時自動發送最新測試報告郵件


  轉自:http://www.cnblogs.com/yufeihlf/p/5752146.html#test32

 

    今天筆者就要歸納總結下一整套測試流程,從無到有,實現零突破,包括如何編寫測試用例,定時執行測試用例,查找最新生成的測試報告文件,自動發送最新測試報告郵件,一整套完整的測試流程。以后各位只要着重如何編寫測試用例即可,其他模板可以套用的,希望幫助到大家。

目錄

一、編寫測試用例

二、執行測試用例,查找最新測試用例,自動發送測試報告

三、定時執行測試用例

   3.1方案一:Windows任務計划

   3.2方案二:Jenkins持續集成

四、成果驗收

 

環境准備:

操作系統:Windows7

集成開發環境:eclipse+pydev

 

一、編寫測試用例

點擊返回目錄

    可以直接使用Python自帶的單元測試框架unittest來編寫自動化測試用例,利用其組織測試用例,斷言預期結果,以及批量執行測試用例等功能,可以很好的進行Web自動化測試的開發。

    可以直接查看我另外一篇博文總結:unittest單元測試框架總結

    里邊詳細總結了使用unittest框架編寫測試用例思路(模板)使用unittest框架編寫測試用例實例

    目錄結構如下組織:

    如上圖:test_case目錄下有兩個測試用例,其中test_baidu.py實例代碼在博文“unittest單元測試框架總結”中有貼出。其他實例,可以參考模板實現,就不全部貼出代碼了。

    而這次需要測試的就是test_baidu.py和test_youdao.py這兩個測試用例。

 

二、執行測試用例,查找最新測試用例,自動發送測試報告

點擊返回目錄

    整個代碼執行過程可以分成三個步驟:

    1.通過unittest框架的discover()找到匹配的測試用例(以test_開頭的腳本),由HTMLTestRunner的run()方法執行測試用例並生成最新測試報告。HTMLTestRunner是Python標准卡unittest單元測試框架的一個擴展,主要用於生成HTML測試報告,以便生成一份通俗易懂的測試報告來展示自動化測試成果。

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

將下載的文件保存在C:\Python27\Lib目錄下即可。

    2.先定義new_file()函數(找到某目錄最新文件),調用new_file()函數找到測試報告目錄下最新生成的測試報告,返回最新測試報告的路徑。

    3.先定義send_email()函數(發送指定路徑下某文件的郵件),將得到的最新測試報告的完整路徑傳給send_email()函數,實現發郵件功能。

    關於發郵件功能,也可以參考我另外一篇博文:Python自動發郵件總結及實例說明

 

    代碼如下:注釋中包括實現的過程說明以及一些在測試過程中遇到的問題。

    文件命名為runtest_htmltestrunner_autosendemail.py

復制代碼
# coding=utf-8
'''
Created on 2016-7-26
@author: Jennifer
Project:整合自動發郵件功能,執行測試用例生成最新測試報告,取最新的測試報告,發送最新測試報告
問題,郵件始終不能顯示html:將電腦時間改為北京時間即可
'''
import unittest
from HTMLTestRunner import HTMLTestRunner
import time
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

#2.定義:取最新測試報告
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])
#    L=file_path.split('\\')
#    file_path='\\\\'.join(L)
    return file_path

#3.定義:發送郵件,發送最新測試報告html
def send_email(newfile):
    #打開文件
    f=open(newfile,'rb')
    #讀取文件內容
    mail_body=f.read()
#調試使用
#    print u'打印'
#    print mail_body
    #關閉文件
    f.close()
    
    #發送郵箱服務器
    smtpserver = 'smtp.163.com'
    #發送郵箱用戶名/密碼
    user = 'XXX@163.com'
    password='XXX'
    #發送郵箱
    sender='XXX@163.com'
    #多個接收郵箱,單個收件人的話,直接是receiver='XXX@126.com'
    receiver=['XXX@126.com','XXX@126.com','XXX@doov.com.cn']
    #發送郵件主題
    subject = '自動定時發送測試報告20160808'
    
    #編寫 HTML類型的郵件正文
#MIMEText這個效果和下方用MIMEMultipart效果是一致的,已通過。
#    msg = MIMEText(mail_body,'html','utf-8')
    
    msg=MIMEMultipart('mixed')
    
    #注意:由於msg_html在msg_plain后面,所以msg_html以附件的形式出現
#    text = "Dear all!\nThe attachment is new testreport.\nPlease check it."  
    #中文測試ok
#    text = "Dear all!\n附件是最新的測試報告。\n麻煩下載下來看,用火狐瀏覽器打開查看。\n請知悉,謝謝。"   
#    msg_plain = MIMEText(text,'plain', 'utf-8')    
#    msg.attach(msg_plain)
    
    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)
   
    #以附件的方式發送:但是會報554,倍163退信。--此路不通。
#    msg_html = MIMEText(mail_body,'base64','utf-8')
#    msg_html["Content-Type"] = 'application/octet-stream'  
#    msg_html.add_header('Content-Disposition', 'attachment', filename='testreport.html')
#    msg.attach(msg_html)
        
#要加上msg['From']這句話,否則會報554的錯誤。 
#要在163有限設置授權碼(即客戶端的密碼),否則會報535
    msg['From'] = 'XXX@163.com <XXX@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 '=====AutoTest Start======'
    #1.執行測試用例,生成最新的測試用例
    #指定測試用例為當前文件夾下的test_case目錄
    #如果用/可以不用r
#    test_dir='./test_case'
#Windows的cmd執行:python "D:\system files\workspace\selenium\test_project\runtest_htmltestrunner_autosendemail.py"
#不用絕對路徑會報:ImportError: Start directory is not importable: './test_case'
    test_dir = 'D:\\system files\\workspace\\selenium\\test_project\\test_case'
    #知道測試報告的路徑
    test_report_dir='D:\\pythontest\\testresult'
    
    discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
    now=time.strftime('%Y-%m-%d_%H_%M_%S_')
    filename = test_report_dir+'\\'+ now + 'result.html'
    fp=open(filename ,'wb')
#需屏蔽fp中的中文文字說明。否則在windows下執行會報:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 553: ordinal not in range(128)
    runner = HTMLTestRunner(stream=fp,title=u'測試報告',description=u'用例執行情況:')
    runner.run(discover)
#注意:調用函數一定要加括號,一個括號害死個人,哎,查了幾天的問題,才發現導致html文件始終顯示空白,就是因為close函數調用不正確,漏了括號。
    fp.close() 
    
    #2.取最新測試報告
    new_report=new_file(test_report_dir)
#調試用的
#    print new_report
    
    #3.發送郵件,發送最新測試報告html
    send_email(new_report)
    print '=====AutoTest Over======'
    
復制代碼

    直接在eclipse運行,運行結果如下:

    ..表示兩個測試用例都執行通過。

 

 

三、定時執行測試用例

點擊返回目錄

方案一:直接使用Windows任務計划執行Python測試腳本。

1.創建runner.bat

    由於runtest_htmltestrunner_autosendemail.py腳本目錄為D:\system files\workspace\selenium\test_project,

    所以在該目錄下創建runner.bat,runner.bat的內容如下:

    python runtest_htmltestrunner_autosendemail.py

    建議:可以事先在cmd命令行下執行runtest_htmltestrunner_autosendemail.py,確保該腳本能夠在Windows下正常運行。如不能正常運行,請繼續調試,找出問題,直到能夠正常運行。如下:

2.創建任務計划

2.1右鍵計算機,點擊管理,點擊任務計划程序,再點擊右方的創建任務。

2.2常規中,填寫名稱,如:定時執行Python腳本

    觸發器中,指定執行腳本時間。

    最重要的是操作設置:

    程序和腳本填寫runner.bat這個文件的名稱

    起始於填寫runner.bat所在路徑,D:\system files\workspace\selenium\test_project

    如下:

3.查看

    在任務計划程序庫中,就會出現該任務。

 

方案二:使用Jenkins定時執行腳本

    Jenkins是基於Java開發的一種持續集成工具,用於監控持續重復的工作,所以可用於定時執行python腳本。

環境准備:jdk1.7及以上+Jenkins[+tomcat(可選)]

    Jenkins的安裝可以通過tomcat作為容器安裝,由於Jenkins包就自帶了servlet,所以我們只需要下載安裝就可以直接啟動。 

    jenkins下載地址:http://jenkins-ci.org   選擇LTS(長期支持的版本),比較穩定,下載war包。
第一種啟動方法,切換到jenkins.war存放的目錄(隨便哪個目錄),輸入如下命令:
> java -jar jenkins.war   #這樣的話默認端口是8080
若要指定端口,則:
>java -jar jenkins.war --httpPort=8080
然后在瀏覽器中(推薦用火狐)輸入localhost:8080,localhost可以是本機的ip,也可以是計算機名。就可以打開jenkins.
 
我就是用第一種方法安裝Jenkins。
 
第二種方法是用tomcat打開
tomcat下載地址:http://tomcat.apache.org/
解壓tomcat到某個目錄,如D:\tomcat9,進入tomcat下的/bin目錄,啟動tomcat:即雙擊startup.bat文件

 

將jenkins.war文件放入tomcat下的webapps目錄下,啟動jenkins時,會自動在webapps目錄下建立jenkins目錄,所以在地址欄上需要輸入的地址於上一種方法有點不一樣。
 
項目配置
點擊左方的“新建”。

下方為配置說明:

 

說明:日程表依次是 分鍾 小時 日 月 星期

*:表示每,每分鍾,每小時,每天,每月,每星期等

, :表示指定列表范圍。

- :表示區間范圍 

所以0 1 * *  1-5 表示 每個月的星期一到星期五,凌晨一點定時執行腳本。

說明:執行腳本的命令。

上面配置完成后點擊保存即可。

 

立即構建

可先手動構建項目,查看項目是否能夠執行通過。

點擊左方的“立即構建”

 構建完成后,Build History就會有一條記錄。

 

點擊這條歷史記錄進去

再點擊Console Output,可查看到日志,Finished: SUCCESS,說明已成功。

 

 

四、成果驗收

點擊返回目錄

    然后只需要靜靜的等待,測試報告郵件的到來。

 

    在此需要感謝蟲師編著的“selenium2 自動化測試實戰 基於Python語言”。

(尊重筆者的勞動哦,轉載請說明出處哦。)


免責聲明!

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



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