Jenkins+JMeter+Ant 接口持續集成
- 2019 年 11 月 13 日
- 筆記
JMeter安裝
JMeter安裝包:
-
下載地址:https://jmeter.apache.org/download_jmeter.cgi
-
依賴JDK環境
JDK環境配置:
-
JAVA_HOME E:jdk1.8.0_51
-
CLASSPATH %JAVA_HOME%lib;%JAVA_HOME%libtools.jar;
JMeter配置文件修改
為什麼要修改配置文件
-
jmeter執行結果文件默認保存的不是xml格式,無法轉化成html格式
-
jmeter執行結果文件默認有很多執行數據是不保存的,而測試報告需要這些數據
-
配置文件路徑 ${jmeterhome}/bin/jmeter.properties
-
配置文件修改內容:修改jtl文件格式:去掉注釋(#),修改csv為xml
如果出現如下內容,說明安裝成功:
Buildfile: build.xml does not exist!
Build failed
Ant相關使用:
定製集成Ant配置文件(bulid.xml):
具體參看build.xml文件
-
<?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="all" basedir="."> <tstamp> <format property="time" pattern="yyyyMMddhhmm" /> </tstamp> <!-- 需要改成自己本地的 Jmeter 目錄 --> <property name="jmeter.home" value="E:apache-jmeter-3.2" /> <!-- jmeter生成jtl格式的結果報告的路徑 --> <property name="jmeter.result.jtl.dir" value="C:UsersAdministrator.jenkinsworkspaceMiaomiApireportjtl" /> <!-- jmeter生成html格式的結果報告的路徑 --> <property name="jmeter.result.html.dir" value="C:UsersAdministrator.jenkinsworkspaceMiaomiApireporthtml" /> <!-- 生成的報告的前綴 htmlm名稱與jenkins,HTML directory to archive 設置一致,否則報告會出現404--> <property name="ReportName" value="TestReport" /> <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/index.html" /> <target name="all"> <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="E:ApiTestjmx" includes="*.jmx" /> </jmeter> </target> <!-- 解決html報告中沒有日期,以及NAN的問題--> <path id="xslt.classpath"> <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> </path> <target name="report"> <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp> <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"> <!-- 解決html報告中沒有日期的問題--> <param name="dateReport" expression="${report.datestamp}"/> </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提供了多個模板文件可供使用
-
將bulid.xml文件拷貝到:C:UsersAdministrator.jenkinsworkspace工作目錄 下
Jenkins相關插件介紹與配置:
Jenkins,之前叫做Hudson,是基於Java開發的一種持續集成工具,用於監控持續重複的工作,包括:
1. 持續的軟件版本發佈/測試項目。
2. 監控外部調用執行的工作。
Jenkins部署:
-
下載地址:https://jenkins.io/index.html
-
下載war包,將jenkins.war文件放入tomcat下的webapps目錄下
-
啟動tomcat
-
瀏覽器訪問:http://localhost:8080/jenkins
-
新建項目:登錄jenkins–新建–輸入項目名稱–選擇:構建一個自由風格的軟件項目
Jenkins安裝插件:
-
登錄jenkins–系統管理–管理插件–可選插件
-
安裝:Ant Plugin、HTML Publisher plugin 、Performance plugin插件
JMeter插件:Performance plugin
-
功能:用來展示jmeter執行結果
-
配置:jenkins–選擇新建的項目–配置–增加構建後操作步驟–Publish Performance test result report–add a new report–選擇JMeter–Report files輸入: **/*.jtl
配置說明:
-
Report files:配置jtl文件路徑,相對路徑與絕對路徑均可,圖為相對路徑
-
其他選項:配置失敗比例顯示圖形等參數,按需配置
Ant插件:Ant plugin
-
功能:用來執行Ant
-
配置如下圖:
配置說明:
-
Ant Plugin可以在構建步驟中添加,直接執行構建
-
Ant Version:在jenkins–系統管理–Global Tool Configuration–ant中維護
Html展示插件:HTML Publisher plugin
-
功能:展示html報告
-
配置截圖:
配置說明:
-
HTML directory to archive:填寫生成html文件的路徑(與Ant的 build.xml中設置的保持一致)
-
index page[s]:填寫展示報告的主頁(與Ant的build.xml中設置的保持一致)
-
其他選項:按需填寫
原理說明:
-
本插件並不會自己產生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控制台中執行,jenkins–系統管理–腳本命令行:System.setProperty(“hudson.model.DirectoryBrowserSupport.CSP”,””)以解決此問題。其他由於CSP原因導致的html插件也可用此方法解決
Jenkins配置:
服務器環境與依賴:
-
Jdk:安裝並配置環境變量
-
Ant:安裝並配置環境變量
-
Jmeter:安裝並添加需要的插件
其他:
-
Jmeter+Ant,需要將${jmeterhome}/extras/ant-jmeter-1.1.1.jar文件拷貝到${anthome}/lib目錄下,否則編譯會報錯
-
Jmeter如需鏈接數據庫,需添加jdbc插件
-
如果不引入jmeter中的xslt,需要手動安裝該軟件
-
Jenkins項目配置:
-
jenkins的工作路徑,同樣的jar包都可能會生成不同的路徑。 jenkins–系統設置–系統設置
測試執行與報告優化:
測試報告模板:
jmeter自帶模板:
-
jmeter自帶了4個模板(jmeter3後降低為2個)
-
模板路徑:${jmeterhome}/extras/jmeter-results*.xsl
-
模板效果(jmeter-result-detail_21.xsl):
-
修改報告的名稱:${jmeterhome}/extras/jmeter-results*.xsl文件中<xsl:param name=”titleReport” select=”‘MiaomiTestReprot'”/>修改標紅部分
第三方模板:
-
下載地址:http://shanhe.me/node/18/314
-
把下載的文件放到jmeter的extras目錄下
-
修改jmeter.properties文件如下部分,我這裡都修改成true,這樣執行完腳本後就會保存這些結果到.jtl文件裏面:
第三方模板:
-
下載地址:http://shanhe.me/node/18/314
-
把下載的文件放到jmeter的extras目錄下
-
修改jmeter.properties文件如下部分,我這裡都修改成true,這樣執行完腳本後就會保存這些結果到.jtl文件裏面:
jmeter.save.saveservice.data_type=true jmeter.save.saveservice.label=true jmeter.save.saveservice.response_code=true # response_data is not currently supported for CSV output jmeter.save.saveservice.response_data=true # Save ResponseData for failed samples jmeter.save.saveservice.response_data.on_error=false jmeter.save.saveservice.response_message=true jmeter.save.saveservice.successful=true jmeter.save.saveservice.thread_name=true jmeter.save.saveservice.time=true jmeter.save.saveservice.subresults=true jmeter.save.saveservice.assertions=true jmeter.save.saveservice.latency=true jmeter.save.saveservice.connect_time=true jmeter.save.saveservice.samplerData=true jmeter.save.saveservice.responseHeaders=true jmeter.save.saveservice.requestHeaders=true jmeter.save.saveservice.encoding=true jmeter.save.saveservice.bytes=true jmeter.save.saveservice.url=true jmeter.save.saveservice.filename=true jmeter.save.saveservice.hostname=true jmeter.save.saveservice.thread_counts=true jmeter.save.saveservice.sample_count=true jmeter.save.saveservice.idle_time=true
l 修改build.xml文件,如下style的值修改為新下載的xsl文件名:
-
<xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl"> <param name="dateReport" expression="${report.datestamp}"/> </xslt>
輸出的報告如圖:
關注微信公眾號,自動化測試交流