1. 程式人生 > >JDK+Jmeter+Ant+Jenkins介面自動化持續整合環境搭建與執行

JDK+Jmeter+Ant+Jenkins介面自動化持續整合環境搭建與執行

一、簡介

本文章主要是介紹介面自動化持續整合環境搭建以及測試例項,Apache JMeter是Apache組織開發的基於Java的介面和效能測試工具。

Apache Jmeter是一個100%的純java桌面應用,主要是針對web的壓力和效能測試,但後來擴充套件到其他測試領域。Jmeter可以用於測試FTP、HTTP、RPC、JUNIT、JMS、LDAP、WebService(Soap) Request以及Mail和JDBC(資料庫壓力測試)。  

二、整合環境搭建

1、安裝JDK:

由於jmeter是100%的純java編寫的,需要有java的執行環境,所以我們需要安裝jdk,官網連結:

https://www.oracle.com/technetwork/java/javase/downloads/index.html版本要求:最好是1.8以上

1.1、下載jdk:

 

1.2、安裝jdk:Java SE 8u191 

1.3、配置jdk環境變數

我的電腦”>滑鼠右鍵選單>"屬性">"高階系統設定">"環境變數"。

a、在系統變數裡新建“JAVA_HOME”變數,變數值為:D:\jdk1( 注:具體路徑根據自己實際安裝路徑填寫)             其為jdk的安裝路徑        b、新建“classpath”變數,變數值為:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\lib;          其為java載入類路徑,只有類在classpath中java命令才能識別,在路徑前加了個"."表示當前路徑 c、在path變數裡新增變數值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin( 注:變數值之間用“;”隔開

 1.4、在命令視窗輸入Java -version,可以檢視到jdk版本說明安裝正確。

 

2、安裝Jmeter:

 2.1、下載Jmeter:官網地址:http://jmeter.apache.org/download_jmeter.cgi

解壓就可以用,前提條件是必須是已經安裝jdk,

 

2.2、外掛下載:官網地址:http://jmeter-plugins.org/downloads/all/

外掛下載後解壓:找到JMeterPlugins-Extras.jar,把JMeterPlugins-Extras.jar放到apache-jmeter-2.12\lib\ext目錄。

2.3、配置環境變數

具體操作位置同剛jdk一樣,把jdk的java_home相應的換成jmeter的地址即可。

我的電腦”>滑鼠右鍵選單>"屬性">"高階系統設定">"環境變數";

JMETER_HOME=D:\Auto_Test\apache-jmeter-5.0(注:具體路徑根據自己實際安裝路徑填寫)   

CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;  

PATH=%JMETER_HOME%\bin

2.4、啟動jmeter 在命令視窗輸入jmeter或者在 apache-jmeter-2.12\bin\jmeter.bat啟動 (開啟後的命令視窗不能關閉,否則jmeter的GUI也不能使用)

兩種方式都能夠成功啟動說明jmeter安裝成功

 

3、安裝Ant:

Ant是一個程式碼構建工具,在這裡主要作用是為了構建我們寫的jmeter指令碼,然後再後面安裝Jenkins上可以持續整合監控到我們的指令碼情況。

3.1、下載Ant,官網下載地址:https://ant.apache.org/bindownload.cgi

 

 3.2、配置Ant環境變數

具體操作位置同剛jdk一樣,把jdk的java_home相應的換成jmeter的地址即可。

ANT_HOME=D:\Auto_Test\apache-ant-1.9.13(注:具體路徑根據自己實際安裝路徑填寫)   

PATH=%ANT_HOME%\bin

CLASSPATH=%ANT_HOME%\lib

3.3、驗證Ant是否安裝成功

在命令視窗輸入ant,出現下面提示說明安裝成功,還可以通過ant -version檢視ant版本。

 

4、安裝Jenkins

jenkins是基於java開發一個持續整合工具,在這是用於我們監控我們跑jmeter寫的介面測試用例。

4.1、安裝jenkins,官網地址:https://jenkins.io/download/

 

4.2、配置jenkins

通過在瀏覽器訪問localhost:8080/jenkins既可以進入到jenkins頁面(後面加了jenkins後訪問不不了,是bug,直接去掉jenkins,如果你的8080埠沒有被佔用的話)

    初始的管理員密碼,jenkins自動生成的,根據上面紅色的路徑找到密碼,拷到下面的輸入框中。 然後彈出安裝jenkins外掛的頁面,如果出現無法自動安裝外掛,檢視是否有防火牆和網路,實在不行得通過離線方式進行安裝,我這是線上自動安裝的。 接下來是建立使用者和密碼。

 

 然後就可以建立任務了。

這個是我們百度雲的安裝包,有需要的朋友可以下載:

連結:https://pan.baidu.com/s/1MANCRvZg9BinUyso1DXCKA 
提取碼:wqbo 

 

三、Python開發http介面(這個可以不關注)

一般公司介面測試,開發會提供明確的介面文件,包含介面地址、請求方式、入參、出參等以及各個返回值的對應的含義。

具體開發不做詳細介紹哈,有興趣的朋友可以一起探討下。

 

四、Jmeter設計介面測試的指令碼以及用例場景

1、開啟jmeter,建立測試計劃,在測試計劃下面建立執行緒組,執行緒組本質就是併發使用者數。

在這邊簡單介紹一個http介面用jmeter開發的指令碼

在測試計劃元件下,滑鼠右鍵新增執行緒組

2、新增取樣器,我們這篇文章主要介紹http請求,jmeter支援其他ftp、jdbc、tcp請求,都是類似的操作,後續會更新。

 

 

3、根據介面文件維護http取樣器引數

 

4、判斷請求結果是否正確,我們可以新增響應斷言,

 

 5、為了能夠很直觀的檢視到測試結果,我們可以新增監聽器,其中可以新增檢視結果樹和聚合報告

 

 這樣一個很簡單的介面測試指令碼就完成了,像我們這邊做介面測試進行測試時是需要考慮接下來幾個場景:

5、介面測試用例設計

a、功能測試:正常場景(通過性驗證)、引數測試(引數組合)、異常場景(空)等

b、效能測試:響應時間、吞吐量、併發數等

c、安全測試:敏感資訊、許可權、資料加密、SQL注入等

 

6、一個完整的介面測試指令碼

a、新增http頭資訊管理器,用於處理請求中存在中文的編碼問題

b、新增使用者自定義變數,相當於我們的全域性變數,在整個測試計劃中都可以使用

c、新增功能測試場景用例

d、新增效能測試場景

e、引數化不可變資料,為了模擬真實的使用者場景,使資料不重複

g、新增後置處理器BeanShell PostProcessor,用於處理響應中存在中文的編碼問題

h、新增監聽器、(聚合報告、檢視結果樹)

整個測試計劃結構如下:

 

五、連線ant和jmeter配置(注意點

 

(1)將 jmeter的extras目錄中ant-jmeter-1.1.1.jar包拷貝至ant安裝目錄下的lib目錄中,這一步操作使Ant執行時能夠找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"這個類,從而成功觸發JMeter指令碼。

 

(2)修改Jmeter的bin目錄下jmeter.properties檔案的配置:jmeter.save.saveservice.output_format=xml,同時去掉前面的註釋,這一步操作使Jmeter報告輸出檔案格式為xml。

(3)生成的測試報告可能會有三個指標顯示NAN,那麼複製jmeter的lib目錄下的xalan-2.7.2.jar和serializer-2.7.2.jar copy到Ant的lib包裡,重新生成就會成功!

(4)如果生成jmeter報告資料為空,是因為jmeter的extra目錄中缺少jmeter-results-detail-report_21.xsl檔案導致,下載拷貝即可。

 

 好了,所有的環境以及配置還有指令碼都已經準備好了,接下來就是配置jenkins

 

六、build檔案配置

ant工具主要是根據build.xml檔案來執行,build.xml預設存放於jmeter下的extras檔案下,我們可以對build.xml檔案進行修改來指定測試指令碼、測試結果存放路徑等。

我的bulid.xml放在jmeter下的D:\Auto_Test\apache-ant-1.9.13目錄下

我的bulid.xml檔案如下所示,把相應的路徑改成自己的的就可以執行。

<?xml version="1.0" encoding="UTF-8"?>

<project name="ant-jmeter-test" default="run" basedir=".">
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>

    <property environment="env"/>
    <property name="ReportName" value="TestReport" />
    <!-- 需要改成自己本地的 Jmeter 目錄--> 
    <property name="jmeter.home" value="D:\Auto_Test\apache-jmeter-5.0" />
    <!-- jmeter生成jtl、html格式的結果報告的路徑--> 
    <property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" />
    <!-- jmeter生成html格式的結果報告的路徑-->
    <property name="jmeter.result.html.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" />
    <!-- 生成的報告的字首-->  
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" />
    
    <target name="run">
        <echo message="start..."/>
        <antcall target="clean" />
        <antcall target="test" />
        <antcall target="report" />
    </target>
    
    <target name="clean">
        <mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" />
    </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="D:\Auto_Test\apache-jmeter-5.0\demo" includes="*.jmx" />
            
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>
    <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">
              <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>

七、建立job構建指令碼

1、建立配置如下:

2、構建

然後再D:\Auto_Test\jenkins-2.138.3\workspace\jobs\results目錄下會生成測試報告

其中有一個失敗是用例就是這麼設定的場景。

好了,到這為止我們介面測試的部分已經完成,關於測試報告的分析,在後面我會做進一步的分析和總結,謝謝!

參考部落格:https://www.cnblogs.com/puresoul/p/4737716.html