1. 程式人生 > >Python編寫執行測試用例及定時自動傳送最新測試報告郵件最完整的自動化測試流程(轉)

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

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

目錄

環境準備:

作業系統:Windows7

整合開發環境:eclipse+pydev

一、編寫測試用例

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

    目錄結構如下組織:

    如上圖: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()函式,實現發郵件功能。

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

    檔案命名為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 = '[email protected]'
    password='XXX'
    #傳送郵箱
    sender='[email protected]'
    #多個接收郵箱,單個收件人的話,直接是receiver='[email protected]'
    receiver=['[email protected]','[email protected]','[email protected]']
    #傳送郵件主題
    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'] = '[email protected] <[email protected]>'
#    msg['To'] = '[email protected]'
    #多個收件人
    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語言”。

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

好文要頂 關注我 收藏該文  

+加關注

6

0

posted @ 2016-08-09 10:37 啄木鳥兒 閱讀(43704) 評論(10) 編輯 收藏

發表評論

  回覆引用

#1樓 2016-10-12 17:31 |  

你好,我現在做的是手工測試,去年6月畢業了,但是到現在覺得手工測試不行,所以尋求發展。可不可以加你qq啊,想要交流下關於自動化測試和麵試準備,迷茫。謝謝。

支援(0)反對(0)

  回覆引用

#2樓 2016-10-12 17:31 |  

哦,對了我的qq是2275680278,謝謝啦

支援(0)反對(0)

  回覆引用

#3樓[樓主] 2016-10-12 17:38 |  

@ jingleHu
建議你加 287899100這個selenium進階群,裡面很多大神。或者看蟲師的部落格,http://www.cnblogs.com/fnng/ 他比較牛,我也是看他的書來著。對了,那個進階群裡邊有他哦。你才畢業一年就想要做自動化測試,已經很不錯了,有人生目標,加油哦。

支援(0)反對(0)

  回覆引用

#4樓 2016-10-13 15:35 |  

@ 啄木鳥兒
可不可以讓你給我點建議啊,對於我目前的情況:

畢業之後,來到目前公司一直做黑盒手工測試,有時候會用一用sql,到目前為止工作中也沒使用過其他什麼工具。
所以,現在越來越覺得自己只是黑盒測試,沒有什麼競爭力,想要提升下自己的能力。
於是
1) 去年自學了下loadrunner,能夠基本使用。
2) 今年自己學習了selenium/python會一些基本的知識。蟲師的書還在看之中。
3) 黑盒測試的基礎理論方法,應該來說目前還可以。

a. 目前的自動化測試學習因為沒有具體的實踐,感覺學完還是空空的,是種說會也會點,不會也很多的感覺;
b. 看了一些面試題,網上關於selenium python的還不太多,把看過的基本弄會了;
c. 看了有些面試也需要 程式碼、演算法、網路、作業系統...等等的能力,雖說大學學過,可是現在也不知道怎麼撿起來?要撿到什麼程度,要是所有都撿起來,我也有點怵。
還是說等到具體公司需要用了再去學?

然後現在不知道該怎麼辦了?有點凌亂。

1. 我也不知道自己現在能力處於什麼樣的程度,到沒到可以面試自動化測試職位的地步?
2. 自己要學到什麼樣程度可以去面試,去找自動化的工作?
3. 之前大學中學過C++/C#/java/演算法...等等,可現在畢業一年半不用,也忘得差不多,想撿起來,也不知道對於測試撿哪些,如何撿?

因為心裡沒底,所以遲遲不敢發簡歷面試,心裡還是有些怵;
然後也糾結自己這種情況是應該是今年過完再投簡歷面試,還是現在?
因為我目前沒有年假,請假面試一天也扣挺多錢,對我這種本來薪資就低的人,到手的更少了,我也心疼。

懷念大學時候,有老師不僅告訴你學什麼,還告訴你怎麼學,給你指導,意見,建議。。。
現在沒人告訴你學什麼,你自己決定。怎麼學,遇到問題,都大多要靠自己,現在想想有個這方面指導的人該有多好。

所以好想有有經驗的測試者可以給個建議或者可以一起交流,能幫我這種的人指指路,領領路,
看我這種情況應該怎麼辦,謝謝了~~~

相關推薦

完整自動化測試流程Python編寫執行測試定時自動傳送最新測試報告郵件

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

Python編寫執行測試定時自動傳送最新測試報告郵件完整自動化測試流程

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

測試設計---上傳圖片、檔案匯出、檔案上傳、查詢搜尋

一、上傳圖片 1、對於上傳的圖片,假設系統要求上傳的格式為jpg或gif格式圖片,大小為<=某M的圖片 測試用例: (1)上傳圖片格式為jpg或gif的圖片,大小<=某M,成功上傳; (2)上傳圖片格式為jpg或gif的圖片,大小>某M,不能上傳;

編寫測試一個例子

一.概念 1.什麼是測試用例? 在測試過程中很重要的一類文件,它是測試工作的核心、是一組在測試時輸入輸出的標準、是軟體需求的具體對照。 2.測試用例的作用: 檢驗軟體是否滿足客戶需求、體現一個測試人員的工作量、展現測試用例的設計思路 3.測試用例所包含的內容: 用

如何編寫測試的意義

一.概念 1.什麼是測試用例? 在測試過程中很重要的一類文件,它是測試工作的核心、是一組在測試時輸入輸出的標準、是軟體需求的具體對照。 2.測試用例的作用: 檢驗軟體是否滿足客戶需求、體現一個測試人員的工作量、展現測試用例的設計思路 3.測試用例所包含的內容: 用例編號、用例名稱、測試背景、前置條件、優先

MFC單文件框架分析執行流程

原文轉自 https://blog.csdn.net/u011619422/article/details/40402705   首先來分析一下MFC單文件類的結構: 它包括如下幾個類: CAboutDlg :  對話方塊框類,對應應用程式的“幫助”->“關於”選單,彈出“關

Android開發中怎樣多進程、多進程的好處、多進程的缺陷、解決方法

傳遞 標簽 事情 打印 ide 即時通訊 ice cati 一個數 轉自:http://blog.csdn.net/spencer_hale/article/details/54968092 1.怎樣用多進程 Android多進程概念:一般情況下,一個應用程序就是一個進

Spark執行流程

dep 相關 集群管理 十個 多個 運行原理 啟動 因此 分享圖片   原文地址:http://blog.jobbole.com/102645/    我們使用spark-submit提交一個Spark作業之後,這個作業就會啟動一個對應的Driver進程。

SMTP協議POP3協議-郵件發送和接收原理

賬戶 pub 上進 現實生活 targe base64編碼 郵局 list amr 本文轉自https://blog.csdn.net/qq_15646957/article/details/52544099 感謝作者 一、 郵件開發涉及到的一些基本概念 1.1、郵件服

am335x uboot2016.05 MLO u-boot.img執行流程

eve eset dog 不同的 common 速度 star setup oba am335x的cpu上電後,執行流程:ROM->MLO(SPL)->u-boot.img 第一級bootloader:引導加載程序,板子上電後會自動執行這些代碼,如啟動方式(SD

申請付費蘋果開發者賬號 注意事項流程

一、基礎知識 蘋果開發者賬號分為 個人(individual),公司(company),企業(enterprise)三種類型。個人賬號只能有一個開發者,公司賬號允許多個開發者協作開發,企業賬號其App只能用於內部員工使用,是無法對外公開的。所以,通常情況下大家都是選擇個

CentOS6修改主機名(hostname) 修改/etc/hosts 檔案,增加ip和hostname的對映關係

/etc/sysconfig/network用任一款你喜愛的編輯器開啟該檔案,裡面有一行 HOSTNAME=localhost.localdomain (如果是預設的話),修改 localhost.localdomain 為你的主機名。/etc/hosts開啟該檔案,會有一行 127.0.0.1 localh

MyBatis原始碼解析——執行流程

一、MyBatis簡介   MyBatis框架是一種輕量級的ORM框架,當下十分流行,配合Spring+Spring MVC組成SSM框架,能夠勝任幾乎所有的web專案工程。   MyBatis不同於Hibernate的最重要的地方就是SQL部分,MyBatis中你可

python利用unittest進行測試執行的幾種方式

尋找 顯示 成員 使用方式 main down 測試的 支持 ase 利用python進行測試時,測試用例的加載方式有2種: 一種是通過unittest.main()來啟動所需測試的測試模塊; 一種是添加到testsuite集合中再加載所有的被測試對象,而test

python呼叫unittest組織執行測試時,autoit按鍵不能釋放,指令碼卡住的情況

suite.addTest(Test_PcIndexPage(“test_getindexpage”)) #開啟pc首頁 suite.addTest(Test_Pclogin(“test_pcLogin”)) #登入 在第一個指令碼的結尾處加上如下程式碼,

Python測試】unittest原始碼解析一----測試是如何被執行

在Python的單元測試中,有各種不同方式來執行使用者的測試用例,在接下來的篇幅中,我們會詳細敘述每種方式的具體執行流程。 先來看下unittest中的__init__.py中提供的一個測試用例案例: import unittest class In

測試編寫管理

前段時間將專案中的測試用例進行了一次大規模的整理,從工作量出發認識到了測試用例書寫及管理規範的重要性。規範的測試用例管理可以為後續的測試工作節約不小的工作量。 隨著網際網路時代的到來,專案迭代的頻率越來越快。測試用例的可持續性尤為重要。如何有效的將測試用例進行編寫及管理慢慢

jenkins定時編譯節省測試執行時間

使用jenkins定時編譯結果執行自動化測試。 當自動化測試的用例較多時,每次執行都重新編譯build會浪費一些時間,並且會有程式碼提交不對等原因導致工程build失敗的情況,影響正常自動化測試工作的進行。現已有持續整合定時build監控任務,這篇部落格是說

Python之使用unittest框架和HTMLTestRunner.py檔案實現多個測試執行測試報告生成

HTMLTestRunner.py檔案下載連結:http://tungwaiyip.info/software/HTMLTestRunner.html 一直想讓使用HTMLTestRunner生成的測試報告可以儲存在指定的檔案目錄下,並以當前執行的時間進行命名,在網上有找

selenium之批量執行測試生成HTML結果文件

col strftime 指定 class ast pattern fault import 測試報告 使用HTMLTestRunner運行測試套件,自動生成html測試報告: 1 import unittest, HTMLTestRunner, sendmail_ht