Jmeter簡(jiǎn)單介紹與搭配Jenkins實(shí)現(xiàn)自動(dòng)化測(cè)試實(shí)踐
一、Jmeter簡(jiǎn)介
Apache JMeter 是 Apache 組織開(kāi)發(fā)的基于 Java 的壓力測(cè)試工具。用于對(duì)軟件做壓力測(cè)試,它最初被設(shè)計(jì)用于 Web應(yīng)用測(cè)試,但后來(lái)擴(kuò)展到其他測(cè)試領(lǐng)域。 它可以用于測(cè)試靜態(tài)和動(dòng)態(tài)資源,例如靜態(tài)文件、Java 小服務(wù)程序、CGI 腳本、Java 對(duì)象、數(shù)據(jù)庫(kù)、FTP 服務(wù)器, 等等。JMeter 可以用于對(duì)服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載,來(lái)自不同壓力類(lèi)別下測(cè)試它們的強(qiáng)度和分析整體性能。另外,JMeter 能夠?qū)?yīng)用程序做功能/回歸測(cè)試,通過(guò)創(chuàng)建帶有斷言的腳本來(lái)驗(yàn)證你的程序返回了你期望的結(jié)果。為了***限度的靈活性, JMeter 允許使用正則表達(dá)式創(chuàng)建斷言。
Apache jmeter 可以用于對(duì)靜態(tài)的和動(dòng)態(tài)的資源(文件,Servlet,Perl 腳本,java 對(duì)象,數(shù)據(jù)庫(kù)和查詢(xún),F(xiàn)TP 服務(wù)器等等)的性能進(jìn)行測(cè)試。它可以用于對(duì)服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M繁重的負(fù)載來(lái)測(cè)試它們的強(qiáng)度或分析不同壓力類(lèi)型下的整體性能。你可以使用它做性能的圖形分析或在大并發(fā)負(fù)載測(cè)試你的服務(wù)器/腳本/對(duì)象。
1. Jmeter安裝
Jmerter 是基于 java的,所以安裝 Jmeter 之前必須先安裝 JDK 依賴(lài),JDK 安裝的方法網(wǎng)上許多這里就不多介紹了(建議安裝8.0以上版本)。
安裝好 java 后到 Jmeter 官網(wǎng)下載對(duì)應(yīng)系統(tǒng)的壓縮包解壓到本地任意位置就可以使用了,這里我建議下載3.0以上版本的 Jmeter,因?yàn)閺?.0開(kāi)始 Jmeter 可以直接生成可視化的 HTML 報(bào)告,不再需要安裝插件來(lái)生成。
2. Jmeter測(cè)試組件
(1)負(fù)載發(fā)生器:用于產(chǎn)生負(fù)載,通常以多線程或是多進(jìn)程的方式模擬用戶(hù)行為。
(2)用戶(hù)運(yùn)行器:通常是一個(gè)腳本運(yùn)行引擎,用戶(hù)運(yùn)行器附加在線程或進(jìn)程上,根據(jù)腳本要求模擬指定的用戶(hù)行為。
(3)資源生成器:用于生成測(cè)試過(guò)程中服務(wù)器、負(fù)載機(jī)的資源數(shù)據(jù)。
(4)報(bào)表生成器:根據(jù)測(cè)試產(chǎn)生的數(shù)據(jù)生成報(bào)表,提供可視化的數(shù)據(jù)顯示方式。
Test Plan (測(cè)試計(jì)劃):用來(lái)描述一個(gè)性能測(cè)試,包含與本次性能測(cè)試所有相關(guān)的功能。也就說(shuō)本次的性能測(cè)試的所有內(nèi)容是于基于一個(gè)計(jì)劃的。
下面看一下一個(gè)計(jì)劃下面都有哪些主要的功能模塊(右鍵單擊“測(cè)試計(jì)劃”彈出菜單)。
二、Threads (Users)線程用戶(hù)
雖然有三個(gè)添加線程組的選項(xiàng),名字不一樣, 創(chuàng)建之后,其界面是完全一樣的。之前的版本只有一個(gè)線程組的名字。現(xiàn)在多一個(gè) setUp theread Group 與 terDown Thread Group。
- setup thread group
可用于執(zhí)行預(yù)測(cè)試操作,這種類(lèi)型的線程執(zhí)行測(cè)試前進(jìn)行定期線程組的執(zhí)行。
- teardown thread group.
可用于執(zhí)行測(cè)試后動(dòng)作,這種類(lèi)型的線程執(zhí)行測(cè)試結(jié)束后執(zhí)行定期的線程組。
- thread group(線程組).
這個(gè)就是我們通常添加運(yùn)行的線程。通俗的講一個(gè)線程組,,可以看做一個(gè)虛擬用戶(hù)組,線程組中的每個(gè)線程都可以理解為一個(gè)虛擬用戶(hù)。線程組中包含的線程數(shù)量在測(cè)試執(zhí)行過(guò)程中是不會(huì)發(fā)生改變的。
1. 測(cè)試片段
測(cè)試片段是在2.5版本之后新加的一個(gè)選項(xiàng)。
測(cè)試片段元素是控制器上的一個(gè)種特殊的線程組,它在測(cè)試樹(shù)上與線程組處于一個(gè)層級(jí)。它與線程組有所不同,因?yàn)樗槐粓?zhí)行,除非它是一個(gè)模塊控制器或者是被控制器所引用時(shí)才會(huì)被執(zhí)行。
三、組成
1. 控制器
JMeter 有兩種類(lèi)型的控制器:取樣器(sample)和邏輯控制器(Logic Controller),用這些原件來(lái)驅(qū)動(dòng)處理一個(gè)測(cè)試。
2. 取樣器(Sample)
取樣器(Sample)是性能測(cè)試中向服務(wù)器發(fā)送請(qǐng)求,記錄響應(yīng)信息,記錄響應(yīng)時(shí)間的最小單元,JMeter 原生支持多種不同的 sampler ,如 HTTP Request Sampler 、 FTP Request Sample 、TCP Request Sample 、JDBC Request Sampler 等,每一種不同類(lèi)型的 sampler 可以根據(jù)設(shè)置的參數(shù)向服務(wù)器發(fā)出不同類(lèi)型的請(qǐng)求。
3. 邏輯控制器(Logic Controller)
邏輯控制器,包括兩類(lèi)元件,一類(lèi)是用于控制 test plan 中 sampler 節(jié)點(diǎn)發(fā)送請(qǐng)求的邏輯順序的控制器,常用的有 如果(If)控制器 、switch Controller 、Runtime Controller、循環(huán)控制器等。另一類(lèi)是用來(lái)組織可控制 sampler 來(lái)節(jié)點(diǎn)的,如 事務(wù)控制器、吞吐量控制器。
4. 配置元件(Config Element)
配置元件(config element)用于提供對(duì)靜態(tài)數(shù)據(jù)配置的支持。CSV Data Set config 可以將本地?cái)?shù)據(jù)文件形成數(shù)據(jù)池(Data Pool),而對(duì)應(yīng)于 HTTP Request Sampler 和 TCP Request Sampler 等類(lèi)型的配置原件則可以修改 Sampler 的默認(rèn)數(shù)據(jù)。(例如,HTTP Cookie Manager 可以用于對(duì) HTTP Request Sampler 的cookie 進(jìn)行管理)
5. 定時(shí)器(Timer)
定時(shí)器(Timer)用于操作之間設(shè)置等待時(shí)間,等待時(shí)間是性能測(cè)試中常用的控制客戶(hù)端 QPS 的手段。類(lèi)似于 python 中的 sleep。JMeter 定義了 Bean Shell Timer、Constant Throughput Timer、固定定時(shí)器等不同類(lèi)型的 Timer。
6. 前置處理器(Per Processors)
用于在實(shí)際的請(qǐng)求發(fā)出之前對(duì)即將發(fā)出的請(qǐng)求進(jìn)行特殊處理。例如,HTTP URL 重寫(xiě)修飾符則可以實(shí)現(xiàn)URL重寫(xiě),當(dāng) RUL中有 sessionID 一類(lèi)的 session 信息時(shí),可以通過(guò)該處理器填充發(fā)出請(qǐng)求的實(shí)際的 sessionID 。
7. 后置處理器(Post Processors)
用于對(duì) Sampler 發(fā)出請(qǐng)求后得到的服務(wù)器響應(yīng)進(jìn)行處理。一般用來(lái)提取響應(yīng)中的特定數(shù)據(jù)。例如,正則表達(dá)式提取器 則可以用于提取響應(yīng)數(shù)據(jù)中通過(guò)匹配正則表達(dá)式獲得的數(shù)據(jù)。
8. 斷言(Assertions)
斷言用于檢查測(cè)試中得到的相應(yīng)數(shù)據(jù)等是否符合預(yù)期,斷言一般用來(lái)設(shè)置檢查點(diǎn),用以保證性能測(cè)試過(guò)程中的數(shù)據(jù)交互是否與預(yù)期一致。
9. 監(jiān)聽(tīng)器(Listener)
監(jiān)聽(tīng)器可以用來(lái)對(duì)測(cè)試結(jié)果數(shù)據(jù)進(jìn)行處理和可視化展示的一系列元件。 圖行結(jié)果、查看結(jié)果樹(shù)、聚合報(bào)告。都是我們經(jīng)常用到的元件。
以上就是 Jmeter 的基本組成元件,我們用到的絕大部分測(cè)試計(jì)劃就是依靠以上元件完成。
接下來(lái)我就根據(jù)我們的項(xiàng)目測(cè)試實(shí)例來(lái)實(shí)際演示一下以上元件的用法,目前項(xiàng)目的測(cè)試需求主要是業(yè)務(wù)測(cè)試,如果需要壓力測(cè)試只需要把檢查數(shù)據(jù)正確性的步驟去掉,簡(jiǎn)單的測(cè)試流程為向一個(gè)接口 get 請(qǐng)求將數(shù)據(jù)傳輸過(guò)去后,檢查日志和數(shù)據(jù)庫(kù)中是否有正確的數(shù)據(jù)。
這是我配置好后的測(cè)試計(jì)劃:
四、添加線程組
一個(gè)測(cè)試請(qǐng)求是基于一個(gè)線程組完成的。一個(gè)測(cè)試計(jì)劃必須有一個(gè)線程組。測(cè)試計(jì)劃添加線程組非常簡(jiǎn)單。在測(cè)試計(jì)劃右鍵彈出下拉菜單(添加-->Threads(Users)--->線程組)中選擇線程組即可。
jmeter 中 每個(gè)測(cè)試計(jì)劃至少需要包含一個(gè)線程組,當(dāng)然也可以在一個(gè)計(jì)劃中創(chuàng)建多個(gè)線程組,多個(gè)線程組在測(cè)試計(jì)劃下面是并行執(zhí)行的,也就是說(shuō)這些線程組是同時(shí)被初始化并同時(shí)執(zhí)行線程組下的 Sampler。
線程組主要包含三個(gè)參數(shù):線程數(shù)、準(zhǔn)備時(shí)長(zhǎng)(Ramp-Up Period(in seconds))、循環(huán)次數(shù)。
- 線程數(shù):虛擬用戶(hù)數(shù)。一個(gè)虛擬用戶(hù)占用一個(gè)進(jìn)程或線程。設(shè)置多少虛擬用戶(hù)數(shù)在這里也就是設(shè)置多少個(gè)線程數(shù)。
- 準(zhǔn)備時(shí)長(zhǎng): 設(shè)置的虛擬用戶(hù)數(shù)需要多長(zhǎng)時(shí)間全部啟動(dòng)。如果線程數(shù)為20 ,準(zhǔn)備時(shí)長(zhǎng)為10 ,那么需要10秒鐘啟動(dòng)20個(gè)線程。也就是每秒鐘啟動(dòng)2個(gè)線程。
- 循環(huán)次數(shù):每個(gè)線程發(fā)送請(qǐng)求的次數(shù)。如果線程數(shù)為20 ,循環(huán)次數(shù)為100 ,那么每個(gè)線程發(fā)送100次請(qǐng)求。總請(qǐng)求數(shù)為20*100=2000 。如果勾選了“永遠(yuǎn)”,那么所有線程會(huì)一直發(fā)送請(qǐng)求,一到選擇停止運(yùn)行腳本。
在這里,因?yàn)槭菣z查數(shù)據(jù)正確性只需要運(yùn)行一次,所以全部設(shè)置為1。
五、添加參數(shù)
添加參數(shù)常用讀取 CSV 文件將文件內(nèi)容設(shè)置為變量,我比較喜歡的是添加Beanshell元件,編寫(xiě)java腳本直接生成數(shù)據(jù)。
在線程組上右鍵菜單選擇添加--->配置元件--->CSV Data Set Config 就能添加 CSV文 件讀取。
主要設(shè)置的參數(shù)有:
- FileName: 填寫(xiě)被讀取的 CSV 文件地址和文件名。
- File Encoding: 默認(rèn)為 ANSI。
- Varible Names: 定義文本文件中的參數(shù)名,以逗號(hào)分隔例如 a,b,c,定義后可在腳本在以 Shell 變量的同樣的方式引用。
- Delimiter: 定義分隔符,用于將變量分開(kāi),這里定義的某個(gè)分隔符,則在 Variable Names 用這里定義的分隔符,例如 a,b,c 那么分隔符就是“,”。
- Recycle on EOF: 設(shè)置為 True 后,允許循環(huán)取值。
- Stop Thread on EOF: 當(dāng) Recycle on EOF 為 false 并且 Stop Thread on EOF為true,則讀完 csv 文件中的記錄后,停止運(yùn)行。
- Sharing Mode: 設(shè)置是否線程共享。
添加 Beanshell 需要在線程組上右鍵菜單選擇添加--->Sampler--->Beanshell Sampler 就能添加 Beanshell 腳本文件讀取。
beanshell 十分強(qiáng)大,除了生成參數(shù)外也可以 import java 的包來(lái)完成許多復(fù)雜的邏輯,這里就不細(xì)說(shuō)了。
參數(shù)設(shè)置后可以在后續(xù)的元件中以 $ {參數(shù)名}的形式調(diào)用。
六、添加HTTP請(qǐng)求
生成參數(shù)后在線程組上右鍵菜單(添加--->Sampler--->HTTP請(qǐng)求)選擇 HTTP 請(qǐng)求。對(duì)于 jmeter 來(lái)說(shuō),取樣器(Sampler)是與服務(wù)器進(jìn)行交互的單元。一個(gè)取樣器通常進(jìn)行三部分的工作:
- 向服務(wù)器發(fā)送請(qǐng)求
- 記錄服務(wù)器的響應(yīng)數(shù)據(jù)
- 記錄相應(yīng)時(shí)間信息
HTTP Sampler 中可以設(shè)置的參數(shù)很多,這里就說(shuō)一下一些經(jīng)常使用的:
- 名稱(chēng):本屬性用于標(biāo)識(shí)一個(gè)取樣器,建議使用一個(gè)有意義的名稱(chēng)。
- 注釋?zhuān)簩?duì)于測(cè)試沒(méi)有任何作用,僅用戶(hù)記錄用戶(hù)可讀的注釋信息。
- 協(xié)議:向目標(biāo)服務(wù)器發(fā)送 HTTP 請(qǐng)求時(shí)的協(xié)議,可以是 http 或者是 https ,默認(rèn)值為 http 。
- 服務(wù)器名稱(chēng)或 IP :HTTP 請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱(chēng)或IP地址。
- 端口號(hào):目標(biāo)服務(wù)器的端口號(hào),默認(rèn)值為80 。
- 方法:發(fā)送HTTP請(qǐng)求的方法,可用方法包括 GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE 等。
- 路徑:目標(biāo) URL 路徑(不包括服務(wù)器地址和端口)。
- Content encoding :內(nèi)容的編碼方式,默認(rèn)值為 iso8859。
- 自動(dòng)重定向:如果選中該選項(xiàng),當(dāng)發(fā)送 HTTP 請(qǐng)求后得到的響應(yīng)是302/301時(shí),JMeter 自動(dòng)重定向到新的頁(yè)面。
- 同請(qǐng)求一起發(fā)送參數(shù) : 在請(qǐng)求中發(fā)送 URL 參數(shù),對(duì)于帶參數(shù)的 URL ,jmeter 提供了一個(gè)簡(jiǎn)單的對(duì)參數(shù)化的方法。用戶(hù)可以將 URL 中所有參數(shù)設(shè)置在本表中(如圖中 ${did}就是調(diào)用之前生成的參數(shù)),表中的每一行是一個(gè)參數(shù)值對(duì)(對(duì)應(yīng) RUL 中的 key1=value1)。
在這里添加好參數(shù)后就可以進(jìn)入下一步,檢查數(shù)據(jù)。
七、添加數(shù)據(jù)庫(kù)連接與數(shù)據(jù)庫(kù)操作
要連接數(shù)據(jù)庫(kù)首先需要下載不同數(shù)據(jù)庫(kù)對(duì)應(yīng)的 JDBC 驅(qū)動(dòng)包,這里我使用的是 mysql,所以下載入 mysql-connector-java.jar,下載后將 jar 包放到Jmeter所在目錄的 lib 文件夾中就可以了。
然后選擇配置元件中的 JDBC Connection Configuration 添加數(shù)據(jù)庫(kù)連接配置。
大部分配置讀使用默認(rèn)就可以,主要配置連接數(shù)據(jù)庫(kù)部分:
- Variable Name: 變量名稱(chēng)。需要唯一標(biāo)識(shí)。與 JDBC 取樣器中的相對(duì)應(yīng),決定 JDBC 取樣的配置。簡(jiǎn)單理解就是在 JDBC request 的時(shí)候確定去哪個(gè)綁定的配置。
- MaxNumber of Connection: 數(shù)據(jù)庫(kù)***鏈接數(shù)
- PoolTimeout: 數(shù)據(jù)庫(kù)鏈接超時(shí),單位 ms
- Idle Cleanup Interval (ms): 數(shù)據(jù)庫(kù)空閑清理的間隔時(shí)間,單位 ms
- Transaction Isolation:
- 事務(wù)間隔級(jí)別設(shè)置,主要有如下幾個(gè)選項(xiàng):(對(duì) JMX加解密) TRANSACTION_REPEATABLE_READ 事務(wù)重復(fù)讀、TRANSACTION_READ_COMMITTED 事務(wù)已提交讀 、TRANSACTION_SERIALIZABLE 事務(wù)序列化 、TRANSACTION_READ_UNCOMMITTED 事務(wù)未提交讀、TRANSACTION_NODE 事務(wù)節(jié)點(diǎn) 、DEFAULT 默認(rèn)、編輯
- Keep-Alive: 是否保持連接
- Max Connection age (ms):***連接時(shí)長(zhǎng),超過(guò)時(shí)長(zhǎng)的會(huì)被拒絕
- Validation Query:驗(yàn)證查詢(xún),檢驗(yàn)連接是否有效(數(shù)據(jù)庫(kù)重啟后之前的連接都失效,需要驗(yàn)證查詢(xún))
- Database URL:如 jdbc:mysql://localhost:3306/test 表示本地?cái)?shù)據(jù)庫(kù),3306 端口,數(shù)據(jù)庫(kù)名稱(chēng)為 test
- JDBCDriver Class: JDBC 的類(lèi),如 com.mysql.jdbc.Driver ,不同數(shù)據(jù)庫(kù)使用把不同累,可以參考 Jmeter 的文檔。
配置好后就可以配置具體的數(shù)據(jù)庫(kù)操作。
選擇 Sampler 添加 JDBC Request。
- Variable Name:數(shù)據(jù)庫(kù)連接元件名稱(chēng),填寫(xiě)對(duì)應(yīng) JDBC Name,
- Query Type:選擇對(duì)應(yīng)的數(shù)據(jù)庫(kù)操作,路 select,update 等。
- Query:具體的數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句,可以直接將參數(shù)寫(xiě)道 SQL 語(yǔ)句中,也可以使用占位符:?,將參數(shù)寫(xiě)到下方的 Parameter velaues 中,
- Parameter Types: 參數(shù)類(lèi)型
- variable names: 返回結(jié)果的參數(shù)名,使用方法與讀取 csv 文件獲得的參數(shù)相同
獲取到數(shù)據(jù)庫(kù)查詢(xún)結(jié)果后就可以檢查數(shù)據(jù)正確性了。
八、數(shù)據(jù)檢查
需要檢查的是 JDBC request 回來(lái)的數(shù)據(jù),所以斷言元件需要在數(shù)據(jù)庫(kù)操作的內(nèi)層。斷言的種類(lèi)有許多,這里就選擇最常用的響應(yīng)斷言
右鍵 JDBC Request ,選擇添加---->斷言--->響應(yīng)斷言。
斷言的設(shè)置是比較簡(jiǎn)單的:
- apply to:是應(yīng)用范圍,設(shè)定匹配的范圍
- Main sample and sub-samples: 匹配范圍為當(dāng)前父取樣器,及子取樣器
- Main sample only :僅當(dāng)前父取樣器
- Sub samples only: 僅子取樣器
- JMeter Variable:變量值進(jìn)行匹配,這里需要檢查的是 JDBC Request 返回的值所附的變量,所以選擇這一項(xiàng),注意:變量名_x的形式意思是取數(shù)據(jù)返回結(jié)果的第x行。
要測(cè)試的響應(yīng)文字:針對(duì)響應(yīng)數(shù)據(jù)不同部分進(jìn)行匹配
(1) 響應(yīng)文本:響應(yīng)服務(wù)器返回的文本內(nèi)容,http 協(xié)議排除 header 部分
(2) 響應(yīng)代碼:匹配響應(yīng)代碼,比如 http 請(qǐng)求中‘200’代表成功
(3) 響應(yīng)信息:匹配響應(yīng)信息,處理成功返回‘成功’或者“ok”字樣
(4) Response Header: 匹配響應(yīng)頭中的信息
匹配規(guī)則:
- 包括:響應(yīng)內(nèi)容包括需要匹配的內(nèi)容就算成功
- 匹配:響應(yīng)內(nèi)容要完全匹配匹配內(nèi)容,不區(qū)分大小寫(xiě)
- equals:完全相等,區(qū)分大小寫(xiě)
- substring:響應(yīng)內(nèi)容包括匹配內(nèi)容即為成功。
可以通過(guò)添加斷言結(jié)果來(lái)查看斷言的執(zhí)行情況。
如果接口響應(yīng)數(shù)據(jù)可以與斷言匹配上,則測(cè)試用例通過(guò),否則不通過(guò)。
查看通過(guò)結(jié)果就需要添加監(jiān)聽(tīng)器了(Listener)
九、添加監(jiān)聽(tīng)器
Jmeter 有許多種類(lèi)型的監(jiān)聽(tīng)器,比如查看圖形結(jié)果、聚合報(bào)告等,因?yàn)檫@個(gè)測(cè)試是業(yè)務(wù)測(cè)試,所以這里就選擇查看結(jié)果樹(shù),針對(duì)每個(gè)元件的運(yùn)行結(jié)果進(jìn)行查看。
選擇監(jiān)聽(tīng)器--->響應(yīng)斷言
執(zhí)行測(cè)試用例就可以看到測(cè)試結(jié)果了。
查看結(jié)果樹(shù),通過(guò)的測(cè)試通常為綠色。紅色則代表失敗了。可以查看到取樣器結(jié)果,請(qǐng)求,響應(yīng)數(shù)據(jù),或是把測(cè)試結(jié)果寫(xiě)入到文件中。
測(cè)試計(jì)劃配置完成之后,可以選擇左上角的文件--->保存測(cè)試計(jì)劃為...,來(lái)將測(cè)試計(jì)劃保存到想要的地方。
以上就是 Jmeter 的大概使用方式與介紹。
我們經(jīng)常需要 Jenkins 實(shí)現(xiàn)一鍵部署,但是有時(shí)候我們可能會(huì)因?yàn)槭д`導(dǎo)致部署時(shí)的代碼不一定是可用的,這時(shí)候就可以使用 Jmeter 添加到 Jenkins 中,保證部署時(shí)的代碼是通過(guò)了測(cè)試用例的。
接下來(lái)介紹 Jmeter 與 Jenkins 搭配使用實(shí)現(xiàn)自動(dòng)化測(cè)試部署。
十、使用
在添加 Jmeter 測(cè)試任務(wù)之前,Jenkins 需要首先安裝兩個(gè)插件,以方便我們對(duì) Jmeter 的測(cè)試結(jié)果進(jìn)行處理:
- HTML Publisher plugin:可以讓我們方便的在 Jenkins 中直接打開(kāi) Jmeter 的結(jié)果進(jìn)行查看。
- Performance Plugin:可以將測(cè)試結(jié)果的 log 以圖表的形式整合到 Jenkins 中,還能根據(jù)測(cè)試結(jié)果的錯(cuò)誤率與波動(dòng)率修改 Jenkins 的 job 狀態(tài)。
安裝好插件以后就可以添加測(cè)試任務(wù)了,選擇新建--->構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目。
接下來(lái)進(jìn)入 Jenkins 配置頁(yè)面。
根據(jù)需要配置好相應(yīng)的源碼管理,觸發(fā)器和環(huán)境后,添加構(gòu)建,這里 Jmter 運(yùn)行在 windows 中所以添加 windows shell,如果需要在 Linux 中構(gòu)建可以選擇對(duì)應(yīng) Shell,使用的命令如下圖,該命令是跨平臺(tái)的,不管 win,unix 還是 mac 都可以使用。
- 命令格式為: -n -t <測(cè)試腳本文件路徑> -l <日志保存路徑> -e -o
- -n 非 GUI 模式 -> 在非 GUI 模式下運(yùn)行 JMeter
- -t 測(cè)試文件 -> 要運(yùn)行的 JMeter 測(cè)試腳本文件
- -l 日志文件 -> 記錄結(jié)果的文件,文件必須不存在
- -e 設(shè)置測(cè)試完成后生成測(cè)試報(bào)表
- -o 指定報(bào)表生成文件夾,文件夾必須為空或者不存在
- -r 分布式遠(yuǎn)程執(zhí)行 -> 指定遠(yuǎn)程slave節(jié)點(diǎn)執(zhí)行測(cè)試任務(wù)
- -R 設(shè)置分布式服務(wù)器列表 -> 配置遠(yuǎn)程服務(wù)器ip列表
- -H 代理主機(jī) -> 設(shè)置 JMeter 使用的代理主機(jī)
- -P 代理端口 -> 設(shè)置 JMeter 使用的代理主機(jī)的端口號(hào)
接下來(lái)配置構(gòu)建后操作:
選擇添加構(gòu)建后操作,在列表中首先是選擇 Publish HTML Reports。
選擇增加。
HTML directory to archive 中指定 Jmeter 生成報(bào)告的相對(duì)路徑。
剩余配置一般默認(rèn)就可以了。
接下來(lái)繼續(xù)添加構(gòu)建后操作,選擇 Publish Performance test result report:
- source data files:日志文件所在的相對(duì)路徑。
- evaluation mode:選擇判斷模式,一般來(lái)說(shuō)選擇 standard mode (標(biāo)準(zhǔn)模式), 標(biāo)準(zhǔn)模式中可以選擇 relative threshold(相對(duì)閥值)或者 error threshold (相對(duì)錯(cuò)誤數(shù)),這里因?yàn)槭侵粓?zhí)行一次的業(yè)務(wù)測(cè)試,所以選擇 error threshold,并在下方配置1次測(cè)試失敗就將 job 狀態(tài)改為 failed。
如果是測(cè)試數(shù)量較多,且容忍一定的錯(cuò)誤率可以選擇 relative threshold,根據(jù)錯(cuò)誤的百分比來(lái)修改 job 狀態(tài)。
這里配置好以后就可以添加自己的后續(xù)部署任務(wù)了,再次選擇增加構(gòu)建后操作,選擇 trigger parameterized build on other projects。
填寫(xiě)測(cè)試結(jié)束后需要部署的項(xiàng)目,并選擇 job 狀態(tài)為什么時(shí)才會(huì)觸發(fā)這個(gè)構(gòu)建。
以上就是一個(gè)完整的根據(jù)測(cè)試結(jié)果自動(dòng)部署任務(wù)了,接下來(lái)我們保存,選擇立即構(gòu)建。
十一、構(gòu)建完成后的結(jié)果如圖
選擇 HTML report 可以查看 HTML 報(bào)告(如果使用新版本的 Jenkins,因?yàn)?Jenkins 的安全策略默認(rèn)不加載 js,css 等文件,所以需要在 jenkins 設(shè)置中執(zhí)行腳本命令行:
- System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","sandbox; default-src 'self';")
執(zhí)行完畢后重新構(gòu)建就可以正常打開(kāi) HTML 報(bào)告。*這個(gè)命令重啟后失效)
在 HTML 報(bào)告中可以看到測(cè)試結(jié)果的詳細(xì)信息。
首頁(yè)是測(cè)試結(jié)果的總覽,可以看到測(cè)試的錯(cuò)誤率等,選擇左邊欄可以查看更詳細(xì)些的請(qǐng)求時(shí)間,吞吐率等信息。
配置一個(gè)自動(dòng)化測(cè)試及部署任務(wù)就是這么簡(jiǎn)單,希望能夠幫助到各位。
【本文是51CTO專(zhuān)欄機(jī)構(gòu)“豈安科技”的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)通過(guò)微信公眾號(hào)(bigsec)聯(lián)系原作者】