jenkins+jmeter實現線上巡檢

前言: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

按照界面上的提示,找到密碼並複製,登錄後,安裝plugins,首選安裝建議plugins,windows下可能會提示無法獲取安裝,但是點擊安裝後可以看到tomcat cmd 指令框中在不斷下載並安裝各種插件。如下圖:

linux下,點擊安裝進入安裝界面,如下圖:

3.在Global Tool Configuration中配置jdk及ant:

4.在系統設置中配置郵箱(ant也可以發送郵件,但還是在此處設置下郵箱,便於其他場景使用,如構建失敗時發送郵件):

5.另外,在jenkins執行tomcat的.sh文件時,會發現tomcat有啓動的過程,但是不會常駐後臺,看jenkins輸出的日誌,發現jenkins在構建結束之後,會殺掉所有未終止的衍生進程。 jenkins在執行構建時會設置一系列環境變量,這些環境變量將被構建衍生出的進程繼承。jenkins在殺掉衍生進程的時候會查看進程的環境變量,如果找到它之前設置的環境變量,則將其殺掉。查閱資料發現,有一個簡單的方法來避免進程被殺掉:修改jenkins設置的環境變量BUILD_ID的值,從而讓jenkins認爲此進程不是由Job的構建過程衍生的。如圖:

至此jenkins已基本安裝及配置完畢,基於它的開放性,jenkins是一款非常強大的集成工具,有很多插件來滿足我們的各種需求,在此不做贅述,在實際運用過程中可以百度這些插件的功能及使用方法。

二:ant配置(用於批量執行jmx,生成測試報告並郵件)。
1.安裝好ant後,將 jmeter的extras目錄中ant-jmeter-1.1.1.jar包拷貝至ant安裝目錄下的lib目錄中,用於ant執行jmx腳本
   將mail.jar及activation.jar放至ant安裝目錄下的lib目錄中,用於ant發送郵件
2.修改Jmeter的bin目錄下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml  
3.編寫build.xml文件:
<?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.構建失敗則發送郵件到指定郵箱:



至此,所有配置已經完畢。

發佈了32 篇原創文章 · 獲贊 51 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章