前言:jenkins+jmeter的組合大家肯定都不陌生,持續集成的意義也不必多說,在此給出jenkins+jmeter的經典組合,希望能給正在做或計劃做這項工作的童鞋一點幫助。
基本思路:svn維護測試用例.jmx文件及相關參數化文件,jenkins負責調度,jmeter負責執行用例;
具體實現步驟如下:
一:安裝jenkins
1.前往jenkins官網下載jenkins.war包:https://jenkins.io/download/
2.將下載的Jenkins.war包放入tomcat的webapps下,重啓tomcat,在瀏覽器中輸入:服務器IP/jenkins訪問,如192.168.9.83:8080/jenkins
<?xml version="1.0" encoding="UTF-8"?>
<project name="jmetertest" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- Jmeter 目錄-->
<property name="jmeter.home" value="/app/apache-jmeter-3.1" />
<!-- 測試結果存放目錄 -->
<property name="jmeter.result.home" value="/app/tomcat-8.0.22-jenkins-7085/webapps/webDemo01/resultOnline" />
<!-- jmeter生成jtl格式的結果報告的路徑-->
<property name="jmeter.result.jtl.dir" value="${jmeter.result.home}/jtl" />
<!-- jmeter生成html格式的結果報告的路徑-->
<property name="jmeter.result.html.dir" value="${jmeter.result.home}/html" />
<property name="jmeter.result.html.dirDetail" value="${jmeter.result.home}/htmlDetail" />
<!-- 生成的報告的命名-->
<property name="ReportName" value="ParkbeesAPITestReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
<property name="jmeter.result.htmlNameDetail" value="${jmeter.result.html.dirDetail}/${ReportName}Detail${time}.html" />
<!--要發送的郵箱地址-->
<property name="mail_to" value="[email protected]"/>
<!--<property name="mail_to" value="[email protected],[email protected],[email protected],[email protected]"/>-->
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="sendEmail"/>
</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="${jmeter.home}/jmx/online" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<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="report">
<tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
<!--報告1-->
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
<!--報告2-->
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlNameDetail}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<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>
<target name="sendEmail">
<mail
mailhost="smtp.163.com"
mailport="25"
subject="XXX線上巡檢報告"
messagemimetype="text/html"
tolist="${mail_to}"
from="[email protected]"
user="[email protected]"
password="XXX"
ssl="false">
<fileset dir="${jmeter.result.html.dir}">
<include name="${ReportName}${time}.html"/>
</fileset>
<fileset dir="${jmeter.result.html.dirDetail}">
<include name="${ReportName}Detail${time}.html"/>
</fileset>
<message>
以下爲本次XXX主流程巡檢結果,點擊鏈接(已添加外網映射)查看報告,也可下載附件進行查看。(建議用chrome、firefox等非ie內核瀏覽器打開):<br />
PS:如果覺得附件不夠方便,可以添加一個外鏈,這樣隨時隨地都可以訪問了,如下:
報告一(巡檢概況):<br />
http://www.szkljy.com/webDemo01/resultOnline/html/${ReportName}${time}.html <br />
報告二(請求及響應詳情):<br />
http://www.szkljy.com/webDemo01/resultOnline/htmlDetail/${ReportName}Detail${time}.html <br />
</message>
</mail>
</target>
</project>
4.windows下,管理員cmd運行剛剛的build.xml文件:ant -f build.xml
5.進到build.xml文件中所設置的存放測試結果的目錄,查看測試報告:
6.注:如果要使用jmeter.results.shanhe.me.xsl格式,必須要把bin目錄下的jmeter.properties配置文件按以下修改:
7.注意:在linux下用ant批量執行jmx文件,需下載jmeter.tgz的包,配置jmeter環境變量:
vim /etc/rpofile,修改完成後source /etc/profile使其立即生效
另外,如果在linux下發送郵件時,提示:
執行hostname -i,如果沒有出現hostname或者IP,說明/etc/hosts裏面沒有給127.0.0.1對應地址。
解決方法:編輯/etc/hosts,添加 127.0.0.1 ${hostname} (hostname用hostname命令查看),即可正常發送郵件。
至此ant+jmeter的組合已經搭建完成。
以上,巡檢所需的基本組件已經配置完畢,接下來就是把他們都串聯起來。
三.jenkins+jmeter配置
1.新增自由風格項目,進入項目配置界面
2.以下是我的配置詳情:
a.設置構建後工程保留的天數和個數,這個視自身情況而定:
b.我這裏沒有設置源碼管理,因爲我直接在發佈的.sh文件中寫了從svn獲取最新源碼進行打包及分發到tomcat,以及從svn獲取大家提交的jmx文件進行執行:
構建器配置的是每天晚上23:00執行構建,這個時間不是很準確,大概會往後延十幾分鍾,另外,該構建器還可以支持每隔多少時間執行構建等,詳細可以百度或者點擊邊上的?幫助按鈕查看。
c.構建執行的腳本,我這裏構建所要做的事情分兩步,一步是從svn獲取源碼打包分發及獲取jmx文件;另一步是執行ant的xml文件執行測試。
如果是做線上巡檢,則不需要配置從svn獲取源碼這一步。
d.構建失敗則發送郵件到指定郵箱:
至此,所有配置已經完畢。