一、JMeter的介紹
JMeter是Apache組織開發(fā)的基于Java的壓力測(cè)試工具。JMeter能夠?qū)TTP和FTP服務(wù)器進(jìn)行壓力和性能測(cè)試, 也可以對(duì)任何數(shù)據(jù)庫(kù)進(jìn)行同樣的測(cè)試(通過JDBC)。(Jmeter 開源免費(fèi))
1 、進(jìn)程與線程
線程:是程序執(zhí)行流的最小單元,是系統(tǒng)獨(dú)立調(diào)度和分配CPU(獨(dú)立運(yùn)行)的基本單位。
進(jìn)程:是資源分配的基本單位。一個(gè)進(jìn)程包括多個(gè)線程。

多線程:同一時(shí)刻執(zhí)行多個(gè)線程。如,用瀏覽器一邊下載,一邊聽歌,一邊看視頻,一邊看網(wǎng)頁......
多進(jìn)程:同時(shí)執(zhí)行多個(gè)程序。如,同時(shí)運(yùn)行微信,QQ,以及各種瀏覽器
2、Jmeter性能測(cè)試的一些相關(guān)概念
(1)? 壓測(cè):通過逐步加壓的方法,使得系統(tǒng)的某些資源達(dá)到飽和,甚至失效的狀態(tài),簡(jiǎn)單粗暴的解釋就是什么條件能把系統(tǒng)壓崩潰。Jmeter通過模擬大量的虛擬用戶向服務(wù)器產(chǎn)生負(fù)載,使服務(wù)器的資源處于極限狀態(tài)下長(zhǎng)時(shí)間連續(xù)運(yùn)行,以測(cè)試服務(wù)器在高負(fù)載情況下是否能夠穩(wěn)定工作。
(2)? 并發(fā):在操作系統(tǒng)中,是指一個(gè)時(shí)間段中有幾個(gè)程序都處于已啟動(dòng)運(yùn)行到運(yùn)行完畢之間,且這幾個(gè)程序都是在同一個(gè)處理機(jī)上運(yùn)行,但任一個(gè)時(shí)刻點(diǎn)上只有一個(gè)程序在處理機(jī)上運(yùn)行。也就是說并發(fā)是指在一段時(shí)間內(nèi)宏觀上多個(gè)程序同時(shí)運(yùn)行。(區(qū)別于并行,并行是指在同一時(shí)刻,有多條指令在多個(gè)處理器上同時(shí)執(zhí)行。所以無論從微觀還是從宏觀來看,二者都是一起執(zhí)行的。)JMeter是以線程的方式來進(jìn)行模擬用戶的并發(fā)訪問的。
(3)? 并行:當(dāng)系統(tǒng)有一個(gè)以上CPU時(shí),則線程的操作有可能非并發(fā)。當(dāng)一個(gè)CPU執(zhí)行一個(gè)線程時(shí),另一個(gè)CPU可以執(zhí)行另一個(gè)線程,兩個(gè)線程互不搶占CPU資源,可以同時(shí)進(jìn)行,這種方式我們稱之為并行(Parallel)
(3) 吞吐量(Throughput):是指系統(tǒng)在單位時(shí)間處理的請(qǐng)求數(shù)量。對(duì)于無并發(fā)的應(yīng)用系統(tǒng)而言,吞吐量與響應(yīng)時(shí)間成嚴(yán)格的反比關(guān)系,實(shí)際此時(shí)吞吐量就是響應(yīng)時(shí)間的倒數(shù)。對(duì)于單用戶的系統(tǒng),響應(yīng)時(shí)間可以很好地度量系統(tǒng)的性能,但對(duì)于并發(fā)系統(tǒng),通常需要吞吐量作為性能指標(biāo)。
(4) QPS每秒查詢率(Query Per Second)每秒查詢率QPS是對(duì)一個(gè)特定的查詢服務(wù)器在規(guī)定的查詢服務(wù)器在規(guī)定時(shí)間內(nèi)所處理流量多少的衡量標(biāo)準(zhǔn)。(類似于TPS,只是應(yīng)用于特定場(chǎng)景的吞吐量)
二、JMeter的組成

測(cè)試計(jì)劃:測(cè)試腳本根節(jié)點(diǎn),每一個(gè)測(cè)試腳本都是一個(gè)測(cè)試計(jì)劃,名稱可以自己定義。
線程組:控制多線程并發(fā),設(shè)置虛擬用戶。

斷言:預(yù)期結(jié)果和實(shí)際結(jié)果比對(duì)。
定時(shí)器:操作線程時(shí)候停頓多長(zhǎng)時(shí)間之類。
監(jiān)聽器:重要組成部分,可以用來調(diào)試腳本,看看是否成功,還可以對(duì)資源進(jìn)行監(jiān)控。
配置元件: 重要組成部分,可以在里面獲取cookie信息之類的配置信息。
后置處理器: 在并發(fā)完成后想要做什么。后一個(gè)請(qǐng)求用到前一個(gè)請(qǐng)求的結(jié)果,用后置處理器就可以拿到,放的一個(gè)變量里,下一次請(qǐng)求去用。
前置處理器:請(qǐng)求發(fā)生前做什么。
邏輯控制器:當(dāng)一個(gè)條件滿足時(shí),需要去做的操作。
Sampler:放置請(qǐng)求。
三、JMeter的使用
1、添加線程組
步驟:右鍵點(diǎn)擊“測(cè)試計(jì)劃” -> “添加” -> “線程(用戶)” -> “線程組”
線程組參數(shù)(線程屬性)詳解:
(1)? 線程數(shù):虛擬用戶數(shù)。一個(gè)虛擬用戶占用一個(gè)進(jìn)程或者線程,設(shè)置多少虛擬用戶數(shù)在這里也就是設(shè)置多少個(gè)線程數(shù)。
(2)? Ramp-Up Period(in seconds)準(zhǔn)備時(shí)長(zhǎng):設(shè)置的虛擬用戶數(shù)需要多長(zhǎng)時(shí)間全部啟動(dòng)。如果線程數(shù)為10,準(zhǔn)備時(shí)長(zhǎng)為2,那么需要2秒鐘啟動(dòng)10個(gè)線程,也就是每秒鐘啟動(dòng)5個(gè)線程。
(3)? 循環(huán)次數(shù):每個(gè)線程發(fā)送的請(qǐng)求次數(shù)。eg:如果線程數(shù)為10,循環(huán)次數(shù)是20,那么每個(gè)線程發(fā)送20次請(qǐng)求。總請(qǐng)求數(shù)為10*20=200。如果勾選“永遠(yuǎn)”,那么所有線程會(huì)一直發(fā)送請(qǐng)求,除非手動(dòng)選擇停止運(yùn)行腳本。
(4)? 調(diào)度器
持續(xù)時(shí)間(秒):測(cè)試計(jì)劃持續(xù)多長(zhǎng)時(shí)間
啟動(dòng)延遲(秒):測(cè)試計(jì)劃延長(zhǎng)多長(zhǎng)時(shí)間啟動(dòng)
2、添加HTTP請(qǐng)求
步驟:右鍵點(diǎn)擊“線程組” -> “添加” -> “Sampler” -> “HTTP請(qǐng)求”
(1)? Web服務(wù)器
協(xié)議:向目標(biāo)服務(wù)器發(fā)送HTTP請(qǐng)求協(xié)議,可以是HTTP或HTTPS,默認(rèn)為HTTP
服務(wù)器名稱或IP :HTTP請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱或IP
端口號(hào):目標(biāo)服務(wù)器的端口號(hào),默認(rèn)值為80
(2)? Http請(qǐng)求
方法:發(fā)送HTTP請(qǐng)求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、DELETE等。
路徑:目標(biāo)URL路徑(URL中去掉服務(wù)器地址、端口及參數(shù)后剩余部分)
Content encoding :編碼方式,默認(rèn)為ISO-8859-1編碼,這里配置為utf-8
同請(qǐng)求一起發(fā)送參數(shù)
在請(qǐng)求中發(fā)送的URL參數(shù),用戶可以將URL中所有參數(shù)設(shè)置在本表中,表中每行為一個(gè)參數(shù)(對(duì)應(yīng)URL中的 name=value),注意參數(shù)傳入中文時(shí)需要勾選“編碼”
3、添加察看結(jié)果樹
步驟:右鍵點(diǎn)擊“線程組” -> “添加” -> “監(jiān)聽器” -> “察看結(jié)果樹”
4、添加用戶自定義變量
5、添加斷言、斷言結(jié)果
4、添加聚合報(bào)告
聚合報(bào)告參數(shù)說明:

Label:每個(gè)請(qǐng)求的名稱,eg:HTTP請(qǐng)求
#樣本(#Samples):請(qǐng)求數(shù)——表示在這次測(cè)試中一共發(fā)了多少個(gè)請(qǐng)求
平均值(Average):平均響應(yīng)時(shí)間——單個(gè)請(qǐng)求的平均響應(yīng)時(shí)間
中位數(shù)(Median):所有請(qǐng)求響應(yīng)時(shí)間的中間值
90%~99%百分位(Line):90%~99%用戶的響應(yīng)時(shí)間
最小值(Min):最小響應(yīng)時(shí)間
最大值(Max):最大響應(yīng)時(shí)間
異常(Error)%:錯(cuò)誤率——錯(cuò)誤請(qǐng)求數(shù)/請(qǐng)求總數(shù)
吞吐量(Throughput):每秒完成的請(qǐng)求數(shù)
接收KB/Sec: 每秒從服務(wù)器端接收到的數(shù)據(jù)量
發(fā)送 KB/src:每秒從客戶端發(fā)送的請(qǐng)求的數(shù)量。
一般而言,性能測(cè)試中我們需要重點(diǎn)關(guān)注的數(shù)據(jù)有: Samples 請(qǐng)求數(shù),Average 平均響應(yīng)時(shí)間,Min 最小響應(yīng)時(shí)間,Max 最大響應(yīng)時(shí)間,Error% 錯(cuò)誤率及Throughput 吞吐量。