Jenkins+Ant+JMeter集成


Tomcat是jenkins運行的容器,jenkins實際上是依賴於Tomcat才能啟動的。Jenkins可以調度ant的腳本。

Ant和maven類似,maven是執行pom文件,ant是執行build文件。

Jenkins強大之處就是有很多插件。

一.Jenkins安裝

1.Tomcat下載,解壓。D:\software\apache-tomcat-8.0.28\webapps目錄下的東西無用可刪除。

PS:這些文件是用來打開Tomcat控制台的。

2.官網(https://jenkins.io/download/)下載jenkins.war,並將其拷貝到D:\software\apache-tomcat-8.0.28\webapps目錄下。

3.雙擊bin目錄下的startup.bat啟動Tomcat。

啟動后在%TOMCAT_HOME%\webapps目錄下可以看到war包已經自動解壓。

同時在C:\Users\Administrator目錄下多了一個.jenkins文件夾。

可以通過在瀏覽器輸入:http://localhost(或者本機ip):8080/jenkins方式訪問。

管理員初始密碼在C:\Users\Administrator\.jenkins\secrets\initialAdminPassword中。

可以在管理員-配置中修改密碼。

可以通過修改%TOMCAT_HOME%\conf\server.xml文件,修改默認端口。修改后需要重啟Tomcat。

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

安裝Performance Plugin插件。

離線安裝。先官網(http://updates.jenkins-ci.org/download/plugins/performance/)下載,再將其拷貝到%JENKINS_HOME%\plugin目錄下,重啟tomcat。沒成功?!

在線安裝。

系統管理-插件管理-Available-找到Performance-點擊install without restart。
安裝成功之后可在Installed中找到。

二.建立Slave節點(如果單機測試,此處可以忽略)

我們默認安裝的Jenkins為master模式,當有大量任務時,分布式架構會提高效率。Slave節點即為分布式的節點。Jenkins的分布式任務不需要在Slave節點上也部署一套Jenkins環境,只需要建立master與slave之間的連接,由master發出指令讓slave節點執行即可。

1.首頁-系統管理-節點管理-新建節點-輸入節點名稱,確認。

2.填寫節點的具體信息。

Jenkins新建節點,啟動方式沒有“通過Java Web啟動代理”選項怎么辦?

3.Slave連接Master。

如下圖,小紅叉代表節點沒有連接上。

點擊JmeterNode進入如下頁面,告訴我們有2種連接方式。任選一種即可。下面我們選擇第2種。

先點擊下載agent.jar,再在命令行輸入命令回車。

顯示如下信息表示連接成功。

小紅叉消失。

三.JMeter任務配置

上篇博客實例二我們已經集成了Ant+JMeter,運行Jmeter簡化成了執行一個.bat的批處理文件,在此我們只需要用Jenkins調用這個批處理文件即可。

我們需要先把build.xml和run.bat做點小小的改動。

<?xml version="1.0"?>
<project name="ant-jmeter" default="all">
    <description>
        Jmeter+Ant+Jenkins <!--文件描述,可選擇項-->
    </description>
    
    <!--定義變量並賦值,能夠減少配置工作量,后面會用到-->
    <!--定義JMeter的工作目錄,與%JMETER_HOME%指向同一個目錄-->
    <property name="jmeter.home" value="D:\software\apache-jmeter-5.1"/>
    
    <!--定義JMeter腳本存放目錄-->
    <property name="script.dir" value="D:\jmeterTest\script"/>
    
    <!--定義JMeter的測試結果存放目錄-->
    <property name="jmeter.result.dir" value="D:\jmeterTest\resultLog"/>
    
    <!--定義Jenkins的工作目錄,將來用來存放測試結果-->
    <property name="jmeter.jenkins" value="D:\jenkinsWorkshop\workspace\PerformanceTest"/>
    
    <!--定義測試報告Title-->
    <property name="report.title" value="Performance Test Summary Report"/>

    <!--定義測試結果名稱-->
    <property name="jmeter.result.name" value="Test"/>
    
    <!--測試報告中是否顯示失敗事務,n為不顯示-->
    <property name="show-data" value="n"/>
    
    <!--定義樣式版本,有更新時只需要修改此處即可,其他調用處不用更改-->
    <property name="format" value="2.1"/>
        
    <condition property="style_version" value="">
        <equals arg1="${format}" arg2="2.0"/>
    </condition>

    <condition property="style_version" value="_21">
        <equals arg1="${format}" arg2="2.1"/>
    </condition>
    
    <condition property="funcMode">
        <equals arg1="${show-data}" arg2="y"/>
    </condition>
    
    <condition property="funcMode" value="false">
      <not>
        <equals arg1="${show-data}" arg2="y"/>
      </not>
    </condition>

    <!--定義依賴包目錄-->
    <path id="jmeter.classpath">
        <fileset dir="${jmeter.home}\extras">
          <include name="ant-jmeter*.jar"/>
        </fileset>
    </path>

    <!--定義任務,即測試活動,依賴於ant-jmeter.jar包-->
    <taskdef
        name="jmeter"
        classpathref="jmeter.classpath"
        classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
    
    <!--定義任務,run運行腳本,report生成報告,copy-report復制結果-->
    <target name="all" depends="run,report,copy-report"/>

    <!--定義run任務-->
    <target name="run">
        <!--顯示上面定義的${show-data}取值-->
        <echo>funcMode = ${funcMode}</echo>
        <!--刪除前一次的測試報告,Html格式的,上面有定義${jmeter.result.name}變量的值-->
        <!--delete file="${jmeter.result.dir}/${jmeter.result.name}.html"/-->
        <!--刪除前一次的測試報告,Html格式的,上面有定義${jmeter.result.name}變量的值-->
        <!--delete file="${jmeter.result.dir}/${jmeter.result.name}.jtl"/-->
        
        <jmeter
            jmeterhome="${jmeter.home}"
            jmeterproperties="${jmeter.home}/bin/jmeter.properties"
            resultlog="${jmeter.result.dir}/${jmeter.result.name}.jtl">

            <!-- 指定測試腳本。"*.jmx"指包含此目錄下的所有jmeter腳本 -->
            <testplans dir="${script.dir}" includes="*.jmx" />
            
            <!--指定測試結果輸出格式,在此指定的是xml,也可以指定成文本格式及CSV格式-->
            <!--先暫時指定成xml格式,后續會變換成文本格式-->
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
            <property name="jmeter.save.saveservice.samplerData" value="true"/>
            <!--是否記錄錯誤信息,上面已經定義了${funcMode}=n-->
            <property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
        </jmeter>
    </target>

    <!--定義依賴包目錄-->
    <property name="lib.dir" value="${jmeter.home}/lib"/>

    <!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ -->
    <path id="xslt.classpath">
        <fileset dir="${lib.dir}" includes="xalan*.jar"/>
        <fileset dir="${lib.dir}" includes="serializer*.jar"/>
    </path>

    <!--定義report任務,此任務依賴於xslt-report,copy-html,copy-images這3個任務-->
    <target name="report" depends="xslt-report,copy-html,copy-images">
        <echo>Report generated at ${report.datestamp}</echo>
    </target>

    <!--xslt-report是使用xslt來把xml文件轉換成Html格式來顯示-->
    <!--_message_xalan 被xslt-report依賴,由它生成報告-->
    <target name="xslt-report" depends="_message_xalan">
        <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
        <!--in:將測試結果作為輸入-->
        <!--style:xslt定義的模板文件地址-->
        <xslt
            classpathref="xslt.classpath"
            force="true"    
            in="${jmeter.result.dir}/${jmeter.result.name}.jtl"
            out="${jmeter.result.dir}/${jmeter.result.name}.html"
            style="${jmeter.home}/extras/jmeter-results-detail-report${style_version}.xsl">
            <param name="showData" expression="${show-data}"/>
            <param name="titleReport" expression="${report.title}"/>
            <param name="dateReport" expression="${report.datestamp}"/>
        </xslt>
    </target>

    <!--copy-html復制結果到  目錄,放在專門目錄便於管理-->
    <target name="copy-html">
        <copy file="${jmeter.result.dir}/${jmeter.result.name}.html" tofile="${jmeter.jenkins}/${jmeter.result.name}.html"/>
        <copy file="${jmeter.result.dir}/${jmeter.result.name}.jtl" tofile="${jmeter.jenkins}/${jmeter.result.name}.jtl"/>
    </target>
    
    <!--copy-images用來cpoy圖片,xslt模板中的圖片由copy-images任務copy到報告目錄-->
    <target name="copy-images" depends="verify-images" unless="samepath">
        <!--生成Html報告時需要Copy圖標到報告目錄,expand.png展開圖標,collapse.png收起圖標-->
        <copy file="${jmeter.home}/extras/expand.png" tofile="${jmeter.result.dir}/expand.png"/>
        <copy file="${jmeter.home}/extras/collapse.png" tofile="${jmeter.result.dir}/collapse.png"/>
    </target>
    
    <!--copy-report-->
    <target name="copy-report">
        <copydir dest="${jmeter.jenkins}" src="${jmeter.result.dir}">
            <include name="*.png"/>
        </copydir>
    </target>

    <target name="verify-images">
        <condition property="samepath">
                <equals arg1="${jmeter.result.dir}" arg2="${jmeter.home}/extras/" />
        </condition>
    </target>
    
    <!--檢查依賴-->
    <condition property="xalan.present">
          <and>
              <!-- No need to check all jars; just check a few -->
            <available classpathref="xslt.classpath" classname="org.apache.xalan.processor.TransformerFactoryImpl"/>
            <available classpathref="xslt.classpath" classname="org.apache.xml.serializer.ExtendedContentHandler"/>
          </and>
    </condition>

    <target name="_message_xalan" unless="xalan.present">
        <echo>Cannot find all xalan and/or serialiser jars</echo>
        <echo>The XSLT formatting may not work correctly.</echo>
        <echo>Check you have xalan and serializer jars in ${lib.dir}</echo>
    </target>

    <!--僅僅打印前面定義的變量的值,檢查是否如你所願,在定義變量時做調試用,可以去掉-->
    <echo>jmeter.home = ${jmeter.home}</echo>
</project>
build.xml
%ANT_HOME%\bin\ant -f D:\jmeterTest\build.xml
run.bat

1.新建任務。

2.配置任務。

3.構建測試。

上面的1-4步驟是構建任務使Jenkins能夠通過Ant調度Jmeter來進行性能測試執行。

第5步驟“構建后操作”即為配置使Jenkins顯示測試結果。

4.查看報告。

點擊“立即構建”。

 構建過程中可以看到進度條。構建失敗可以點擊Console Output查看日志。

構建成功可以點擊performance report查看報告。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM