一. 性能測(cè)試
1.0 為什么要進(jìn)行性能測(cè)試?
評(píng)估當(dāng)前系統(tǒng)的能力
尋找性能瓶頸,優(yōu)化系統(tǒng)性能
評(píng)估軟件是否滿(mǎn)足未來(lái)的需要
招聘需要
1.1 什么是性能
時(shí)間:系統(tǒng)處理用戶(hù)請(qǐng)求的響應(yīng)時(shí)間資源:系統(tǒng)運(yùn)行過(guò)程中,系統(tǒng)資源的消耗情況
1.2. 性能測(cè)試是什么
1.2.1 廣義定義
基于協(xié)議模擬用戶(hù)發(fā)出請(qǐng)求蝗罗,對(duì)服務(wù)器形成一定負(fù)載,來(lái)測(cè)試服務(wù)器的性能指標(biāo)是否滿(mǎn)足要求性能指標(biāo)關(guān)注點(diǎn):時(shí)間性能、空間性能性能測(cè)試與頁(yè)面無(wú)關(guān)
1.2.1 狹義定義
指通過(guò)自動(dòng)化的測(cè)試工具模擬多種正常裁蚁、峰值以及異常負(fù)載條件來(lái)對(duì)系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試。
1.3 功能和性能測(cè)試
不同功能測(cè)試驗(yàn)證系統(tǒng)的功能需求規(guī)格继准,聚焦功能枉证。性能測(cè)試驗(yàn)證系統(tǒng)的業(yè)務(wù)性需求場(chǎng)景,聚焦時(shí)間和資源移必。
關(guān)系一般項(xiàng)目中室谚,先功能測(cè)試通過(guò)后,后進(jìn)行性能測(cè)試避凝。
1.4 性能測(cè)試的分類(lèi)
1.4.1 基準(zhǔn)測(cè)試
狹義:?jiǎn)斡脩?hù)測(cè)試廣義:建立基準(zhǔn)線(xiàn)舞萄,當(dāng)系統(tǒng)軟硬件環(huán)境發(fā)生變化之后再進(jìn)行一次基準(zhǔn)測(cè)試以確定變化對(duì)性能的影響。
1.4.2 負(fù)載測(cè)試
概念通過(guò)逐步增加系統(tǒng)負(fù)載管削,確定在滿(mǎn)足性能指標(biāo)的情況下倒脓,找出系統(tǒng)所能承受最大負(fù)載量的測(cè)試。
作用系統(tǒng)最大負(fù)載量達(dá)到用戶(hù)要求時(shí)含思,系統(tǒng)才能正式上線(xiàn)使用崎弃。
案例
電梯行業(yè)規(guī)范:電梯從1樓到5樓的運(yùn)行時(shí)間不超過(guò)24s
1人 ?? 20s
7人 ?? 20s
13人 ? 20s ?? 達(dá)到最大負(fù)載
16人 ? 25s
19人 ? 28s
21人 ? 斷繩子
注意通過(guò)負(fù)載測(cè)試,可以確定系統(tǒng)的最大負(fù)載量和極限負(fù)載量系統(tǒng)對(duì)外宣稱(chēng)的最大負(fù)載量負(fù)載測(cè)試的時(shí)間一般為1-2小時(shí)
1.4.3 穩(wěn)定性測(cè)試
概念:在服務(wù)器穩(wěn)定運(yùn)行(用戶(hù)正常業(yè)務(wù)負(fù)載下)的情況進(jìn)行長(zhǎng)時(shí)間測(cè)試(1天-一周等)含潘,并最終保證服務(wù)器能滿(mǎn)足線(xiàn)上業(yè)務(wù)需求饲做。
系統(tǒng)在用戶(hù)需求的業(yè)務(wù)負(fù)載下運(yùn)行達(dá)到規(guī)定的時(shí)間時(shí),系統(tǒng)才能正式上線(xiàn)使用遏弱。
1.4.4 壓力測(cè)試
概念:在強(qiáng)負(fù)載下的測(cè)試盆均,查看系統(tǒng)在峰值下是否功能隱患、系統(tǒng)是否具有良好的容錯(cuò)能力和可恢復(fù)的能力漱逸。
測(cè)試場(chǎng)景高負(fù)載下的長(zhǎng)時(shí)間穩(wěn)定性壓力測(cè)試 (如:B-C區(qū)間內(nèi)進(jìn)行24/3*24小時(shí)長(zhǎng)時(shí)間測(cè)試)極限負(fù)載下的破壞性壓力測(cè)試(如:C-D區(qū)間內(nèi)進(jìn)行測(cè)試)
1.4.5 并發(fā)測(cè)試
概念:在極短時(shí)間內(nèi)泪姨,發(fā)送多個(gè)請(qǐng)求游沿,來(lái)驗(yàn)證服務(wù)器對(duì)并發(fā)的處理能力。
應(yīng)用場(chǎng)景特定的活動(dòng)場(chǎng)景:搶紅包肮砾、秒殺诀黍、搶購(gòu)等。
與負(fù)載測(cè)試對(duì)比:負(fù)載測(cè)試:主要目的是測(cè)試高負(fù)載情況下仗处,對(duì)系統(tǒng)資源的消耗眯勾,是否會(huì)耗盡的問(wèn)題(雙11活動(dòng))并發(fā)測(cè)試:主要目的是測(cè)試極短時(shí)間內(nèi),并發(fā)請(qǐng)求時(shí),系統(tǒng)資源爭(zhēng)搶的問(wèn)題(搶紅包、秒殺)
1.5 性能測(cè)試的指標(biāo)
1.5.1 響應(yīng)時(shí)間
指從客戶(hù)端發(fā)起請(qǐng)求開(kāi)始抢腐,到客戶(hù)端接收到結(jié)果的總時(shí)間
包括:服務(wù)器處理時(shí)間 + 網(wǎng)絡(luò)傳輸時(shí)間
1.5.2 并發(fā)用戶(hù)數(shù)
某一時(shí)刻同時(shí)向服務(wù)器發(fā)送請(qǐng)求的用戶(hù)數(shù)
1.5.3 吞吐量(Throughout)
1.概念:?jiǎn)挝粫r(shí)間內(nèi)處理客戶(hù)端的請(qǐng)求數(shù)量,直接體現(xiàn)軟件系統(tǒng)能能承載能力模叙。
吞吐量單位分類(lèi)
1.5.4 QPS
QPS(Query Per Second)每秒查詢(xún)數(shù),即控制服務(wù)器每秒處理的指定請(qǐng)求的數(shù)量鞋屈。
1.5.5 TPS
TPS(Transaction Per Second)每秒事務(wù)數(shù)范咨,即控制服務(wù)器每秒處理事務(wù)請(qǐng)求的數(shù)量。如:支付請(qǐng)求事務(wù)=查詢(xún)用戶(hù)余額請(qǐng)求+校驗(yàn)支付安全請(qǐng)求+發(fā)送支付請(qǐng)求每秒處理查詢(xún)用戶(hù)余額15請(qǐng)求厂庇,每秒處理校驗(yàn)支付安全15個(gè)請(qǐng)求渠啊,每秒處理發(fā)送支付15個(gè)請(qǐng)求支付tsp為15
1.5.6 點(diǎn)擊數(shù)
所有的頁(yè)面元素(如:圖片、鏈接权旷、框架等)的請(qǐng)求總數(shù)量
注意:
點(diǎn)擊數(shù)是請(qǐng)求數(shù)替蛉,不是頁(yè)面上的一次點(diǎn)擊
1.5.7 錯(cuò)誤率
指系統(tǒng)在負(fù)載情況下,失敗業(yè)務(wù)的概率
注意:
錯(cuò)誤率是性能指標(biāo)拄氯,是高負(fù)載下的失敗業(yè)務(wù)的概率-隨機(jī)bug是功能bug躲查,先解決隨機(jī)bug才能進(jìn)行性能測(cè)試
1.5.8 資源利用率
概念:系統(tǒng)各種資源的使用情況,率=資源使用量/總資源可用量x100%
常見(jiàn)資源指標(biāo)CPU使用率:不高于75%-85%內(nèi)存大小使用率:不高于80%磁盤(pán)IO(速率):不高于90%網(wǎng)路(速率):不高于80%
1.6 性能測(cè)試工具
二. Jmeter簡(jiǎn)介
2.1. 我們?yōu)槭裁词褂肑meter
開(kāi)源译柏,免費(fèi)镣煮,基于Java編寫(xiě),可集成到其他系統(tǒng)可拓展各個(gè)功能插件支持接口測(cè)試鄙麦,壓力(負(fù)載和壓力)測(cè)試等多種功能典唇,支持錄制回放,入門(mén)簡(jiǎn)單相較于自己編寫(xiě)框架活其他開(kāi)源工具胯府,有較為完善的UI界面介衔,便于接口調(diào)試多平臺(tái)支持,可在Linux骂因,Windows炎咖,Mac上運(yùn)行,支持多協(xié)議
2.2. Jmeter的作用
接口測(cè)試 面試說(shuō)postman,因?yàn)榉奖愫糜谩?/p>
性能測(cè)試 jmeter塘装,也可以用postman(runner)急迂,但是沒(méi)有性能指標(biāo)
數(shù)據(jù)庫(kù)測(cè)試
2.3. Jmeter怎么用
Windows下Jmeter下載安裝,登錄 http://jmeter.apache.org/download_jmeter.cgi 蹦肴,根據(jù)自己平臺(tái),下載對(duì)應(yīng)文件
2.4. 安裝JAVA環(huán)境
安裝JDK猴娩,配置環(huán)境變量(具體步驟不做介紹)
將下載Jmeter文件解壓阴幌,打開(kāi)/bin/jmeter.bat
2.5. Jmeter的目錄結(jié)構(gòu)
/bin 目錄常用文件介紹:
examples:目錄下包含Jmeter使用實(shí)例
ApacheJMeter.jar:JMeter源碼包
jmeter.bat:windows下啟動(dòng)文件
jmeter.sh:Linux下啟動(dòng)文件
jmeter.log:Jmeter運(yùn)行日志文件
jmeter.properties:Jmeter配置文件
jmeter-server.bat:windows下啟動(dòng)負(fù)載生成器服務(wù)文件
jmeter-server:Linux下啟動(dòng)負(fù)載生成器文件
/docs目錄——Jmeter幫助文檔
/extras目錄——提供了對(duì)Ant的支持文件,可也用于持續(xù)集成
/lib目錄——存放Jmeter依賴(lài)的jar包卷中,同時(shí)安裝插件也放于此目錄
/licenses目錄——軟件許可文件矛双,不用管
/printable_docs目錄——Jmeter用戶(hù)手冊(cè)
三. 使用Jmeter測(cè)試快速入門(mén)
3.1. 線(xiàn)程組是什么
進(jìn)程: 一個(gè)正在執(zhí)行的程序?qū)?yīng)一個(gè)進(jìn)程
線(xiàn)程: 一個(gè)進(jìn)程有多個(gè)執(zhí)行線(xiàn)程
線(xiàn)程組: ? 按照線(xiàn)程性質(zhì)對(duì)線(xiàn)程分組。查看任務(wù)管理器(愛(ài)奇藝有多個(gè))
三者關(guān)系: 一個(gè)進(jìn)程有多個(gè)線(xiàn)程組蟆豫,一個(gè)線(xiàn)程組有多個(gè)線(xiàn)程
測(cè)試計(jì)劃—線(xiàn)程組—線(xiàn)程組屬性中的線(xiàn)程數(shù)并發(fā)執(zhí)行:多個(gè)線(xiàn)程同時(shí)執(zhí)行议忽,特點(diǎn):執(zhí)行結(jié)束的順序與開(kāi)始的順序不一致順序執(zhí)行:按照線(xiàn)程的啟動(dòng)順序挨個(gè)執(zhí)行默認(rèn)情況下,線(xiàn)程組中的線(xiàn)程是并發(fā)執(zhí)行每一個(gè)線(xiàn)程都要執(zhí)行組內(nèi)的http請(qǐng)求設(shè)置線(xiàn)程組順序執(zhí)行:勾選測(cè)試計(jì)劃中的(獨(dú)立運(yùn)行每個(gè)線(xiàn)程組)線(xiàn)程組用來(lái)模擬用戶(hù)的并發(fā)訪(fǎng)問(wèn)
3.1.1. 創(chuàng)建線(xiàn)程組
3.1.2. 線(xiàn)程組主要包含三個(gè)參數(shù):
線(xiàn)程數(shù)十减、準(zhǔn)備時(shí)長(zhǎng)(Ramp-Up Period(in seconds))栈幸、循環(huán)次數(shù)。
3.1.3. 線(xiàn)程數(shù):
虛擬用戶(hù)數(shù)帮辟。一個(gè)虛擬用戶(hù)占用一個(gè)線(xiàn)程速址。設(shè)置多少虛擬用戶(hù)數(shù)在這里也就是設(shè)置多少個(gè)線(xiàn)程數(shù)。
3.1.4. 準(zhǔn)備時(shí)長(zhǎng)(秒):
設(shè)置的虛擬用戶(hù)數(shù)需要多長(zhǎng)時(shí)間全部啟動(dòng)由驹。如果線(xiàn)程數(shù)為20 芍锚,準(zhǔn)備時(shí)長(zhǎng)為10 ,那么需要10秒鐘啟動(dòng)20個(gè)線(xiàn)程蔓榄。也就是每秒鐘啟動(dòng)2個(gè)線(xiàn)程并炮。
3.1.5. 循環(huán)次數(shù):
每個(gè)線(xiàn)程發(fā)送請(qǐng)求的次數(shù)。如果線(xiàn)程數(shù)為20 甥郑,循環(huán)次數(shù)為100 逃魄,那么每個(gè)線(xiàn)程發(fā)送100次請(qǐng)求∫既簦總請(qǐng)求數(shù)為20*100=2000 嗅钻。如果勾選了“永遠(yuǎn)”,那么所有線(xiàn)程會(huì)一直發(fā)送請(qǐng)求店展,一直到選擇停止運(yùn)行腳本养篓。
3.1.6. 調(diào)度器
設(shè)置線(xiàn)程組啟動(dòng)的開(kāi)始時(shí)間和結(jié)束時(shí)間(配置調(diào)度器時(shí),需要勾選循環(huán)次數(shù)為永遠(yuǎn))
3.1.7. 持續(xù)時(shí)間(秒)
測(cè)試持續(xù)時(shí)間赂蕴,會(huì)覆蓋結(jié)束時(shí)間
3.1.8. 啟動(dòng)延遲(秒)
測(cè)試延遲啟動(dòng)時(shí)間柳弄,會(huì)覆蓋啟動(dòng)時(shí)間
3.1.9. 啟動(dòng)時(shí)間
測(cè)試啟動(dòng)時(shí)間,啟動(dòng)延遲會(huì)覆蓋它。當(dāng)啟動(dòng)時(shí)間已過(guò)碧注,手動(dòng)只需測(cè)試時(shí)當(dāng)前時(shí)間也會(huì)覆蓋它嚣伐。
3.1.10. 結(jié)束時(shí)間
測(cè)試結(jié)束時(shí)間,持續(xù)時(shí)間會(huì)覆蓋它萍丐。
3.2. 創(chuàng)建http請(qǐng)求
見(jiàn)得最多轩端,所以我們著重講解:
3.3. 指定請(qǐng)求域名,請(qǐng)求路徑
一個(gè)HTTP請(qǐng)求有著許多的配置參數(shù)逝变,下面將詳細(xì)介紹:
名稱(chēng):本屬性用于標(biāo)識(shí)一個(gè)取樣器基茵,建議使用一個(gè)有意義的名稱(chēng)。
注釋?zhuān)簩?duì)于測(cè)試沒(méi)有任何作用壳影,僅用戶(hù)記錄用戶(hù)可讀的注釋信息拱层。
服務(wù)器名稱(chēng)或IP :HTTP請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱(chēng)或IP地址。
端口號(hào):目標(biāo)服務(wù)器的端口號(hào)宴咧。
方法:發(fā)送HTTP請(qǐng)求的方法根灯,可用方法包括GET、POST掺栅、HEAD烙肺、PUT、OPTIONS柿冲、TRACE茬高、DELETE等。
Content encoding :內(nèi)容的編碼方式假抄,默認(rèn)值為iso8859
路徑:目標(biāo)URL路徑(不包括服務(wù)器地址和端口)
點(diǎn)擊run測(cè)試怎栽,很麻煩,我們使用postman測(cè)試更簡(jiǎn)單宿饱,使用postman操作熏瞄。可以使用剛才的接口文檔中的谬以,聚合接口中演示一個(gè)强饮。
3.4. 設(shè)置對(duì)應(yīng)的查看內(nèi)容
注意:如果監(jiān)聽(tīng)器中有jp@gc開(kāi)頭的,都是第三方插件
3.5. 查看表格信息
Sample:每個(gè)請(qǐng)求的序號(hào)
Start Time:每個(gè)請(qǐng)求開(kāi)始時(shí)間
Thread Name:每個(gè)線(xiàn)程的名稱(chēng)
Label:Http請(qǐng)求名稱(chēng)
Sample Time:每個(gè)請(qǐng)求所花時(shí)間为黎,單位毫秒
Status:請(qǐng)求狀態(tài)邮丰,如果為勾則表示成功,如果為叉表示失敗铭乾。
Bytes:請(qǐng)求的字節(jié)數(shù)
樣本數(shù)目:也就是上面所說(shuō)的請(qǐng)求個(gè)數(shù)剪廉,成功的情況下等于你設(shè)定的并發(fā)數(shù)目乘以循環(huán)次數(shù)
平均:每個(gè)線(xiàn)程請(qǐng)求的平均時(shí)間
最新樣本:表示服務(wù)器響應(yīng)最后一個(gè)請(qǐng)求的時(shí)間
偏離:服務(wù)器響應(yīng)時(shí)間變化、離散程度測(cè)量值的大小炕檩,或者斗蒋,換句話(huà)說(shuō),就是數(shù)據(jù)的分布。
3.6. 查看結(jié)果樹(shù)
請(qǐng)求的數(shù)據(jù)展示(請(qǐng)求頭信息泉沾,請(qǐng)求參數(shù),,)
響應(yīng)的數(shù)據(jù)展示(響應(yīng)碼捞蚂,響應(yīng)頭,,)
通過(guò)察看結(jié)果樹(shù),我們可以看到每個(gè)請(qǐng)求的結(jié)果跷究,其中紅色的是出錯(cuò)的請(qǐng)求姓迅,綠色的為通過(guò)。
ThreadName:線(xiàn)程組名稱(chēng)
SampleStart:啟動(dòng)開(kāi)始時(shí)間
Loadtime:加載時(shí)長(zhǎng)
Latency:等待時(shí)長(zhǎng)
Sizeinbytes:發(fā)送的數(shù)據(jù)總大小
Headerssizeinbytes:發(fā)送數(shù)據(jù)的其余部分大小
SampleCount:發(fā)送統(tǒng)計(jì)
ErrorCount:交互錯(cuò)誤統(tǒng)計(jì)
Responsecode:返回碼
Responsemessage:返回信息
Responseheaders:返回的頭部信息
3.7. 聚合報(bào)告參數(shù)說(shuō)明
lable:對(duì)應(yīng)每一個(gè)http請(qǐng)求揭朝,顯示的是http請(qǐng)求的Name队贱,如百度http請(qǐng)求name為baidu
#Samples:表示這一次的測(cè)試中一共發(fā)出了多少請(qǐng)求,如上圖所示潭袱,sougou和baidu的http請(qǐng)求每個(gè)都發(fā)出30個(gè)請(qǐng)求
Average:平均響應(yīng)時(shí)間,指的是所有的請(qǐng)求的平均響應(yīng)時(shí)間锋恬,如上圖的30個(gè)請(qǐng)求的總的響應(yīng)時(shí)間除以30得出的平均響應(yīng)時(shí)間屯换,默認(rèn)的情況下是單個(gè)請(qǐng)求的平均響應(yīng)時(shí)間,但當(dāng)使用了“事務(wù)控制器”時(shí)与学,則以事物為單位顯示平均響應(yīng)時(shí)間
Median:中位數(shù)彤悔,也就是50%用戶(hù)的響應(yīng)時(shí)間
90%Line:90%用戶(hù)的響應(yīng)時(shí)間
Min:最小響應(yīng)時(shí)間
Max:最大的響應(yīng)時(shí)間
Error%:本次測(cè)試中出現(xiàn)錯(cuò)誤的請(qǐng)求的數(shù)量/請(qǐng)求的總數(shù),如上圖所示索守,本次的測(cè)試中晕窑,sougou的http請(qǐng)求66.6%的請(qǐng)求出錯(cuò),而baidu的請(qǐng)求則沒(méi)有出錯(cuò)的請(qǐng)求
Throughput:吞吐量卵佛,默認(rèn)情況下表示每秒完成的請(qǐng)求數(shù)杨赤,如上圖所示,每秒完成的請(qǐng)求數(shù)分別為6.6個(gè)每秒截汪,6.2個(gè)每秒
Recived KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量疾牲,以kb為計(jì)算的單位
掌握:平均時(shí)間、錯(cuò)誤率衙解、吞吐量阳柔。
3.8. 圖形結(jié)果
作用:通過(guò)圖形展示出本次性能測(cè)試數(shù)據(jù)的分布。 圖形結(jié)果一般作為聚合報(bào)告的分析輔佐
樣本數(shù)目:總共發(fā)送到服務(wù)器的請(qǐng)求數(shù)蚓峦。
最新樣本:代表時(shí)間的數(shù)字舌剂,是服務(wù)器響應(yīng)最后一個(gè)請(qǐng)求的時(shí)間。
吞吐量:服務(wù)器每分鐘處理的請(qǐng)求數(shù)暑椰。
平均值:總運(yùn)行時(shí)間除以發(fā)送到服務(wù)器的請(qǐng)求數(shù)霍转。
中間值:有一半的服務(wù)器響應(yīng)時(shí)間低于該值而另一半高于該值。
偏離:表示服務(wù)器響應(yīng)時(shí)間變化干茉、離散程度測(cè)量值的大小谴忧。
四. Jmeter主要組件介紹
測(cè)試計(jì)劃:使用 JMeter 進(jìn)行測(cè)試的起點(diǎn),它是其它 JMeter 測(cè)試元件的容器。
線(xiàn)程組:代表一定數(shù)量的并發(fā)用戶(hù)沾谓,它可以用來(lái)模擬并發(fā)用戶(hù)發(fā)送請(qǐng)求委造。實(shí)際的請(qǐng)求內(nèi)容在Sampler中定義,它被線(xiàn)程組包含均驶』枵祝可以在“測(cè)試計(jì)劃->添加->線(xiàn)程組”來(lái)建立它,然后在線(xiàn)程組面板里有幾個(gè)輸入欄:線(xiàn)程數(shù)妇穴、Ramp-Up Period(in seconds)爬虱、循環(huán)次數(shù),其中Ramp-Up Period(in seconds)表示在這時(shí)間內(nèi)創(chuàng)建完所有的線(xiàn)程腾它。如有8個(gè)線(xiàn)程跑筝,Ramp-Up = 200秒,那么線(xiàn)程的啟動(dòng)時(shí)間間隔為200/8=25秒瞒滴,這樣的好處是:一開(kāi)始不會(huì)對(duì)服務(wù)器有太大的負(fù)載曲梗。線(xiàn)程組是為模擬并發(fā)負(fù)載而設(shè)計(jì)。
取樣器(Sampler):模擬各種請(qǐng)求妓忍。所有實(shí)際的測(cè)試任務(wù)都由取樣器承擔(dān)虏两,存在很多種請(qǐng)求。如:HTTP 世剖、ftp請(qǐng)求等等定罢。
監(jiān)聽(tīng)器:負(fù)責(zé)收集測(cè)試結(jié)果,同時(shí)也被告知了結(jié)果顯示的方式旁瘫。功能是對(duì)取樣器的請(qǐng)求結(jié)果顯示祖凫、統(tǒng)計(jì)一些數(shù)據(jù)(吞吐量、KB/S……)等境蜕。
斷言:用于來(lái)判斷請(qǐng)求響應(yīng)的結(jié)果是否如用戶(hù)所期望蝙场,是否正確。它可以用來(lái)隔離問(wèn)題域粱年,即在確保功能正確的前提下執(zhí)行壓力測(cè)試售滤。這個(gè)限制對(duì)于有效的測(cè)試是非常有用的。
邏輯控制器:允許自定義JMeter發(fā)送請(qǐng)求的行為邏輯台诗,它與Sampler結(jié)合使用可以模擬復(fù)雜的請(qǐng)求序列完箩。
定時(shí)器:負(fù)責(zé)定義請(qǐng)求(線(xiàn)程)之間的延遲間隔,模擬對(duì)服務(wù)器的連續(xù)請(qǐng)求拉队。
配置元件維護(hù)Sampler需要的配置信息弊知,并根據(jù)實(shí)際的需要會(huì)修改請(qǐng)求的內(nèi)容。
前置處理器和后置處理器負(fù)責(zé)在生成請(qǐng)求之前和之后完成工作粱快。前置處理器常常用來(lái)修改請(qǐng)求的設(shè)置秩彤,后置處理器則常常用來(lái)處理響應(yīng)的數(shù)據(jù)叔扼。
4.1. 測(cè)試計(jì)劃
1.測(cè)試計(jì)劃就是一個(gè)完整的場(chǎng)景
2.“獨(dú)立運(yùn)行每個(gè)線(xiàn)程組” :勾選以后所有的線(xiàn)程組都是順序執(zhí)行的了。一般不勾選漫雷,讓所有 的線(xiàn)程組并發(fā)啟動(dòng)瓜富。
3.“函數(shù)測(cè)試模式” :勾選后會(huì)有詳細(xì)的請(qǐng)求記錄,消耗資源降盹,影響客戶(hù)端性能与柑。一般不勾選。
4.用戶(hù)定義的變量:全局變量蓄坏,測(cè)試計(jì)劃上可以添加用戶(hù)定義的變量价捧。一般添加一些系統(tǒng)常用的配置。如果測(cè)試過(guò)程中想切換環(huán)境涡戳,切換配置结蟋,一般不建議在測(cè)試計(jì)劃上添加變量
4.2. 線(xiàn)程組
(1)thread group(線(xiàn)程組)
這個(gè)就是我們通常添加運(yùn)行的線(xiàn)程。通俗的講一個(gè)線(xiàn)程組渔彰,可以看做一個(gè)虛擬用戶(hù)組椎眯,線(xiàn)程組中的每個(gè)線(xiàn)程都可以理解為一個(gè)虛擬用戶(hù)。
(2)setup thread group
一種特殊類(lèi)型的ThreadGroup的胳岂,可用于執(zhí)行預(yù)測(cè)試操作。這些線(xiàn)程的行為完全像一個(gè)正常的線(xiàn)程組元件舔稀。不同的是乳丰,這些類(lèi)型的線(xiàn)程執(zhí)行測(cè)試前進(jìn)行定期線(xiàn)程組的執(zhí)行;類(lèi)似LoadRunner的init内贮,測(cè)試開(kāi)始時(shí)進(jìn)行初始化的工作产园。
(3)teardown thread group
一種特殊類(lèi)型的ThreadGroup的,可用于執(zhí)行測(cè)試后動(dòng)作夜郁。這些線(xiàn)程的行為完全像一個(gè)正常的線(xiàn)程組元件什燕。不同的是,這些類(lèi)型的線(xiàn)程執(zhí)行測(cè)試結(jié)束后執(zhí)行定期的線(xiàn)程組竞端;類(lèi)似LoadRunnner的end屎即,測(cè)試結(jié)束時(shí)進(jìn)行回收工作。
4.3. 取樣器(Http請(qǐng)求)
關(guān)于http請(qǐng)求的的屬性參數(shù)說(shuō)明:
1)名稱(chēng):用于標(biāo)識(shí)一個(gè)sample事富。建議使用一個(gè)有意義的名稱(chēng)
2)注釋?zhuān)簩?duì)于測(cè)試沒(méi)任何影響技俐,僅用來(lái)記錄用戶(hù)可讀的注釋信息
3)服務(wù)器名稱(chēng)或IP:http請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱(chēng)或者IP地址,比如http://www.baidu.com
4)端口號(hào):目標(biāo)服務(wù)器的端口號(hào)统台,默認(rèn)值為80雕擂,可不填
5)協(xié)議:向目標(biāo)服務(wù)器發(fā)送http請(qǐng)求時(shí)的協(xié)議,http/https贱勃,大小寫(xiě)不敏感井赌,默認(rèn)http
6)方法:發(fā)送http請(qǐng)求的方法(鏈接:http://www.cnblogs.com/imyalost/p/5630940.html)
7)Contentencoding:內(nèi)容的編碼方式(Content-Type=application/json;charset=utf-8)
8)路徑:目標(biāo)的URL路徑(不包括服務(wù)器地址和端口)
9)自動(dòng)重定向:如果選中該項(xiàng)谤逼,發(fā)出的http請(qǐng)求得到響應(yīng)是301/302,jmeter會(huì)重定向到新的界面
10)UsekeepAlive:jmeter和目標(biāo)服務(wù)器之間使用Keep-Alive方式進(jìn)行HTTP通信(默認(rèn)選中)
11)Usemultipart/from-dataforHTTPPOST:當(dāng)發(fā)送HTTPPOST請(qǐng)求時(shí)仇穗,使用
12)Parameters流部、BodyData以及FilesUpload的區(qū)別:
1.parameter是指函數(shù)定義中參數(shù),而argument指的是函數(shù)調(diào)用時(shí)的實(shí)際參數(shù)
2.簡(jiǎn)略描述為:parameter=形參(formalparameter)仪缸,argument=實(shí)參(actualparameter)
3.在不很?chē)?yán)格的情況下贵涵,現(xiàn)在二者可以混用,一般用argument恰画,而parameter則比較少用
Whiledefiningmethod,variablespassedinthemethodarecalledparameters.
當(dāng)定義方法時(shí)宾茂,傳遞到方法中的變量稱(chēng)為參數(shù).
Whileusingthosemethods,valuespassedtothosevariablesarecalledarguments.
當(dāng)調(diào)用方法時(shí),傳給變量的值稱(chēng)為引數(shù).(有時(shí)argument被翻譯為“引數(shù)“)
4拴还、BodyData指的是實(shí)體數(shù)據(jù)跨晴,就是請(qǐng)求報(bào)文里面主體實(shí)體的內(nèi)容,一般我們向服務(wù)器發(fā)送請(qǐng)求片林,攜帶的實(shí)體主體參數(shù)端盆,可以寫(xiě)入這里
5、FilesUpload指的是:從HTML文件獲取所有有內(nèi)含的資源:被選中時(shí)费封,發(fā)出HTTP請(qǐng)求并獲得響應(yīng)的HTML文件內(nèi)容后還對(duì)該HTML
進(jìn)行Parse并獲取HTML中包含的所有資源(圖片焕妙、flash等):(默認(rèn)不選中)
如果用戶(hù)只希望獲取特定資源,可以在下方的EmbeddedURLsmustmatch文本框中填入需要下載的特定資源表達(dá)式弓摘,只有能匹配指定正則表達(dá)式的URL指向資源會(huì)被下載
4.4. 監(jiān)聽(tīng)器
監(jiān)聽(tīng)器(Listener)負(fù)責(zé)收集測(cè)試結(jié)果焚鹊,同時(shí)也被告知了結(jié)果顯示的方式。我們常用的包括:聚合報(bào)告韧献、查看結(jié)果樹(shù)末患、用表格查看結(jié)果,都支持將結(jié)果數(shù)據(jù)寫(xiě)入文件锤窑。其他的添加上去看看就行璧针。聚合報(bào)告前面我們介紹過(guò),后面是查看結(jié)果樹(shù)和用表格查看結(jié)果的截圖渊啰。
4.5. 循環(huán)控制器
4.6. 事務(wù)控制器
作用: 事務(wù)控制器會(huì)生產(chǎn)一個(gè)額外的采樣器探橱,用來(lái)統(tǒng)計(jì)該控制器子結(jié)點(diǎn)的所有時(shí)間。在線(xiàn)程組下創(chuàng)建事務(wù)控制器參數(shù):· Generate parent sample:(選中這個(gè)參數(shù)結(jié)果展示如下圖紅框虽抄,否則顯示為下圖藍(lán)框)· Include duration of timer and pre-post processors in generated sample:選中這一項(xiàng)會(huì)統(tǒng)計(jì)定時(shí)器(timer)的時(shí)間走搁,否則只統(tǒng)計(jì)采樣器(sample)的時(shí)間
創(chuàng)建sample 訪(fǎng)問(wèn)首頁(yè)和注冊(cè)頁(yè)面
生成聚合報(bào)告
勾選
聚合報(bào)告中只有一項(xiàng)事務(wù)報(bào)告
4.7. 斷言---檢查點(diǎn)
斷言(Assertions)可以用來(lái)判斷請(qǐng)求響應(yīng)的結(jié)果是否如用戶(hù)所期望的。它可以用來(lái)隔離問(wèn)題域迈窟,即在確保功能正確的前提下執(zhí)行壓力測(cè)試私植。這個(gè)限制對(duì)于有效的測(cè)試是非常有用的。兩個(gè)重要斷言:響應(yīng)斷言和JSONAssertion響應(yīng)斷言:
JSON斷言:
4.8. 前置處理器和后置處理器
前置處理器(Pre Processors)和后置處理器(Post Processors)負(fù)責(zé)在生成請(qǐng)求之前和之后完成工作车酣。前置處理器常常用來(lái)修改請(qǐng)求的設(shè)置曲稼,后置處理器則常常用來(lái)處理響應(yīng)的數(shù)據(jù)索绪。我們主要在動(dòng)態(tài)關(guān)聯(lián)中用到后置處理器的正則表達(dá)式提取器。https://www.cnblogs.com/fengpingfan/p/4755411.html
4.9. 定時(shí)器
定時(shí)器(Timer)負(fù)責(zé)定義請(qǐng)求之間的延遲間隔
五. Jmeter組件參數(shù)化
5.1. 參數(shù)化是什么
動(dòng)態(tài)的獲取并設(shè)置數(shù)據(jù)
5.2. 為什么使用參數(shù)化
執(zhí)行批量操作贫悄,批量添加批量刪除瑞驱,人工效率太低
運(yùn)用程序代替人工獲取并設(shè)置數(shù)據(jù),安全高效
比如:對(duì)被測(cè)系統(tǒng)的用戶(hù)名和密碼進(jìn)行參數(shù)化窄坦,來(lái)模擬多個(gè)用戶(hù)同時(shí)登錄系統(tǒng)
5.3. 參數(shù)化實(shí)現(xiàn)之用戶(hù)自定義變量
通過(guò)這個(gè)功能唤反,能實(shí)現(xiàn)多接口共享數(shù)據(jù),修改一條即可修改全部
Filename:所需數(shù)據(jù)文件的路徑鸭津。如和腳本同一路徑彤侍,可直接填寫(xiě)文件名File encoding:編碼和文件保持一致即可,默認(rèn)為ANSI逆趋。如有中文盏阶,建議為UTF-8Variable Names:引用變量時(shí)的變量名,對(duì)應(yīng)數(shù)據(jù)文件中的每一列闻书,以逗號(hào)分隔名斟。如不填寫(xiě),文件的第一行數(shù)據(jù)將被讀取為變量名Delimiter:在.txt魄眉、.dat文件中砰盐,可以用逗號(hào)(,)或者Tab鍵(\t)來(lái)區(qū)分列與列Allow quote data:選項(xiàng)選為“true”的時(shí)候?qū)θ亲址奶幚沓霈F(xiàn)亂碼Recycle on EOF:到數(shù)據(jù)文件結(jié)尾時(shí)是否循環(huán)讀取。設(shè)置為T(mén)rue時(shí)坑律,線(xiàn)程數(shù)過(guò)多楞卡,數(shù)據(jù)文件讀取到最后一行時(shí),會(huì)再次從第一行開(kāi)始讀取脾歇。設(shè)置為False,到達(dá)文件結(jié)尾時(shí)如繼續(xù)讀取淘捡,則值會(huì)默認(rèn)為<EOF>藕各,可通過(guò)設(shè)置jmeter屬性csvdataset.eofstring來(lái)改變?cè)撝怠top thread on EOF:Recycle on EOF設(shè)置為False焦除,Stop thread on EOF設(shè)置為T(mén)rue激况,則讀取數(shù)據(jù)文件最后一行后,停止測(cè)試膘魄,不管還有多少線(xiàn)程組未執(zhí)行乌逐。Sharing mode:共享模式。默認(rèn)在所有線(xiàn)程組中使用创葡,可選擇每個(gè)線(xiàn)程組單獨(dú)打開(kāi)相同的部分使用用戶(hù)自定義變量只需要修改一次接口效果展示
5.4. 參數(shù)化實(shí)現(xiàn)之CSV Data Set Config
添加CSV Data Set Config:
添加界面:
通過(guò)這個(gè)組件可以動(dòng)態(tài)獲取并設(shè)置數(shù)據(jù)浙踢,實(shí)現(xiàn)批量添加操作名詞解釋?zhuān)?/b>
Filename:所需數(shù)據(jù)文件的路徑。如和腳本同一路徑灿渴,可直接填寫(xiě)文件名
File encoding:編碼和文件保持一致即可洛波,默認(rèn)為ANSI胰舆。如有中文,建議為UTF-8
Variable Names:引用變量時(shí)的變量名蹬挤,對(duì)應(yīng)數(shù)據(jù)文件中的每一列缚窿,以逗號(hào)分隔。Delimiter:在.txt焰扳、.dat文件中倦零,可以用逗號(hào)(,)或者Tab鍵(\t)來(lái)區(qū)分列與列
Allow quote data:選項(xiàng)選為“true”的時(shí)候?qū)θ亲址奶幚沓霈F(xiàn)亂碼
Recycle on EOF:到數(shù)據(jù)文件結(jié)尾時(shí)是否循環(huán)讀取。設(shè)置為T(mén)rue時(shí)吨悍,線(xiàn)程數(shù)過(guò)多扫茅,數(shù)據(jù)文件讀取到最后一行時(shí),會(huì)再次從第一行開(kāi)始讀取畜份。設(shè)置為False诞帐,到達(dá)文件結(jié)尾時(shí)如繼續(xù)讀取,則值會(huì)默認(rèn)為<EOF>爆雹,可通過(guò)設(shè)置jmeter屬性csvdataset.eofstring來(lái)改變?cè)撝怠?/p>
Stop thread on EOF:Recycle on EOF設(shè)置為False停蕉,Stop thread on EOF設(shè)置為T(mén)rue,則讀取數(shù)據(jù)文件最后一行后钙态,停止測(cè)試慧起,不管還有多少線(xiàn)程組未執(zhí)行。
Sharing mode:共享模式册倒。默認(rèn)在所有線(xiàn)程組中使用蚓挤,可選擇每個(gè)線(xiàn)程組單獨(dú)打開(kāi)
添加引用文件:
引用:在jmeter中添加
線(xiàn)程數(shù)改為某個(gè)值查看結(jié)果樹(shù):
其他:
線(xiàn)程組線(xiàn)程數(shù)改為大于文件中數(shù)據(jù)的處理:遇到結(jié)束符在循環(huán)遇到結(jié)束符停止線(xiàn)程
如果數(shù)據(jù)來(lái)自數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)導(dǎo)出txt文件
5.5. 使用Jmeter函數(shù)助手(文件中不要出現(xiàn)中文):
1、點(diǎn)擊 選項(xiàng)-->函數(shù)助手 調(diào)出函數(shù)助手對(duì)話(huà)框
2驻子、選擇 _CSVRead 函數(shù)(下圖第一個(gè)框)
3灿意、函數(shù)參數(shù):
1)第一個(gè)參數(shù):填寫(xiě)文件路徑。
2)第二個(gè)參數(shù):文件列號(hào)是從0開(kāi)始的崇呵,第一列0缤剧、第二列1、第三列2域慷、依次類(lèi)推,然后點(diǎn)擊【生成】按鈕荒辕,則會(huì)自動(dòng)生成我們需要的參數(shù)化函數(shù)。
? 3) 復(fù)制生成的參數(shù)化函數(shù)犹褒, copy過(guò)程需要使用的地方即可抵窒。
? 4) _Random函數(shù)是從某數(shù)據(jù)段隨機(jī)讀取數(shù)據(jù)替換參數(shù),當(dāng)需要添加多條數(shù)據(jù)記錄且某些字段需要唯一性時(shí)使用叠骑。
六. Jmeter正則表達(dá)式提取
6.1. 使用正則提取
運(yùn)用Jmeter正則提取器李皇,可以從請(qǐng)求的響應(yīng)結(jié)果中取到需要的內(nèi)容,從而實(shí)現(xiàn)關(guān)聯(lián)宙枷。關(guān)聯(lián)是請(qǐng)求與請(qǐng)求之間存在數(shù)據(jù)依賴(lài)關(guān)系疙赠,需要從上一個(gè)請(qǐng)求獲取下一個(gè)請(qǐng)求需要回傳回去的數(shù)據(jù)正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern)付材,可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等圃阳。
字符描述
*匹配前面的子表達(dá)式零次或多次厌衔。例如,zo* 能匹配 "z" 以及 "zoo"捍岳。* 等價(jià)于{0,}富寿。
+匹配前面的子表達(dá)式一次或多次。例如锣夹,'zo+' 能匹配 "zo" 以及 "zoo"页徐,但不能匹配 "z"。+ 等價(jià)于 {1,}银萍。
?匹配前面的子表達(dá)式零次或一次变勇。例如,"do(es)?" 可以匹配 "do" 贴唇、 "does" 中的 "does" 搀绣、 "doxy" 中的 "do" 。? 等價(jià)于 {0,1}戳气。
( )標(biāo)記一個(gè)子表達(dá)式的開(kāi)始和結(jié)束位置链患。子表達(dá)式可以獲取供以后使用。
.匹配除換行符 \n 之外的任何單字符瓶您。要匹配 . 麻捻,請(qǐng)使用 . 。
構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣呀袱。也就是用多種元字符與運(yùn)算符可以將小的表達(dá)式結(jié)合在一起來(lái)創(chuàng)建更大的表達(dá)式贸毕。正則表達(dá)式的組件可以是單個(gè)的字符、字符集合夜赵、字符范圍崖咨、字符間的選擇或者所有這些組件的任意組合。正則表達(dá)式提取的相關(guān)設(shè)置
說(shuō)明:
(1)引用名稱(chēng):下一個(gè)請(qǐng)求要引用的參數(shù)名稱(chēng)油吭,如填寫(xiě)title,則可用${title}引用它署拟。
(2)正則表達(dá)式:
? ? ():括起來(lái)的部分就是要提取的婉宰。
? ? .:匹配任何字符串。
? ? +:一次或多次推穷。
? ? ?:不要太貪婪心包,在找到第一個(gè)匹配項(xiàng)后停止。
(3)模板:用$$引用起來(lái)馒铃,如果在正則表達(dá)式中有多個(gè)正則表達(dá)式蟹腾,則可以是$2$$3$等等痕惋,表示解析到的第幾個(gè)值給title。如:$1$表示解析到的第1個(gè)值
(4)匹配數(shù)字:0代表隨機(jī)取值娃殖,1代表全部取值值戳,通常情況下填0
(5)缺省值:如果參數(shù)沒(méi)有取得到值,那默認(rèn)給一個(gè)值讓它取炉爆。
案例:api接口