全網最全流程!Jmeter+Ant+Allure+Jenkins搭建屬于你的接口自動化流水線,CI/CD直接起飛!
1.什么是jmeter?
JMeter是100%完全由Java語言編寫的,免費的開源軟件,是非常優秀的性能測試和接口測試工具,支持主流協議的測試
2.jmeter能做什么?
1.JMeter是100%完全由Java語言編寫的軟件性能測試的GUI的測試工具,方便用戶可以無代碼的方式編寫性能測試腳本。JMeter的特點可以總結為如下:
2.JMerer測試工具不僅僅可以做性能測試,也可以做API的測試,可以和構建工具整合起來,如Ant,Maven,以及CI工具的整合,以及也可以和Grafana可視化整合起來
3.JMeter支持多種協議進行性能測試,如HTTP,HTTPS,WS
3.jmeter環境搭建
3.1前提:
1、需要安裝JDK的環境,配置java環境變量(參考:)
2、查看java環境是否搭建成功:javac / java -version
3.2jmeter下載:
下載地址:去官方正版下,懶得下找我要安裝包也行
3.3jmeter環境搭建:
3.3.1mac當中jmeter環境搭建:
控制臺: sudo vim .bash_profile
把下面的復制進去,JMETER_HOME=后面是jmeter的路徑,改成自己的路徑
#JMETER export JMETER_HOME=/Applications/tools/apache-jmeter-5.4.1 export PATH=$JMETER_HOME/bin:$PATH
3.4jmeter基本配置
3.4.1.切換語言
環境搭建成功之后,就可以直接在控制臺輸入jmeter啟動,啟動成功后,先切換成中文
3.4.2.安裝插件
第一步:選項--插件管理
第二步:在搜索框輸入json 勾選第一行 點擊右下角安裝插件
4.jmeter組件
4.1測試計劃
在JMeter的測試工具中,把測試計劃可以理解為是一個工程的目錄,也就是說每一個腳本都可以說是一個測試計劃,在一個測試計劃里面包含了很多的線程組來進行執行,測試計劃也是JMeter腳本的根節點。
4.2線程組
測試套件,等于postman里面的集合。JMerer通過線程組來驅動多個(也可以理解為LR?具??的虛擬?戶)運?測試腳本對?標服務器發起?量的?絡請求,在每個客戶端上可以運?多個線程組,也就是說?個測試計劃??可以包含N個線程組
在JMeter的測試?具中,依據業務的形態來設置它的?錄結果,但是設置性能測試的場景,主要是在線程組中來進?設置。JMeter的線程組可以理解為是建?了?個線程池,在執?的過程中處理線程組??的各個業務邏輯,線程組的信息具體如下:
4.2.1取樣器錯誤后要執?的動作
這部分可以理解為當客戶端向服務端發送請求后,以及發送請求的過程中出錯后的異常處理?式。
繼續
如果有?個請求錯誤,其他的請求會繼續,不會因為有?個請求錯誤的導致其他請求終?。
啟動下?個進程循環
如果請求出現問題,同?腳本中的其他請求就都不再執?,直接執?下?個進程的信息。如登錄后下?個請求是查看個?主?,但是因為登錄出錯,下個接?查看個?主?就不會被執?。
停?線程
停?線程指的是如果請求失敗,就停?當前線程執?,不再繼續執?。如果線程數很多的,那么導致的結果是停?的線程就會很多,處于真正運?的線程會很少,最后導致服務器的負載不夠,?般不建議構選改選項。
停?測試
如果請求失敗,那么停?所有線程執?,也就是說停?整個測試。
?即停?測試
如果請求失敗,?即停?整個測試場景的執?。
4.2.2線程屬性
線程數
?個線程可以理解為對應模擬?個?戶,所以線程數越多,那么也就認為可以模擬的?戶數越多。
Ramp-Up時間(秒)
該屬性指的是所有線程從啟動到開始運?的時間間隔,單位是秒,也就是說所有線程在多?時間內開始執?,如線
程數設置50,設置的時間為5秒,那么計算的公式為:
每秒執?線程數=線程數/Ramp-Up
具體如:
如設置的線程數為50,Ramp-up的時間為10,那么也就是說開啟執?后,每秒會啟動5個線程,如果Ramp-Up設置為
0,那么開始執?后,50個線程會?刻啟動
循環次數
循環次數可以理解為,請求的重復次數。如果選擇“永遠”,那么請求將?直進?,不建議這樣操作。
延遲創建線程直到需要如50個線程數,Ramp-Up時間是10秒,執?后線程是全部就緒的,那么就是每隔1秒啟動5個線程數
調度器
思維調度器可以理解為設置何時開始運?。
持續時間
測試計劃持續多?時間
啟動延遲
從當前時間延遲多?時間開始運?測試,也就是說點擊執?后,僅僅是做初始化的場景,不會執?測試,等待延遲
到達后開始運?測試,執?的時間為持續時間設置的時間。
4.3jmeter監聽器
4.3.1聚合報告
聚合報告是以表格的形式來顯示取樣器的結果信息,如果不同的取樣器擁有相同的名字,那么在聚合報告會顯示在????,那么?般來說,聚合報告都是根據取樣器來顯示每個取樣器的執?結果信息。聚合報告的信息具體如下:
Label:取樣器名稱
Samples:取樣器運?次數
Average:單個請求的平均響應時間
Median:50%請求的響應時間
90%Line:90%請求響應時間
95%Line:95%請求響應時間
99%Line:99%請求的響應時間
Min:請求的最?響應時間
Max:請求的最?響應時間
Std.Dev:響應時間的標準?差
Error%:事務錯誤率
Throughput:吞吐率,也就是TPS
KB/sec:每秒數據包流量
Avg.Bytes:平均數據流量
Received KB/sec:每秒從服務器端接收到的數據量
SentKB/sec:每秒從客戶端發送的請求的數量
4.3.2后端監聽器
后端監聽器可以把JMeter與influxdb,grafana整合起來,把性能測試過程中的數據存儲到influxdb,然后最后顯示在grafana的可視化界?中。
4.3.3察看結果樹
結果樹能夠很清晰的顯示每個取樣器執?的結果信息,以及每個取樣器的?絡請求信息
4.3.4取樣器
取樣器是JMeter的基本單元,?般性的各種都是取樣器來發起的
HTTP請求
可以把它理解為?個獨?的測試?例,或者說是?個測試場景。
4.3.5配置元件
配置元件可以理解為對取樣器的各種請求進?輔助配置。
HTTP信息頭管理器
每個HTTP的請求都是需要請求頭的信息的,那么可以把請求頭的信息添加到HTTP信息頭管理器,然后需要把它放在取樣器的前?。
HTTP Cookie管理器
在系統登錄成功后需要訪問系統中的其他?絡請求,但是需要記住?戶登錄成功后的sessionID的信息,那么使?HTTP Cookie管理器就可以?動記錄下這些信息。
在JMeter中,如果一個網站使用的是session來實現的,但是jmeter無法獲取登錄成功后的sessionid,那么也就導致登錄后的請求,都會重定向到登錄的頁面,也就是說無法驗證我是誰,可以使用cookie管理器來解決它內部會記住所有網絡請求的cookie信息,并且會讓所有的網絡請求間的cookie共享,如下圖:
?戶定義的變量
在測試中,如果某些請求參數存在變化,?如是?戶名和密碼,那么就可以單獨的獨?出來,?戶定義的變量可以
很輕松的來解決這部分的問題。
HTTP請求默認值
每個取樣器發送?絡請求的時候都是需要IP地址等信息,但是使?HTTP請求默認值可以很輕松的把請求的地址獨?出來。
4.3.6邏輯控制器
邏輯控制器主要控制JMeter的執?順序,它的存在使整體的測試的靈活度更?。?如接?A執?完成后得到的結果
信息,經過邏輯控制器判斷之后,再執?接?B或者是接?C。?般性的??,簡單控制器使?的最多,但是也看具
體的場景進?設置。
4.3.7前置處理器
在執?取樣器之前,需要進?初始化的設置,等價于UnitTest測試框架中的setUp()的?法。
用戶參數
我們?個測試點,需要多次操作,并且每次操作的數據都是不?樣的測試步驟?致,但是測試數據每次不?樣(前置處理器)
比如:登錄的賬戶
CSV 數據?件設置
將數據放到一個文件里直接調用(配置元件里面)
記事本
4.3.8后置處理器
在執?取樣器之后執?,如API測試中經常會涉及到上個API的輸出是下個API的輸?,那么就會使?到后置處理器
中的正則表達式提取器或者是JSON提取器,BeanShell斷?等。
正則表達式提取器:(后置處理器--正則表達式提取器)
測試地址
模板:?$$引?起來,如果在正則表達式中有多個正則表達式(多個括號括起來的東東),則可以是$2$,$3$等等,表示解析到的第?個值給user_id。例如:$1$表示匹配到的第?個值
匹配數字:0代表隨機取值,-1代表所有值,此時提取結果是?個數組,其余正整數代表第?個匹配的內容提取出來。如果匹配數字選擇的是-1,還可以通過 {user_id_2}來取第2個匹配的內容。
缺省值:正則匹配失敗時,取的值
4.3.9斷?
主要?來驗證返回的結果數據與預期的結果數據是否完全匹配,?般最常?的是響應斷?和JSON斷?。
4.3.10定時器
定時器主要?來在測試計劃執?的過程中,定時器?來緩減線程運?,?如刻意的等待3秒后再執?下?個請求的信息
延時等待
api的測試用例執行的速度非常快的,基本只在毫秒級別的,但是在某些時候,由于業務的特性嗎,想讓他延遲幾秒鐘執行,那么這個時候就用延時等待(定時器--固定定時器)
5.jmeter的目錄內容:
bin目錄:可執行的應用程序
extras目錄:擴展插件目錄
lib目錄:所用到的插件目錄,里面均為jar包
6.Jmeter動態參數的解決思路是什么?
假設一個圖書管理系統,可以進行增刪改查,我們在登錄成功之后,會返回一個token值,通過登錄接口的后置處理器中的json提取器或者正則表達式提取器,我們一般用json提取器,定義一個變量來存儲登錄成功后的token,在下個接口中我們在請求頭當中調用這個變量。
7.jmeter里面調用變量是什么怎么調用?
在請求頭添加token jwt ${token}
添加--配置元件--http信息頭管理器--添加
8.測試報告
8.1 認識ant
8.1.1 ant下載
下載地址:官網下,懶得找找我要安裝包
8.1.2ant環境變量配置:
mac配置ant環境變量:
#ant環境變量
export ANT_HOME=/Applications/tools/apache-ant-1.10.1
export PATH=$ANT_HOME/bin:$PATH
windows配置ant環境變量:
把他(目錄到bin目錄)配置到path環境變量
8.1.3驗證環境:
控制臺輸入ant,現實如下說明環境已經搭建好
8.2 認識build.xml文件
ant構建工具,該構建工具執行的時候依賴于build.xml的文件,在build.xml文件里面會定義具體執行的腳本,執行的順序,以及測試報告存儲的目錄
1 xml version="1.0" encoding="UTF8"?>
2
3 <project name="ant-jmeter-test" default="run" basedir=".">
4
5 <property name="jmeterPath" value="/Applications/tools/apache-jmeter-5.4.1"/>
6 <property name="mailhost" value="smtp.sina.cn"/>
7 <property name="username" value="wuya1303@sina.com"/>
8 <property name="password" value="admin123"/>
9 <property name="mailfrom" value="wuya1303@sina.com"/>
10 <property name="mail_to" value="1730645056@qq.com"/>
11 <property name="mailsubject" value="API測試報告"/>
12 <property name="mail_port" value="25"/>
13 <property name="message" value="Hi!
14
15
16 <tstamp>
17 <format property="time" pattern="yyyyMMddhhmm" />
18 </tstamp>
19 <property name="jmeter.home" value="${jmeterPath}" />
20 <property name="jmeter.result.jtl.dir" value="${jmeterPath}\tests\report\jtl" />
21 <property name="jmeter.result.html.dir" value="${jmeterPath}\tests\report\html" />
22 <property name="htmlReportNameSummary" value="testReport" />
23 <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${htmlReportNameSummary}${time}.jtl" />
24 <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${htmlReportNameSummary}${time}.html" />
25
26
27 <target name="run">
28 <antcall target="test" />
29 <antcall target="report" />
30 <antcall target="sendEmail" />
31 </target>
32
33 <!--執行接口測試-->
34 <target name="test">
35 <echo>執行接口自動化測試</echo>
36 <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
37 <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
38 <!--要執行的測試腳本-->
39 <testplans dir="${jmeterPath}\tests\script" includes="1212.jmx" />
40 <property name="jmeter.save.saveservice.output_format" value="xml"/>
41 </jmeter>
42 </target>
43
44 <!--解決報告中NAN字段顯示問題-->
45 <path id="xslt.classpath">
46 <fileset dir="${jmeter.home}/lib" includes="xalan-2.7.2.jar"/>
47 <fileset dir="${jmeter.home}/lib" includes="serializer-2.7.2.jar"/>
48 </path>
49
50 <!--生成HTML測試報告-->
51 <target name="report">
52 <echo>生成接口自動測試報告</echo>
53 <xslt classpathref="xslt.classpath"
54 force="true"
55 in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}"
56 style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
57
58 <!--復制圖片-->
59 <copy todir="${jmeter.result.html.dir}">
60 <fileset dir="${jmeter.home}/extras">
61 <include name="collapse.png" />
62 <include name="expand.png" />
63 </fileset>
64 </copy>
65 </target>
66 <!--自動發送郵件-->
67 <target name="sendEmail">
68 <echo>發送自動化測試報告</echo>
69 <mail mailhost="${mailhost}"
70 ssl="ture"
71 user="${username}"
72 password="${password}"
73 mailport="${mail_port}"
74 subject="${mailsubject}"
75 messagemimetype="text/html"
76 tolist="${mail_to}">
77 <from address="${mailfrom}" />
78 <attachments>
79 <fileset dir="${jmeter.result.html.dir}">
80 <include name="${htmlReportNameSummary}${time}.html"/>
81 <include name="collapse.png" />
82 <include name="expand.png" />
83 </fileset>
84 </attachments>
85 <message>
86 ${message}
87 </message>
88 </mail>
89 </target>
90 </project>
8.2目錄結構
tests
用來存放測試的所有資料
report
用來存放測試報告 里面再創建html和jtl的文件夾
scrip
用來存放測試腳本
8.3自動發送郵件:
1、 在JMeter的extras下找到ant-jmeter-1.1.1.jar,把它copy到ant的apache-ant-1.10.0\lib下。
2、自動發送郵件,需要三個jar包,分別是:activation.jar,commons-email-1.2.jar,mail.jar,這三個文件放在ant的lib目錄下
3、輸出測試報告的配置
打開jmeter的bin目錄下的jmeter.properties文件,做如下修改:
把jmeter.save.saveservice.output_format=csv
修改為jmeter.save.saveservice.output_format=xml
4、build文件修改代碼:
1、修改jmeter的路徑
2、修改收到測試報告的郵箱
3、修改要執行測試用例的路徑和腳本
6.生成測試報告:在控制臺進入到測試用例tests的目錄下,輸入ant
7.生成的報告在哪打開?
jmeter--tests--report--html
最下面就是你最新生成的 點擊就能直接打開
生成的測試報告
全網最全流程!Jmeter+Ant+Allure+Jenkins搭建屬于你的接口自動化流水線,CI/CD直接起飛!