Linux環境下搭建Jenkins+Jmeter+Ant持續集成測試平臺

Linux環境下搭建Jenkins+Jmeter+Ant持續集成測試平臺

一、JDK安裝

  1. 下載jdk18(最新版的jenkins后續不支持jdk8,所以下載jdk18):https://www.oracle.com/cn/java/technologies/javase/downloads/#java8,選擇對應的linux版本進行下載
    image-20220725095747308.png
  1. 下載后的tar包,通過rz/scp或者ftp傳輸工具(xftp/FileZilla)傳輸到目標linux服務器,解壓后移動到目標目錄,我這里是保存到/usr/tools/

    # 解壓
    tar -zxvf jdk-18_linux-x64_bin.tar.gz
    # 解壓后的文件移動到指定目錄
    mv ./jdk-18.0.1.1 /usr/tools
    
  2. 將jdk添加到環境變量

    # 打開環境變量配置文件
    vim /etc/profile
    

    在文件末尾添加java環境變量

    #java env
    JAVA_HOME=/usr/tools/jdk-18.0.1.1(你的jdk目錄)
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    PATH=$PATH:$JAVA_HOME/bin:
    export JAVA_HOME
    export CLASSPATH
    export PATH
    
  3. 重新加載環境變量

    source /etc/profile
    
  4. 驗證jdk是否安裝成功

    java -version
    
image-20220725101628643.png

二、安裝jmeter

  1. 下載jmeter包:https://jmeter.apache.org/download_jmeter.cgi,下載后上傳到服務器、解壓后移動到指定目錄,步驟和jdk安裝一樣,這里我安裝到/usr/tools

  2. vim /etc/profile配置環境變量

    在文件末尾添加jmeter環境配置

    #jmeter env
    JMETER_HOME=/usr/tools/apache-jmeter-5.5
    CLASSPATH=.:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/log4j-core-2.11.0.jar
    PATH=$PATH:$JAVA_HOME/bin:$JMETER_HOME/bin:$ANT_HOME/bin
    export JMETER_HOME 
    export CLASSPATH
    export PATH
    
  3. 重新加載環境變量

    source /etc/profile
    
  4. 驗證是否安裝成功

    jmeter -v
    
image-20220725103311215.png

三、安裝ant

  1. 下載ant,下載地址:https://ant.apache.org/bindownload.cgi

  2. 下載包上傳到服務器,解壓后移動到指定目錄

    tar -zxvf /etc/apache-ant-1.10.9-bin.tar
    mv /etc/apache-ant-1.10.9-bin.tar /usr/tools
    
  3. vim /etc/profile修改環境配置

     export ANT_HOME=/home/test/apache-ant-1.10.9
     export PATH=$PATH:$ANT_HOME/bin
    
  4. 重新加載環境變量

    source /etc/profile
    
  5. 檢查是否安裝成功,輸入ant -v,成功會出現如下信息

image-20220725104838664.png

四、Jmeter+Ant配置

  1. 文件配置

    • jmeter需要生成報告,就需要下載jmeter.results.shanhe.me.xsl,下載地址為:New XSL stylesheet for JMeter command line results report | shanhe.me
    • “jmeter.results.shanhe.me.xsl” 文件放到jmeter安裝目錄的 extras 目錄下
    • 將jmeter的extras目錄下的ant-jmeter-1.1.1.jar文件,拷貝到Ant安裝目錄的lib目錄下
    • 將jmeter的lib目錄下,把serializer-2.7.2.jar、xalan-2.7.2.jar文件復制到ant的lib目錄下
  2. 創建ant工作目錄以及報告存放目錄

    創建工作目錄我這里選擇的/usr/jmeter_test,在目錄下創建script、result和data文件夾,其中script存放jmeter腳本文件和build.xml文件,result下新建jtl和html文件存放jmeter報告,data存放csv配置的數據文件

  3. 本地下載的jmeter插件要同步到linux上的jmeter,否則運行會失敗

  4. build文件存放在script目錄中,我這里對build.xml做了點個性化配置

    <?xml version="1.0" encoding="utf-8"?>
    <project name="ant-jmeter" default="all">
        <description>
            Jmeter+Ant+Jenkins <!--文件描述,可選擇項-->
        </description>
        
        <!--定義變量并賦值,能夠減少配置工作量,后面會用到-->
        <!--定義JMeter的工作目錄,與%JMETER_HOME%指向同一個目錄-->
        <property name="jmeter.home" value="/usr/tools/apache-jmeter-5.5"/>
        
        <!--定義JMeter腳本存放目錄-->
        <property name="script.dir" value="/usr/JmeterScript/wgh/Script"/>
        
        <!--定義JMeter的測試結果存放目錄-->
        <property name="jmeter.result.dir" value="/usr/JmeterScript/wgh/result"/>
        
        <!--定義測試報告Title-->
        <property name="jmeter.result.title" value="WGH_interface 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="_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,即生成報告-->
        <target name="all" depends="run,report"/>
    
        <!--定義run任務-->
        <target name="run">
            <!--顯示上面定義的${show-data}取值-->
            <echo>funcMode = ${funcMode}</echo>
            <!--刪除前一次的測試報告,Html格式的,上面有定義${jmeter.result.name}變量的值-->
            <delete file="${jmeter.result.dir}/html/${jmeter.result.name}.html"/>
            <!--刪除前一次的測試報告,Html格式的,上面有定義${jmeter.result.name}變量的值-->
            <delete file="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl"/>
            
            <jmeter
                jmeterhome="${jmeter.home}"
                jmeterproperties="${jmeter.home}/bin/jmeter.properties"
                
                resultlog="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl">
    
                <!-- 指定測試腳本。"*.jmx"指包含此目錄下的所有jmeter腳本 -->
                <testplans dir="${script.dir}" includes="*.jmx" />
                
                <!--指定測試結果輸出格式,在此指定的是xml,也可以指定成文本格式及CSV格式-->
                <!--先暫時指定成xml格式,后續會變換成文本格式-->
                <property name="jmeter.save.saveservice.output_format" value="xml"/>
                <!--是否記錄錯誤信息,上面已經定義了${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-images這2個任務-->
        <target name="report" depends="xslt-report,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">
    
        <echo>生成接口自動化測試報告</echo>
            <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}/jtl/${jmeter.result.name}.jtl"
                out="${jmeter.result.dir}/html/${jmeter.result.name}.html"
                style="${jmeter.home}/extras/jmeter-results-detail-report${style_version}.xsl">
             <!-- style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl -->
                <param name="showData" expression="${show-data}"/>
                <param name="titleReport" expression="${report.title}"/>
                <param name="dateReport" expression="${report.datestamp}"/>
            </xslt>
        </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}/html/expand.png"/>
            <copy file="${jmeter.home}/extras/collapse.png" tofile="${jmeter.result.dir}/html/collapse.png"/>
        </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>
    <path id="lib_classpath">
     <fileset dir="${basedir}/">
         <include name="mail*.jar" />
         <include name="activation*.jar" />
        <include name="commons-email*.jar" />
         <include name="ant-contrib*.jar" />
     </fileset>
    </path>
        <!--僅僅打印前面定義的變量的值,檢查是否如你所愿,在定義變量時做調試用,可以去掉-->
             <!--target name="mail">
            <for list="hanxm@thunisoft.com" param="tmp" >
                <sequential>
                  <echo>message @{tmp}</echo> 
                    <mail mailhost="smtp.thunisoft.com" mailport="25" ssl="false" subject="ant mail" messagemimetype="text/html" user="zhangjn" password="xxxx"  tolist="@{tmp}">
                        <from address="zhangjn@thunisoft.com" />
                        <fileset dir="${jmeter.result.html.dir}">
                            <include name="*.html" />
                           <include name="*.png" />
                          </fileset>
                       <message>支持多人同時發郵件!!&lt;br /&gt;&lt;br /&gt;</message>
                    </mail>
               </sequential>
             </for>
         </target-->
     
     <echo>jmeter.home = ${jmeter.home}</echo>
     
    </project>
    
  5. 修改jmeter.properties文件如下部分,都改成true,讓報告輸出的內容更詳細

    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=false
    # 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
    # Only available with HttpClient4
    jmeter.save.saveservice.connect_time=true
    jmeter.save.saveservice.samplerData=false
    jmeter.save.saveservice.responseHeaders=false
    jmeter.save.saveservice.requestHeaders=false
    jmeter.save.saveservice.encoding=false
    jmeter.save.saveservice.bytes=true
    # Only available with HttpClient4
    jmeter.save.saveservice.sent_bytes=true
    jmeter.save.saveservice.url=true
    jmeter.save.saveservice.filename=false
    jmeter.save.saveservice.hostname=false
    jmeter.save.saveservice.thread_counts=true
    jmeter.save.saveservice.sample_count=false
    jmeter.save.saveservice.idle_time=true
    

    這倆個也ctrl F找出來改下

    jmeter.save.saveservice.output_format=xml (csv改為xml)

    server.rmi.ssl.disable=true (false改為true)

  6. 測試運行

    在以上步驟都完成后,進入script目錄,直接運行ant命令

    [圖片上傳失敗...(image-43ba7f-1658731744869)]

    提示BUILD SUCCESSFUL,即運行成功

    可下載html查看html形式的測試報告,也可以通過jtl在jmeter里用查看結果樹查看

五、Jenkins安裝與配置

1.Jenkins安裝

jenkins有多種安裝方式,我這里使用的是rpm安裝

  1. 下載jenkins的rpm包

    下載地址:https://jenkins.io/zh/download/或者https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/

  2. 安裝rpm包及配置

    • 安裝:

      rpm -ivh jenkins-2.358-1.1.noarch.rpm
      
    • 配置

      vim /etc/sysconfig/jenkins 修改端口號,8080有可能被占用
      JENKINS_PORT=“8090”

      vim /usr/lib/systemd/system/jenkins.service同步修改里面的端口號

      vi /etc/init.d/jenkins 編輯Jenkins配置文件,添加jdk的Java路徑

image-20220725111257597.png

重新配置的端口可能沒有開放,這里需要開放端口

# 開啟防火墻
systemctl start firewalld
# 開放指定端口
firewall-cmd --permanent --zone=public --add-port=8090/tcp
# 重啟防火墻
Firewalls-cmd --reload
netstat -ntlp   //查看當前所有tcp端口·
netstat -ntulp |grep 8090   //查看所有8090端口使用情況·
  1. 啟動

    # 重新加載配置
    systemctl daemon-reload 
    # 啟動
    systemctl start jenkins
    # 查看jenkins狀態
    systemctl status jenkins.service 
    

    安裝好之后,打開瀏覽器,輸入http://服務器IP:8090/,進入jenkins頁面

image-20220725112608489.png

2.Jenkins配置

插件安裝:

點擊系統管理->插件管理,在可選插件依次安裝Ant PluginHTML Publisher pluginGroovyEmail Extension

系統設置

  • 點擊系統管理->系統設置,進入到這個頁面,編輯全局屬性

    添加環境變量ANT_HOMEJAVA_HOME

image-20220725132126340.png

全局工具配置

找到Ant,添加ant的名字,和ANT_HOME路徑

[圖片上傳失敗...(image-f9622f-1658731744869)]

3.項目配置

  1. 點擊新建任務,選擇構建一個自由風格的軟件項目
1658731571341.jpg
  1. 添加構建操作
    1. 增加構建操作,選擇Execute system Groovy script在在命令行輸入

      System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "script-src 'unsafe-inline'")
      

      這個命令是用于處理測試報告樣式無法加載問題的

    2. 再增加加構建操作,Invoke Ant選擇ant版本,需要運行的節點填寫你build.xml文件中的節點,BuildFile就選擇腳本目錄下面的build.xml的路徑

image-20220725133745727.png
  1. 構建后操作
    • 增加構建后操作,選擇Publish HTML reports

    • HTML directory to archive,填寫包含存放路徑

    • Index page[s],填寫報告名字,如果有多個報告,可以填寫*.html

image-20220725134343387.png
  1. 構建定時任務

    點擊構建觸發器->定時構建

image-20220725135358024.png

定時任務構建規則:

*     匹配范圍內所有值
M-N   匹配M~N范圍內所有值
M-N/X 或者 */X   在指定M~N范圍內或整個有效區間內每隔X構建一次 
A,B,...,Z        匹配多個值
1658731901003.jpg

實例說明

每隔5分鐘構建一次
H/5 * * * *

每兩小時構建一次
H H/2 * * *

每天中午12點定時構建一次
H 12 * * *

每天下午18點定時構建一次
H 18 * * *

在每個小時的前半個小時內的每10分鐘
H(0-29)/10 * * * *

每兩小時45分鐘,從上午9:45開始,每天下午3:45結束
45 9-16/2 * * 1-5

每兩小時一次,每個工作日上午9點到下午5點(也許是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容