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,官網連結:
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( 注:變數值之間用“;”隔開![](https://img2018.cnblogs.com/blog/1167886/201811/1167886-20181126124722056-1046736798.png)
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埠沒有被佔用的話)
![](https://images2015.cnblogs.com/blog/832256/201702/832256-20170214215745769-505133681.png)
![](https://img2018.cnblogs.com/blog/1167886/201811/1167886-20181126162742022-322189365.png)
然後就可以建立任務了。
這個是我們百度雲的安裝包,有需要的朋友可以下載:
連結: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