修改時間 |
修改內容 |
修改人 |
2016.5.22 |
創建 |
劉永志 |
2016.6.15 |
完成 |
劉永志 |
前言:
為什么要用Jmeter做接口測試:
當選擇這套方案的時候,很多人會問,為什么選擇Jmeter做Case管理?為什么不自己寫框架?說實話,自己寫框架有很大優勢,比如易於拓展,易於定制。Testhome上也有很多很牛逼的框架,看着就讓人流口水的。很多大公司都是自己寫的框架,有WEB界面(我對界面有偏愛),有簡潔的Case編寫方式,有很好用的錄制方法…以至於我曾經也嘗試寫過一個(Java+Testng執行+Xml管理Case),但是過程很坎坷,遇到了很多坑(技術積累不足是很重要的一方面)。例如編寫Case的時候調試很麻煩,后續拓展需要不斷維護(不斷封裝新的參數獲取方法)等等。所以,最終選擇了它,大家可以自己嘗試體會下。
Jmeter做接口測試的優勢:
- Jmeter支持錄制,工具有Gui界面,入手相對簡單。
- Gui便於調試,本地調試通過上傳,管理容易。
- 維護成本很小,Jmeter功能比較全面,不會讓自己陷入不停的維護框架的坑。
- Jmeter Case是基於xml的(雖然后綴是jmx格式),執行結果也可以導出xml格式(結果為jtl后綴)
Jmeter做接口測試的缺陷:
- 單條Case執行依賴本地
- Jmeter編寫Case有一定學習成本
- 拓展性稍差,Case基於xml格式管理,后續如果想要自己編寫平台,導出這些Case是個不小的工作量。
Jmeter+Jenkins+Ant實施方案的適用范圍:
- 小型公司或小團隊,大公司有自己的平台,后續需求也多,還是自己寫一套吧。
- 測試團隊較小,沒有專門的測試開發部門支持。
- 編程不是很牛逼的,如果你很厲害,自己能搞定所有前端,后台,自己搞比較好。
- 需要立刻出活的,不想將有限的精力放到后期維護當中的。
Jmeter相關插件安裝:
插件安裝:
Jmeter的插件安裝很簡單,只需要下載對應插件解壓即可。
- 下載地址:http://jmeter-plugins.org/downloads/all/
- 下載后解壓放入:apache-jmeter-2.12\lib\ext\目錄下
-
重啟jmeter
ps:數據庫鏈接驅動如果需要需要專門下載,例如mysql需要jdbc的jar包,地址:http://dev.mysql.com/downloads/file/?id=462850
用例生成與導出:
Jmeter的用例格式為jmx文件,實際為xml格式,感興趣可以學習下自己定制生成想要的jmx文件。
-
生成原則:
- 每個功能模塊為一個獨立的jmx文件。增加可維護性。(盡量不要將一個jmx文件放入太多功能,后期維護成本會很高。)
- 模塊的私有變量保存在模塊中,多模塊共有的(例如服務器ip端口等)可以考慮存在單獨的文件中讀取。
- 接口測試不要放太多線程,畢竟不是做壓力測試,意義也不大。
-
導出方法:
- 編寫測試用例
-
文件——保存為——確定:
Jmeter配置文件修改:
-
為什么要修改配置文件
- jmeter執行結果文件默認保存的不是xml格式,無法轉化成html格式
- jmeter執行結果文件默認有很多執行數據是不保存的,而測試報告需要這些數據
-
配置文件路徑
${jmeterhome}/bin/jmeter.profile
-
配置文件修改內容:
-
修改jtl 文件格式:
去掉注釋(#),修改csv為xml
-
添加jtl文件結果參數:
根據想要保存的參數修改,若不會可參照后文第三方模板網址給出的參數修改。
修改后別忘記去掉注釋(#)
-
Jenkins相關插件介紹與配置:
Jenkins插件安裝方法本文不做介紹,感興趣的可以查資料學習下。
Jmeter插件:Performance plugin
- 功能:用來展示jmeter執行結果
-
配置截圖:
-
配置說明:
- Report files:配置jtl文件路徑,相對路徑與絕對路徑均可,圖為相對路徑
- 其他選項:配置失敗比例顯示圖形等參數,按需配置
Ant插件:Ant Plugin
- 功能:用來執行Ant
-
配置截圖:
-
配置說明:
- Ant Plugin可以在構建步驟中添加,直接執行構建
- 另外一種方式就添加shenll腳本(windows下添加dos腳本)執行構建,截圖中就是這樣操作
-
相比用插件構建,命令行構建有以下優缺點:
- 需要在服務器中直接安裝ant並配置環境變量,確保jenkins可以直接執行ant命令
-
如果Jenkins是放在tomcat容器中,需要在tomcat中配置環境變量,否則會報找不到Ant命令,具體配置如下:
-
編輯 catalina.sh 文件,加入環境變量,否則 jenkins 會報找不到 Ant 錯誤
#See the license for the……
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_31
Export JENKINS_HOME="/root/.jenkins"
-
-
靈活性更強,可以直接指定 Ant 的執行參數
Svn插件:Subversion Plug-in
- 功能:版本管理,按需使用
-
配置截圖:
-
配置說明:
- Reponsitory URL:填寫倉庫url地址
- Add按鈕:添加svn的用戶名密碼
-
其他選項:按需配置
Html展示插件:HTML Publisher plugin
- 功能:html報告展示
-
配置截圖:
-
配置說明:
- HTML directory to archive:填寫生成html文件的路徑
- index page[s]:填寫展示報告的主頁
- 其他選項:按需填寫
-
原理說明:
- 本插件並不會自己產生html文件,而是通過xslt轉化xml生成的報告
- xslt可以自己在服務器中安裝,也可以通過通過Ant配置文件指定jar包,本文就是通過Ant指定jmeter內部集成的jar包
-
生成的html文件並不是在jenkins中默認的報告路徑展示,而是會復制到${jenkinshome}/jobs/projectname/htmlreports/HTML_REPORT
目錄下
- 每次只能展示最新版本的html報告,也就是說上一次編譯的html報告會被覆蓋
-
因為jenkins安全性的問題,默認加載出來的報告是無css的,通過以下配置解決:
HTML Publisher Plugin 插件在新的Jenkins版本中會導致打開的網頁中無法加載CSS以及無法點擊按鈕的情況,由於CSP導致,可在Jenkins控制台中執行:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")以解決此問題。其他由於CSP原因導致的html插件也可用此方法解決。
Git插件:
- 功能:版本管理,按需使用
-
配置截圖:
-
配置說明:
- Reponsitory URL:倉庫地址
- Add添加git的賬號
- 使用技巧:在只能通過http連接,需要每次輸入賬號密碼的情況下,可以按如下配置,配置后即可按照填寫賬號密碼權限獲取內容。
cd /root vim .netrc 添加配置如下: machine git服務器路徑 login git賬號 password git密碼 |
Jenkins項目總體配置:
-
服務器環境與依賴
- Jdk:安裝並配置環境變量
- Ant:安裝並配置環境變量
- Jmeter:安裝並添加需要的插件
-
其他:
- Jmeter+Ant,需要將${jmeterhome}/extras/ant-jmeter-1.1.1.jar文件拷貝到${anthome}/lib目錄下,否則編譯會報錯
- Jmeter如需鏈接數據庫,需添加jdbc插件
- 如果不引入jmeter中的xslt,需要手動安裝該軟件
-
Jenkins項目配置:
-
jenkins的工作路徑,同樣的jar包都可能會生成不同的路徑。
jenkins——系統設置——高級
-
Ant相關使用:
Ant的具體使用方法本文不詳細介紹,感興趣可以自己閱讀相關資料學習一下。
定制集成Ant配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir="."> <!-- 需要改成自己本地的 Jmeter 目錄--> <property name="jmeter.home" value="/home/apache-jmeter-2.13" /> <!-- jmeter生成jtl格式的結果報告的路徑--> <property name="jmeter.result.jtl.dir" value="/root/.jenkins/jobs/ApiTest/workspace/report/jtl" /> <!-- jmeter生成html格式的結果報告的路徑--> <property name="jmeter.result.html.dir" value="/root/.jenkins/jobs/ApiTest/workspace/report/html" /> <!-- 生成的報告的前綴--> <property name="ReportName" value="TestReport" /> <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/report.jtl" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/index.html" /> <property name="lib.dir" value="${jmeter.home}/lib"/>
<path id="xslt.classpath"> <fileset dir="${lib.dir}" includes="xalan*.jar"/> <fileset dir="${lib.dir}" includes="serializer*.jar"/> </path>
<target name="run"> <antcall target="test" /> <antcall target="report" /> </target>
<target name="test"> <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> <!-- 聲明要運行的腳本。"*.jmx"指包含此目錄下的所有jmeter腳本--> <testplans dir="/root/.jenkins/jobs/ApiTest/workspace/jmx" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter> </target>
<target name="report"> <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-lyz.xsl"> <!-- 因為上面生成報告的時候,不會將相關的圖片也一起拷貝至目標目錄,所以,需要手動拷貝 --> </xslt> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> </project> |
- 如上,標紅的文字,為路徑信息,需要修改為自己的本地路徑
- style參數為生成html文件的模板文件,可以修改為自己的模板文件,jmeter提供了多個模板文件可供使用
Case管理目錄結構:
關於Case的管理,因測試主要依賴Jmeter+Ant來做,結構如下:
- ./jmx/目錄用來放Jmeter生成的Case文件(編寫時注意,不要用絕對路徑,否則后續維護成本會提高)
- ./res/目錄用來放Jmeter測試需要的相關配置文件與資源,例如帳號信息,上傳圖片接口測試所需的圖片等
- build.xml文件,Ant的配置文件
- 閱讀build.xml文件,會發先還有一個自動生成的目錄./report,該目錄下有兩個目錄jtl以及html,用來放置不同格式的測試報告。
測試執行與報告優化:
測試報告模板介紹:
-
jmeter 自帶模板
- jmeter自帶了4個模板(jmeter3后降低為2個)
- 模板路徑:${jmeterhome}/extras/jmeter-results*.xsl
-
模板效果(jmeter-result-detail_21.xsl ):
-
模板使用:
- 修改${jmeterhome}/bin/jmeter.profile配置文件,添加所需的報告參數
- build.xml文件中指定,手動操作學習下xslt工具的使用說明
-
第三方模板(本人只找到了一個第三方模板)
- 下載地址:http://shanhe.me/node/18/314
-
模板效果:
-
注意事項:
- 千萬不要忘記修改jmeter.profile文件
- 地址中介紹build.xml文件以及jmeter.profile文件具體的參數修改,不要忽視
測試報告模板優化:
-
為什么要優化模板:
- 第三方模板看起來不夠概括
- 自定義模板格局比較漂亮,默認無法查看響應數據,不便於調試
-
修改后結果:
- 基於自帶模板修改
- 添加展示響應數據內容
- 添加響應數據過長換行功能
-
修改步驟:
-
編輯jmeter-results-detail-report_21.xsl
查看響應數據,修改為
-
需要刪除build 文件中的showData 配置,否則會導致編譯出來的仍然不顯示
-
結果
-
關於拓展的思考:
Case管理的優化拓展:
- 編寫Gui工具導出與生成Case,降低Jmeter學習成本。
- jmeter的case其實xml格式,如果想要導出管理,可以編寫工具導出存儲以及編輯
- Jmeter3支持直接生成html 格式的report,目前還沒研究,有興趣的可以學習一下
,