Jenkins+Jmeter+Ant持續整合
編輯推薦: |
本文來自於163yun,,主要介紹了基於Jenkins+Jmeter+Ant 的測試自動化框架環境搭建的相關內容。 |
前言
通過了解效能測試,知道了jmeter框架以及其擴充套件知識,jmeter不僅是效能測試利器而且還可以用於介面測試,經過近幾周的學習,瞭解了jmeter的相關知識。但是在使用過程中還是遇到了問題,就是指令碼較多時一一執行比較麻煩,我們不可能每次都一個一個的手動去點,這樣不僅耗時還重複麻煩,那麼有沒有什麼辦法來批量執行Jmeter指令碼呢?這個時候,我們就要想辦法使其自動化。為了自動化想到了jenkins和ant,通過檢視官方文件,發現ant有相應的JMeterTask。於是就準備一步一步的搭建基於Jenkins+Jmeter+Ant 的測試自動化框架,用於效能及介面自動化測試。其實這個方案,網上有許多的相關資料,某些資料寫的也比較詳細,在搭建該平臺時也是參照了許多類似的文章,可能有人會說網上已經有許多相關的文章,你為什麼還有寫這篇呢?說實話這個問題問的非常好,其實搭建平臺之初我內心也是沒想要寫文章的,因為發現網上相關的資料真的是太多了,根據網上的資料應該很容易搭建起來。但在實際操作中發現現實還是很骨感的,於是寫下該文章其一為了自己總結,其二在搭建過程中遇到許多奇葩的坑,分享出來給有緣人蔘考。本文重點講解自動化環境搭建的相關知識,至於如何基於jmeter進行效能和介面測試會後續給出。欲知詳情,敬請等待....
一、自動化測試環境搭建準備
1. 下載jdk1.6以上及環境配置
2.下載 ant及環境配置
3. 下載jmeter
4. 下載jenkins
上述工具的下載及環境配置可自行百度,由於篇幅原因本文不做介紹。
二、自動化測試環境適用場景
1.日常迭代介面測試的自動化。
2.專案效能測試的自動化。
三、Jenkins持續整合配置說明
環境準備工作完成後,需要在Jenkins進行相關的配置來實現自動化。Jenkins新建job及外掛安裝方法本文不做介紹,感興趣的可以自行百度搜索。本文重點講解jenkins中的ant、Performance plugin、HTML Publisher plugin和 Email Extension Plugin等外掛的配置,用於產品效能及介面測試、生成測試報告及郵件通知功能,最終實現自動化的目的。
3.1 Ant外掛:Ant Plugin
功能:用來執行Ant
配置截圖:
- 配置說明:
- Ant Plugin可以在構建步驟中新增,直接執行構建。
- targets:執行目標.
- build file:指定執行build.xml路徑.
ant外掛安裝成功後,在配置項中指定build.xml的路徑,利用jenkins自動構建時會根據路徑找到build檔案,執行檔案的配置內容。因此為了能夠實現自動化,需要定製build.xml。下面給出我的build檔案作為參考,可以通過替換路徑作為己用。
3.2 Jmeter外掛:Performance plugin
功能:展示jmeter執行結果
配置截圖:
配置說明:
Report files:配置jtl檔案路徑,相對路徑與絕對路徑均可,圖為相對路徑
其他選項:配置失敗比例顯示圖形等引數,按需配置。
3.3 Jmeter外掛:HTML publisher plugin
功能:用來展示jmeter執行結果
配置截圖:
配置說明:
- HTML directory to archive:填寫生成html檔案的路徑
- index page[s]:填寫展示報告的主頁
原理說明: 本外掛並不會自己產生html檔案,而是通過xslt轉化xml生成的報告, xslt可以自己在伺服器中安裝,也可以通過通過Ant配置檔案指定xslt路徑,本文就是通過Ant配置檔案指定xslt路徑(先下載xslt檔案)的方式生成html檔案。
因為jenkins安全性的問題,預設加載出來的報告是無css的,通過以下配置解決:
HTML Publisher Plugin 外掛在新的Jenkins版本中會導致開啟的網頁中無法載入CSS以及無法點選按鈕的情況,由於CSP導致,可在Jenkins控制檯中執行:System.setProperty
("hudson.model.DirectoryBrowserSupport.CSP", "")
以解決此問題。其他由於CSP原因導致的html外掛也可用此方法解決
3.4 jenkins郵件外掛配置
但是實際操作中發現如果介面較多時,jenkins構建需要一定的時間,為了看到最終的執行結果,我們只有一直等待或是過一段時間回來確定。但這樣都不好。如何可以讓構建結果通知相關人員?於是想到利用jenkin自帶的郵件外掛,實現實時將構建結果通知給相關人員。
3.4.1. 系統管理設定
Jenkins系統管理->系統設定
如圖,使用一個已有的郵箱(比如163或者qq)作為郵件通知郵箱,配置SMTP伺服器,郵箱的使用者名稱和密碼。切記需要開通郵箱的SMTP服務,此處踩了坑...下面會詳細介紹。
3.4.2 配置完成後可以勾選“通過傳送測試郵件測試配置”進行測試是否配置成功,如下圖則說明搭建成功。
3.4.3.Job配置
在需要郵件通知的Job設定裡面增加“構建後操作步驟”->選擇E-mail Notification
郵件通知配置可以選擇在每一次構建成功或 不成功,需要群發郵件的收件人資訊。
但是如果你群發的收件人列表比較多,或者每次通知的人不一樣,比如每次只想通知導致構建失敗的那個人(即最後一次上傳程式碼的人),
那麼簡單的E-mail Notification肯定不能滿足你的要求,需要加入下面這個外掛Email extension plugin。
如果希望分別針對構建成功和構建失敗傳送不同的郵件通知,可以點選Advanced Setting。
注意Triggers的設定,可以配置多種Triggers(觸發器),Failure-Any,Failure-1st(第一次構建失敗),Success,Fixed,Abort等等。
觸發器的種類很多,可以根據實際需要選擇。每種觸發器可以根據需要選擇Send To,比如Failure-Any可以add upstream Committers,Requestor等等。
每一個Trigger可以單獨在高階中配置Default Subject,Default Content,Recipient List等等,所以在觸發器中的這個設定是可以覆蓋上面的基礎設定的。
因為在Jenkins系統管理->系統設定中可以設定收件人,但是如果想進行修改,必須要由Job頁面返回到系統設定頁面,操作比較麻煩而且不靈活。為了靈活操作,我是通過建立引數來設定需要傳送的郵件列表,然後在Project Recipient List中通過引數進行讀取,可以靈活設定。效果如下圖:
這樣如果需要修改收件人列表,只需要用逗號將使用者郵箱分割就好,設定後構建結果就可以自動發到相關人員的郵箱,實現測試自動化。
四、測試執行與報告優化原理
jmeter執行的結果檔案預設有許多執行資料是不儲存的,但這樣生成的測試報告過於簡單,不能滿足我們的需求。因此為了得到html格式的報告且滿足我們對測試報告的需求,需要對jmeter的配置檔案進行修改,訂製測試報告的顯示形式。jmeter自帶模板,模板路徑為${jmeterhome}/extras/jmeter-results*.xsl,該模板中相應的值是通過jmeter.profile配置檔案來配置的。因此我們只需修改${jmeterhome}/bin/jmeter.profile配置檔案,設定所需的報告引數就可以了。
4.1 測試報告格式設定原理
jmeter執行的結果檔案不是xml格式的,因此無法轉換為html格式的報告。只能將其執行結果的檔案格式變為xml,才能通過xslt轉換為html。所以去掉下圖註釋(#),修改csv為xml。
4.2 測試報告資料個性化設定原理
jmeter生成的報告預設只顯示值為ture的欄位,資訊量較少。為了定製測試報告,可以根據想要儲存的引數進行修改,修改後千萬別忘記去掉註釋(#),不然是不會生效的。
4.3 xstl原始碼分析:jtl格式轉換為html原理
通過上面介紹,我們知道為了得到html格式的測試報告,需要將jmeter產生的xml檔案通過xslt工具轉換為html,但具體是怎麼轉換呢?可能大家並不太清楚,下面通過分析xslt和jtl的原始碼,詳細介紹:
4.3.1 jmeter預設生成測試報告jtl檔案程式碼:
我們將其與jemter.properties檔案進行對比分析,可以看出jtl檔案中生成的測試資料與jemter.properties檔案的值一一對應。這也就直接說明了為什麼修改jemter.properties檔案可以定製測試報告了。
4.3.2 xslt檔案原始碼
可以看出xslt通過讀取jtl中的值填充到html頁面中,生成html報告。因此定製測試報告的原理我們應該也清楚了,我們可以讀取我們需要的值顯示在我們的報告中,實現報告的定製化。
再次總結強調下測試報告優化原理:通過修改jemter.properties將我們希望生成的值設定為true,這樣在生成的jtl檔案中就會產生對應的資料。而html報告最終呈現的結果實際是xstl中通過獲取jtl的數值,因此為了設定簡單,我們可以將jemter.properties檔案中的資料欄位全部設定為true,然後通過配置xstl來的定製測試報告。xslt 用於將一種 XML 文件轉換為另外一種 XML 文件,或者可被瀏覽器識別的其他型別的文件,比如 HTML 和 XHTML。通常,XSLT 是通過把每個 XML 元素轉換為 (X)HTML 元素來完成這項工作的。通過 XSLT,我們可以向或者從輸出檔案新增或移除元素和屬性。也可重新排列元素,執行測試並決定隱藏或顯示哪個元素等等。而且xslt和html較像,容易進行二次開發。
經過上面的配置,可以得到HTML和Performance 報告
HTML報告:
Performance 報告:
至此,環境搭建已經基本完成,可以進行簡單的效能及介面測試,且可以生成定製化的測試報告,滿足了我最初的目的了。
至此一套自動化測試框架算是完整搭建成功了,雖然網上的資料較多,但是畢竟不滿足個人需求,需要將其整合或變更以便滿足自己的需求,過程中還是踩過許多坑,遇到很多坎,本文一一記錄並提供解決辦法及分析原因。
五、搭建過程中的坑及對應解決辦法
5.1.ant,jdk下載且正確安裝,環境變數也配置正確,執行jenkins,滿懷希冀的希望可以構建成功,但現實是殘酷的,構建失敗,日誌如下:
可以看出ant.bat不能識別,出現這個問題有可能是環境變數配置錯誤,於是第一反應就是重新檢視環境的配置,發現沒有問題呀。堅持不懈一次次執行,情理之中仍是失敗,錯誤日誌也一樣。命令列執行ant -version提示正確,再次證明ant配置正確,但為什麼提示失敗呢,不識別該命令呢?該框架需要ant、jdk和jenkins,初步懷疑可能jdk和ant版本衝突,於是問了下度娘,發現jdk和ant之間確實有版本要求,但是百度上沒搜到具體的資訊,於是試著去ant官網上有沒有說明,功夫不負有心人最終找到了:
可以看出ant1.9.x需要java5以上的版本,ant1.10.x需要java8。而我用的jdk7,ant用的是最新的1.10.1,所以原因不言而喻。解決辦法大家應該也知道了,我的選擇是保持jdk不變,用了1.9.x版本的ant。
5.2.檢視錯誤日誌時,提示build.xml:6: Unexpected text " "
但檢視build.xml檔案第6行沒有發現這個符號,只是第6行有行註釋。試著將其刪除,再次重新構建,錯誤定位到下個註釋的行,解決辦法就是將所有的註釋刪除,問題解決。至於為什麼有註釋會報錯,原因仍在定位,值得思考....
5.3. 問題:taskdef class org.programmerplanet.ant.taskdefs.
jmeter.JMeterTask cannot be found
這個報錯非常坑爹,是由於Ant的lib檔案沒有ant-jmeter-1.1.1.jar這個jar包,因為ant執行jmeter指令碼時會呼叫JMeterTask,但是在ant的lib檔案沒有相應的jar包。所以一直會報這個錯。解決:把jar包:ant-jmeter-1.0.9.jar放到ant的lib路徑中即可。因為JMETER的測試結果一般生成的是一份聚合報告,如果想用ANT生成具體的測試報告,需要這樣的一個jar包 ant-jmeter-1.0.9.jar 裡面提供的一個JMeterTask的類來執行JMTER的測試指令碼,生成jtl的結果檔案,然後用XSLT來把.jtl的結果檔案轉化為.html形式的結果報告。

這個問題就是由於.xsl檔案不正確導致的,解決辦法在網上找個靠譜的.xsl檔案,或是理解.xsl檔案原理自己編寫。
說明了jenkins的效能測試報告不是直接讀取jtl檔案中的資料,仍需要通過.xsl檔案轉換。
5.郵件傳送失敗

檢視日誌可知,連線不到SMTP伺服器,上網查了些資料沒有找到直接說明的文章,其中有一篇文章說明要首先郵箱開通SMTP服務,然後嘗試一下,發現可以解決問題,原因是需要在相應的郵箱開通SMTP服務,才可以傳送郵件。開通郵箱的SMTP服務後會產生密碼,將收到的SMTP服務密碼填充到系統管理設定郵件中對應的輸入框中,可以解決該問題