隨著市場上推出越來越多的測(cè)試工具,大家使用起來也比較盲目,我個(gè)人而言,使用過LoadRunner和Jmeter
很多人傾向于LoadRunner,因?yàn)長R的功能更強(qiáng)大,其實(shí)工具的選擇,不在于工具本身有多強(qiáng)大,取決于我們的實(shí)際需求
我接觸的項(xiàng)目基本都是web應(yīng)用,從性能測(cè)試需求的角度來說,性能測(cè)試工具需要具有以下一些特點(diǎn)
1、支持HTTP/HTTPS協(xié)議,能夠發(fā)送HTTP/HTTPS請(qǐng)求
2、可以實(shí)現(xiàn)不同的用戶場景,能夠根據(jù)實(shí)際業(yè)務(wù)模擬場景,對(duì)用戶的比例進(jìn)行合理分配
3、支持事務(wù);
4、支持參數(shù)化和關(guān)聯(lián);
5、可以生成報(bào)告;
既然Jmeter滿足以上特性,使用特別靈活,又是免費(fèi)的,所以我很明顯的偏向了JMeter
以下是整理的相關(guān)jmeter的基礎(chǔ)介紹和一些術(shù)語
1.基本介紹
Jmeter是Apache組織的開放源代碼項(xiàng)目,是功能和性能測(cè)試的工具,它是的Java應(yīng)用。Jmeter提供的操作界面支持多種配置和結(jié)果顯示。Jmeter能夠模擬對(duì)服務(wù)器或者網(wǎng)絡(luò)系統(tǒng)逐步加負(fù)載(壓測(cè)包括HTTP/FTP/JDBC/JAVA等)。Jmeter支持多線程并發(fā)取樣和單線程組對(duì)不同的功能同時(shí)取樣。Jmeter也可以作為Web服務(wù)器與瀏覽器之間的代理網(wǎng)關(guān),以便捕獲瀏覽器的請(qǐng)求和Web服務(wù)器的響應(yīng)。
Jmeter包含4部分:
負(fù)載發(fā)生器:用于產(chǎn)生負(fù)載,通常以多線程或多進(jìn)程的方式模擬用戶行為。
用戶運(yùn)行器:通常是一個(gè)腳本運(yùn)行引擎,用戶運(yùn)行器附加在線程或進(jìn)程上,根據(jù)腳本要求模擬指定的用戶行為。
資源生成器:用于生成測(cè)試過程中服務(wù)器、負(fù)載機(jī)的資源數(shù)據(jù)。
報(bào)表生成器:根據(jù)測(cè)試分析結(jié)果生成報(bào)表,提供可視化的數(shù)據(jù)展現(xiàn)方式
2.基礎(chǔ)元件介紹
測(cè)試計(jì)劃是測(cè)試計(jì)劃是性能測(cè)試的起點(diǎn),其它元件都需要依賴測(cè)試計(jì)劃,是所有元件的容器
2.1 線程Threads(Users)
2.1.1線程組
(1) 取樣錯(cuò)誤后要執(zhí)行的動(dòng)作
a.繼續(xù):默認(rèn)選項(xiàng),出錯(cuò)后后續(xù)的線程繼續(xù)運(yùn)行
b.Start Next Thread Loop:出錯(cuò)后啟動(dòng)下一組線程運(yùn)行
c.停止線程:后續(xù)的線程停止運(yùn)行,但是會(huì)返回出錯(cuò)前的結(jié)果
d.停止測(cè)試:與停止線程的差異在于不返回出錯(cuò)前的結(jié)果
(2)線程數(shù):虛擬用戶數(shù),代表發(fā)送請(qǐng)求的用戶數(shù),一個(gè)線程數(shù)占用一個(gè)進(jìn)程或線程。
(3)Ramp-Up Period(in seconds)-準(zhǔn)備時(shí)長
-所有線程在多少時(shí)間內(nèi)啟動(dòng),單位是秒,為0時(shí)代表一次請(qǐng)求即并發(fā)。如果線程數(shù)為5,Ramp-Up Period為10
(4)循環(huán)次數(shù)
-每個(gè)線程發(fā)送請(qǐng)求的次數(shù)。如果線程數(shù)為20,循環(huán)次數(shù)為100,那么每個(gè)線程發(fā)送100次請(qǐng)求,總 請(qǐng)求數(shù)是2000
(5)Delay Thread Creation until needed:直到需要時(shí)延遲線程的創(chuàng)建
(6)調(diào)度器:設(shè)定測(cè)試運(yùn)行時(shí)間
2.2配置元件
2.2.1 CSV Data Set Config
參數(shù)化配置,一般用在數(shù)據(jù)驅(qū)動(dòng),通過文件來存儲(chǔ)測(cè)試數(shù)據(jù)。調(diào)用時(shí)也支持參數(shù)化一部分?jǐn)?shù)據(jù)。Jmeter參數(shù)化方式是一次讀入一行,分割后存入若干變量中交給一個(gè)線程處理。
2.2.2 HTTP信息頭管理器
2.2.3 HTTP Cookie管理器
2.2.4 HTTP COOKIE Manager管理cookie
每個(gè)Jmeter線程都有自己的session
2.3前置處理器
全局的參數(shù)設(shè)置,設(shè)置后每次請(qǐng)求前讀取的值,比如地址、端口、token
2.4后置處理器(Post Processors)
正則表達(dá)式提取器可以從請(qǐng)求的響應(yīng)結(jié)果中提取需要的內(nèi)容,從而實(shí)現(xiàn)關(guān)聯(lián)
(1)引用名稱:外部引用時(shí)使用
(2)正則表達(dá)式:提取的內(nèi)容需要用()括起來。
(3)模板:使用$$引用起來 ,值從1開始
(4)匹配數(shù)據(jù)(0代表隨機(jī)):0代表隨機(jī),-1代表所有,其余正整數(shù)代表將在已提取的內(nèi)容中匹配第 幾個(gè)內(nèi)容
(5)缺省值:正則匹配失敗時(shí),取的值。
2.5Sampler(取樣器)
sampler是與服務(wù)器進(jìn)行交互的單元
(1)HTTP請(qǐng)求
(2)Web服務(wù)器
(3)Http請(qǐng)求
(4)Parameters參數(shù)
2.6監(jiān)聽器
2.6.1 聚合報(bào)告
聚合報(bào)告的相關(guān)指標(biāo):
(1)Label:每個(gè) Jmeter 的 element (例如 HTTP Request )都有一個(gè) Name 屬性,這里顯示的是 Name 屬性的值。
(2) #Samples:表示你這次測(cè)試中一共發(fā)出了多少個(gè)請(qǐng)求,如果測(cè)試計(jì)劃模擬10個(gè)用戶,每個(gè)用戶迭代10次,這里會(huì)顯示100。
(3) Average:平均響應(yīng)時(shí)間,默認(rèn)情況下是單個(gè) Request 的平均響應(yīng)時(shí)間,使用了事務(wù)控制器后表示為整個(gè)事務(wù)的平均響應(yīng)時(shí)間。
(4) Median: 50 %用戶的響應(yīng)時(shí)間。
(5) 90% Line: 90 %用戶的響應(yīng)時(shí)間。
6) Min:小響應(yīng)時(shí)間。
(7) Max:大響應(yīng)時(shí)間。
(8) Error%:錯(cuò)誤率,本次測(cè)試中出現(xiàn)錯(cuò)誤的請(qǐng)求的數(shù)量 / 請(qǐng)求的總數(shù)。
(9) Throughput:吞吐量,默認(rèn)情況下表示每秒完成的請(qǐng)求數(shù)( Request per Second )。當(dāng)使用了 Transaction Controller 時(shí),也可以表示類似 LoadRunner 的 Transaction per Second 數(shù) KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,相當(dāng)于LoadRunner中的Throughput/Sec。
(10) KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量。
2.6.2 查看結(jié)果樹
(1)Thread Name: 線程組名稱
(2)Sample Start: 啟動(dòng)開始時(shí)間
(3)Load time: 加載時(shí)長
(4)Latency: 等待時(shí)長
(5)Size in bytes: 發(fā)送的數(shù)據(jù)總大小
(6)Headers size in bytes: 發(fā)送頭大小
(7)Body size in bytes: 發(fā)送數(shù)據(jù)的其余部分大小
(8)Sample Count: 發(fā)送統(tǒng)計(jì)
(9)Error Count: 交互錯(cuò)誤統(tǒng)計(jì)
(10)Response code: 返回碼
(11)Response message: 返回信息
(12)Response headers: 返回的頭部信息
2.7斷言
確定Jmeter有沒有按照預(yù)期工作,應(yīng)當(dāng)考慮使Jmeter提供的斷言,加到Sampler 里面可以對(duì)返回的結(jié)果進(jìn)行判斷,例如判斷HTTP返回結(jié)果里面是否含有某個(gè)字符串
附上一張jmeter的界面截圖