一. 性能測試
1.0 為什么要進行性能測試?
- 評估當前系統(tǒng)的能力
- 尋找性能瓶頸凉翻,優(yōu)化系統(tǒng)性能
- 評估軟件是否滿足未來的需要
- 招聘需要
1.1 什么是性能
時間:系統(tǒng)處理用戶請求的響應(yīng)時間
資源:系統(tǒng)運行過程中了讨,系統(tǒng)資源的消耗情況
1.2. 性能測試是什么
1.2.1 廣義定義
基于協(xié)議模擬用戶發(fā)出請求,對服務(wù)器形成一定負載制轰,來測試服務(wù)器的性能指標是否滿足要求性能指標關(guān)注點:時間性能前计、空間性能性能測試與頁面無關(guān)
1.2.1 狹義定義
指通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統(tǒng)的各項性能指標進行測試垃杖。
1.3 功能和性能測試
- 不同
功能測試驗證系統(tǒng)的功能需求規(guī)格男杈,聚焦功能。
性能測試驗證系統(tǒng)的業(yè)務(wù)性需求場景缩滨,聚焦時間和資源势就。 - 關(guān)系
一般項目中泉瞻,先功能測試通過后脉漏,后進行性能測試。
1.4 性能測試的分類
1.4.1 基準測試
狹義:單用戶測試
廣義:建立基準線袖牙,當系統(tǒng)軟硬件環(huán)境發(fā)生變化之后再進行一次基準測試以確定變化對性能的影響侧巨。
1.4.2 負載測試
概念
通過逐步增加系統(tǒng)負載,確定在滿足性能指標的情況下鞭达,找出系統(tǒng)所能承受最大負載量的測試司忱。作用
系統(tǒng)最大負載量達到用戶要求時,系統(tǒng)才能正式上線使用畴蹭。-
案例
電梯行業(yè)規(guī)范:電梯從1樓到5樓的運行時間不超過24s1人 20s 7人 20s 13人 20s 達到最大負載 16人 25s 19人 28s 21人 斷繩子
注意
通過負載測試坦仍,可以確定系統(tǒng)的最大負載量和極限負載量
系統(tǒng)對外宣稱的最大負載量
負載測試的時間一般為1-2小時
1.4.3 穩(wěn)定性測試
- 概念:在服務(wù)器穩(wěn)定運行(用戶正常業(yè)務(wù)負載下)的情況進行長時間測試(1天-一周等),并最終保證服務(wù)器能滿足線上業(yè)務(wù)需求叨襟。
- 系統(tǒng)在用戶需求的業(yè)務(wù)負載下運行達到規(guī)定的時間時繁扎,系統(tǒng)才能正式上線使用。
1.4.4 壓力測試
- 概念:在強負載下的測試,查看系統(tǒng)在峰值下是否功能隱患梳玫、系統(tǒng)是否具有良好的容錯能力和可恢復的能力爹梁。
- 測試場景
高負載下的長時間穩(wěn)定性壓力測試 (如:B-C區(qū)間內(nèi)進行24/3*24小時長時間測試)
極限負載下的破壞性壓力測試(如:C-D區(qū)間內(nèi)進行測試)
1.4.5 并發(fā)測試
- 概念:在極短時間內(nèi),發(fā)送多個請求提澎,來驗證服務(wù)器對并發(fā)的處理能力姚垃。
- 應(yīng)用場景
特定的活動場景:搶紅包、秒殺盼忌、搶購等积糯。 - 與負載測試對比:
負載測試:主要目的是測試高負載情況下,對系統(tǒng)資源的消耗谦纱,是否會耗盡的問題(雙11活動)
并發(fā)測試:主要目的是測試極短時間內(nèi)絮宁,并發(fā)請求時,系統(tǒng)資源爭搶的問題(搶紅包服协、秒殺)
1.5 性能測試的指標
1.5.1 響應(yīng)時間
- 指從客戶端發(fā)起請求開始绍昂,到客戶端接收到結(jié)果的總時間
- 包括:服務(wù)器處理時間 + 網(wǎng)絡(luò)傳輸時間
1.5.2 并發(fā)用戶數(shù)
某一時刻同時向服務(wù)器發(fā)送請求的用戶數(shù)
1.5.3 吞吐量(Throughout)
1.概念:單位時間內(nèi)處理客戶端的請求數(shù)量,直接體現(xiàn)軟件系統(tǒng)能能承載能力偿荷。
- 吞吐量單位分類
1.5.4 QPS
QPS(Query Per Second)每秒查詢數(shù)窘游,即控制服務(wù)器每秒處理的指定請求的數(shù)量。
1.5.5 TPS
TPS(Transaction Per Second)每秒事務(wù)數(shù)跳纳,即控制服務(wù)器每秒處理事務(wù)請求的數(shù)量忍饰。
如:支付請求事務(wù)=查詢用戶余額請求+校驗支付安全請求+發(fā)送支付請求
每秒處理查詢用戶余額15請求,每秒處理校驗支付安全15個請求寺庄,每秒處理發(fā)送支付15個請求
支付tsp為15
1.5.6 點擊數(shù)
所有的頁面元素(如:圖片艾蓝、鏈接、框架等)的請求總數(shù)量
- 注意:
- 點擊數(shù)是請求數(shù)斗塘,不是頁面上的一次點擊
1.5.7 錯誤率
- 指系統(tǒng)在負載情況下赢织,失敗業(yè)務(wù)的概率
- 注意:
- 錯誤率是性能指標,是高負載下的失敗業(yè)務(wù)的概率
-隨機bug是功能bug馍盟,先解決隨機bug才能進行性能測試
1.5.8 資源利用率
- 概念:系統(tǒng)各種資源的使用情況于置,率=資源使用量/總資源可用量x100%
- 常見資源指標
CPU使用率:不高于75%-85%
內(nèi)存大小使用率:不高于80%
磁盤IO(速率):不高于90%
網(wǎng)路(速率):不高于80%
1.6 性能測試工具
二. Jmeter簡介
2.1. 我們?yōu)槭裁词褂肑meter
開源,免費贞岭,基于Java編寫八毯,可集成到其他系統(tǒng)可拓展各個功能插件
支持接口測試,壓力(負載和壓力)測試等多種功能瞄桨,支持錄制回放话速,
入門簡單相較于自己編寫框架活其他開源工具,有較為完善的UI界面芯侥,便于接口調(diào)試
多平臺支持泊交,可在Linux,Windows,Mac上運行活合,支持多協(xié)議
2.2. Jmeter的作用
- 接口測試 面試說postman雏婶,因為方便好用。
- 性能測試 jmeter白指,也可以用postman(runner)留晚,但是沒有性能指標
- 數(shù)據(jù)庫測試
2.3. Jmeter怎么用
Windows下Jmeter下載安裝,登錄 http://jmeter.apache.org/download_jmeter.cgi 告嘲,根據(jù)自己平臺错维,下載對應(yīng)文件
2.4. 安裝JAVA環(huán)境
安裝JDK,配置環(huán)境變量(具體步驟不做介紹)
將下載Jmeter文件解壓橄唬,打開/bin/jmeter.bat
2.5. Jmeter的目錄結(jié)構(gòu)
/bin 目錄常用文件介紹:
examples:目錄下包含Jmeter使用實例
ApacheJMeter.jar:JMeter源碼包
jmeter.bat:windows下啟動文件
jmeter.sh:Linux下啟動文件
jmeter.log:Jmeter運行日志文件
jmeter.properties:Jmeter配置文件
jmeter-server.bat:windows下啟動負載生成器服務(wù)文件
jmeter-server:Linux下啟動負載生成器文件
/docs目錄——Jmeter幫助文檔
/extras目錄——提供了對Ant的支持文件赋焕,可也用于持續(xù)集成
/lib目錄——存放Jmeter依賴的jar包,同時安裝插件也放于此目錄
/licenses目錄——軟件許可文件仰楚,不用管
/printable_docs目錄——Jmeter用戶手冊
三. 使用Jmeter測試快速入門
3.1. 線程組是什么
進程: 一個正在執(zhí)行的程序?qū)?yīng)一個進程
線程: 一個進程有多個執(zhí)行線程
線程組: 按照線程性質(zhì)對線程分組隆判。查看任務(wù)管理器(愛奇藝有多個)
三者關(guān)系: 一個進程有多個線程組,一個線程組有多個線程
測試計劃—線程組—線程組屬性中的線程數(shù)
并發(fā)執(zhí)行:多個線程同時執(zhí)行僧界,特點:執(zhí)行結(jié)束的順序與開始的順序不一致
順序執(zhí)行:按照線程的啟動順序挨個執(zhí)行
默認情況下侨嘀,線程組中的線程是并發(fā)執(zhí)行
每一個線程都要執(zhí)行組內(nèi)的http請求
設(shè)置線程組順序執(zhí)行:勾選測試計劃中的(獨立運行每個線程組)
線程組用來模擬用戶的并發(fā)訪問
3.1.1. 創(chuàng)建線程組
3.1.2. 線程組主要包含三個參數(shù):
線程數(shù)、準備時長(Ramp-Up Period(in seconds))捂襟、循環(huán)次數(shù)咬腕。
3.1.3. 線程數(shù):
虛擬用戶數(shù)。一個虛擬用戶占用一個線程葬荷。設(shè)置多少虛擬用戶數(shù)在這里也就是設(shè)置多少個線程數(shù)涨共。
3.1.4. 準備時長(秒):
設(shè)置的虛擬用戶數(shù)需要多長時間全部啟動。如果線程數(shù)為20 宠漩,準備時長為10 举反,那么需要10秒鐘啟動20個線程。也就是每秒鐘啟動2個線程哄孤。
3.1.5. 循環(huán)次數(shù):
每個線程發(fā)送請求的次數(shù)照筑。如果線程數(shù)為20 吹截,循環(huán)次數(shù)為100 瘦陈,那么每個線程發(fā)送100次請求〔ǘ恚總請求數(shù)為20*100=2000 晨逝。如果勾選了“永遠”,那么所有線程會一直發(fā)送請求懦铺,一直到選擇停止運行腳本捉貌。
3.1.6. 調(diào)度器
設(shè)置線程組啟動的開始時間和結(jié)束時間(配置調(diào)度器時,需要勾選循環(huán)次數(shù)為永遠)
3.1.7. 持續(xù)時間(秒)
測試持續(xù)時間,會覆蓋結(jié)束時間
3.1.8. 啟動延遲(秒)
測試延遲啟動時間趁窃,會覆蓋啟動時間
3.1.9. 啟動時間
測試啟動時間牧挣,啟動延遲會覆蓋它。當啟動時間已過醒陆,手動只需測試時當前時間也會覆蓋它瀑构。
3.1.10. 結(jié)束時間
測試結(jié)束時間,持續(xù)時間會覆蓋它刨摩。
3.2. 創(chuàng)建http請求
見得最多寺晌,所以我們著重講解:
3.3. 指定請求域名,請求路徑
一個HTTP請求有著許多的配置參數(shù)澡刹,下面將詳細介紹: |
---|
名稱:本屬性用于標識一個取樣器呻征,建議使用一個有意義的名稱。 |
注釋:對于測試沒有任何作用罢浇,僅用戶記錄用戶可讀的注釋信息陆赋。 |
服務(wù)器名稱或IP :HTTP請求發(fā)送的目標服務(wù)器名稱或IP地址。 |
端口號:目標服務(wù)器的端口號嚷闭。 |
方法:發(fā)送HTTP請求的方法奏甫,可用方法包括GET、POST凌受、HEAD阵子、PUT、OPTIONS胜蛉、TRACE挠进、DELETE等。 |
Content encoding :內(nèi)容的編碼方式誊册,默認值為iso8859 |
路徑:目標URL路徑(不包括服務(wù)器地址和端口) |
點擊run測試领突,很麻煩,我們使用postman測試更簡單案怯,使用postman操作君旦。
可以使用剛才的接口文檔中的,聚合接口中演示一個嘲碱。
3.4. 設(shè)置對應(yīng)的查看內(nèi)容
注意:如果監(jiān)聽器中有jp@gc開頭的金砍,都是第三方插件
3.5. 查看表格信息
Sample:每個請求的序號 |
---|
Start Time:每個請求開始時間 |
Thread Name:每個線程的名稱 |
Label:Http請求名稱 |
Sample Time:每個請求所花時間,單位毫秒 |
Status:請求狀態(tài)麦锯,如果為勾則表示成功量愧,如果為叉表示失敗钉鸯。 |
Bytes:請求的字節(jié)數(shù) |
樣本數(shù)目:也就是上面所說的請求個數(shù)波桩,成功的情況下等于你設(shè)定的并發(fā)數(shù)目乘以循環(huán)次數(shù) |
平均:每個線程請求的平均時間 |
最新樣本:表示服務(wù)器響應(yīng)最后一個請求的時間 |
偏離:服務(wù)器響應(yīng)時間變化、離散程度測量值的大小千扶,或者,換句話說骆捧,就是數(shù)據(jù)的分布澎羞。 |
3.6. 查看結(jié)果樹
-
請求的數(shù)據(jù)展示(請求頭信息,請求參數(shù),,)
image -
響應(yīng)的數(shù)據(jù)展示(響應(yīng)碼敛苇,響應(yīng)頭,,)
image通過察看結(jié)果樹煤痕,我們可以看到每個請求的結(jié)果,其中紅色的是出錯的請求接谨,綠色的為通過摆碉。
Thread Name:線程組名稱
Sample Start: 啟動開始時間
Load time:加載時長
Latency:等待時長
Size in bytes:發(fā)送的數(shù)據(jù)總大小
Headers size in bytes:發(fā)送數(shù)據(jù)的其余部分大小
Sample Count:發(fā)送統(tǒng)計
Error Count:交互錯誤統(tǒng)計
Response code:返回碼
Response message:返回信息
Response headers:返回的頭部信息
3.7. 聚合報告參數(shù)說明
lable:對應(yīng)每一個http請求,顯示的是http請求的Name脓豪,如百度http請求name為baidu |
---|
#Samples:表示這一次的測試中一共發(fā)出了多少請求巷帝,如上圖所示,sougou和baidu的http請求每個都發(fā)出30個請求 |
Average:平均響應(yīng)時間扫夜,指的是所有的請求的平均響應(yīng)時間楞泼,如上圖的30個請求的總的響應(yīng)時間除以30得出的平均響應(yīng)時間,默認的情況下是單個請求的平均響應(yīng)時間笤闯,但當使用了“事務(wù)控制器”時堕阔,則以事物為單位顯示平均響應(yīng)時間 |
Median:中位數(shù),也就是50%用戶的響應(yīng)時間 |
90%Line:90%用戶的響應(yīng)時間 |
Min:最小響應(yīng)時間 |
Max:最大的響應(yīng)時間 |
Error%:本次測試中出現(xiàn)錯誤的請求的數(shù)量/請求的總數(shù)颗味,如上圖所示超陆,本次的測試中,sougou的http請求66.6%的請求出錯浦马,而baidu的請求則沒有出錯的請求 |
Throughput:吞吐量时呀,默認情況下表示每秒完成的請求數(shù),如上圖所示晶默,每秒完成的請求數(shù)分別為6.6個每秒谨娜,6.2個每秒 |
Recived KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,以kb為計算的單位 |
掌握:平均時間磺陡、錯誤率趴梢、吞吐量。
3.8. 圖形結(jié)果
作用:通過圖形展示出本次性能測試數(shù)據(jù)的分布币他。 圖形結(jié)果一般作為聚合報告的分析輔佐
樣本數(shù)目:總共發(fā)送到服務(wù)器的請求數(shù)坞靶。
最新樣本:代表時間的數(shù)字,是服務(wù)器響應(yīng)最后一個請求的時間圆丹。
吞吐量:服務(wù)器每分鐘處理的請求數(shù)滩愁。
平均值:總運行時間除以發(fā)送到服務(wù)器的請求數(shù)。
中間值:有一半的服務(wù)器響應(yīng)時間低于該值而另一半高于該值辫封。
偏離:表示服務(wù)器響應(yīng)時間變化硝枉、離散程度測量值的大小。
四. Jmeter主要組件介紹
- 測試計劃:使用 JMeter 進行測試的起點倦微,它是其它 JMeter 測試元件的容器妻味。
- 線程組:代表一定數(shù)量的并發(fā)用戶,它可以用來模擬并發(fā)用戶發(fā)送請求欣福。實際的請求內(nèi)容在Sampler中定義责球,它被線程組包含⊥厝埃可以在“測試計劃->添加->線程組”來建立它雏逾,然后在線程組面板里有幾個輸入欄:線程數(shù)、Ramp-Up Period(in seconds)郑临、循環(huán)次數(shù)栖博,其中Ramp-Up Period(in seconds)表示在這時間內(nèi)創(chuàng)建完所有的線程。如有8個線程厢洞,Ramp-Up = 200秒仇让,那么線程的啟動時間間隔為200/8=25秒,這樣的好處是:一開始不會對服務(wù)器有太大的負載躺翻。線程組是為模擬并發(fā)負載而設(shè)計丧叽。
- 取樣器(Sampler):模擬各種請求。所有實際的測試任務(wù)都由取樣器承擔公你,存在很多種請求踊淳。如:HTTP 、ftp請求等等陕靠。
- 監(jiān)聽器:負責收集測試結(jié)果嚣崭,同時也被告知了結(jié)果顯示的方式。功能是對取樣器的請求結(jié)果顯示懦傍、統(tǒng)計一些數(shù)據(jù)(吞吐量雹舀、KB/S……)等。
- 斷言:用于來判斷請求響應(yīng)的結(jié)果是否如用戶所期望粗俱,是否正確说榆。它可以用來隔離問題域,即在確保功能正確的前提下執(zhí)行壓力測試寸认。這個限制對于有效的測試是非常有用的签财。
- 邏輯控制器:允許自定義JMeter發(fā)送請求的行為邏輯,它與Sampler結(jié)合使用可以模擬復雜的請求序列偏塞。
- 定時器:負責定義請求(線程)之間的延遲間隔唱蒸,模擬對服務(wù)器的連續(xù)請求。
- 配置元件維護Sampler需要的配置信息灸叼,并根據(jù)實際的需要會修改請求的內(nèi)容神汹。
- 前置處理器和后置處理器負責在生成請求之前和之后完成工作庆捺。前置處理器常常用來修改請求的設(shè)置,后置處理器則常常用來處理響應(yīng)的數(shù)據(jù)屁魏。
4.1. 測試計劃
1.測試計劃就是一個完整的場景
2.“獨立運行每個線程組” :勾選以后所有的線程組都是順序執(zhí)行的了滔以。一般不勾選,讓所有 的線程組并發(fā)啟動氓拼。
3.“函數(shù)測試模式” :勾選后會有詳細的請求記錄你画,消耗資源,影響客戶端性能桃漾。一般不勾選坏匪。
4.用戶定義的變量:全局變量,測試計劃上可以添加用戶定義的變量撬统。一般添加一些系統(tǒng)常用的配置适滓。如果測試過程中想切換環(huán)境,切換配置宪摧,一般不建議在測試計劃上添加變量
4.2. 線程組
(1)thread group(線程組)
這個就是我們通常添加運行的線程粒竖。通俗的講一個線程組,可以看做一個虛擬用戶組几于,線程組中的每個線程都可以理解為一個虛擬用戶蕊苗。
(2)setup thread group
一種特殊類型的ThreadGroup的,可用于執(zhí)行預測試操作沿彭。這些線程的行為完全像一個正常的線程組元件朽砰。不同的是,這些類型的線程執(zhí)行測試前進行定期線程組的執(zhí)行喉刘;類似LoadRunner的init瞧柔,測試開始時進行初始化的工作。
(3)teardown thread group
一種特殊類型的ThreadGroup的睦裳,可用于執(zhí)行測試后動作造锅。這些線程的行為完全像一個正常的線程組元件。不同的是廉邑,這些類型的線程執(zhí)行測試結(jié)束后執(zhí)行定期的線程組哥蔚;類似LoadRunnner的end,測試結(jié)束時進行回收工作蛛蒙。
4.3. 取樣器(Http請求)
關(guān)于http請求的的屬性參數(shù)說明:
1)名稱:用于標識一個sample糙箍。建議使用一個有意義的名稱
2)注釋:對于測試沒任何影響,僅用來記錄用戶可讀的注釋信息
3)服務(wù)器名稱或IP:http請求發(fā)送的目標服務(wù)器名稱或者IP地址牵祟,比如http://www.baidu.com
4)端口號:目標服務(wù)器的端口號深夯,默認值為80,可不填
5)協(xié)議:向目標服務(wù)器發(fā)送http請求時的協(xié)議诺苹,http/https咕晋,大小寫不敏感雹拄,默認http
6)方法:發(fā)送http請求的方法(鏈接:http://www.cnblogs.com/imyalost/p/5630940.html)
7)Content encoding:內(nèi)容的編碼方式(Content-Type=application/json;charset=utf-8)
8)路徑:目標的URL路徑(不包括服務(wù)器地址和端口)
9)自動重定向:如果選中該項,發(fā)出的http請求得到響應(yīng)是301/302捡需,jmeter會重定向到新的界面
10)Use keep Alive:jmeter 和目標服務(wù)器之間使用 Keep-Alive方式進行HTTP通信(默認選中)
11)Use multipart/from-data for HTTP POST :當發(fā)送HTTP POST 請求時办桨,使用
12)Parameters筹淫、Body Data以及Files Upload的區(qū)別:
1. parameter是指函數(shù)定義中參數(shù)站辉,而argument指的是函數(shù)調(diào)用時的實際參數(shù)
2. 簡略描述為:parameter=形參(formal parameter), argument=實參(actual parameter)
3.在不很嚴格的情況下损姜,現(xiàn)在二者可以混用饰剥,一般用argument,而parameter則比較少用
While defining method, variables passed in the method are called parameters.
當定義方法時摧阅,傳遞到方法中的變量稱為參數(shù).
While using those methods, values passed to those variables are called arguments.
當調(diào)用方法時汰蓉,傳給變量的值稱為引數(shù).(有時argument被翻譯為“引數(shù)“)
4、Body Data指的是實體數(shù)據(jù)棒卷,就是請求報文里面主體實體的內(nèi)容顾孽,一般我們向服務(wù)器發(fā)送請求,攜帶的實體主體參數(shù)比规,可以寫入這里
5若厚、Files Upload指的是:從HTML文件獲取所有有內(nèi)含的資源:被選中時,發(fā)出HTTP請求并獲得響應(yīng)的HTML文件內(nèi)容后還對該HTML
進行Parse 并獲取HTML中包含的所有資源(圖片蜒什、flash等):(默認不選中)
如果用戶只希望獲取特定資源测秸,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達式,只有能匹配指定正則表達式的URL指向資源會被下載
4.4. 監(jiān)聽器
監(jiān)聽器(Listener)負責收集測試結(jié)果灾常,同時也被告知了結(jié)果顯示的方式霎冯。我們常用的包括:聚合報告、查看結(jié)果樹钞瀑、用表格查看結(jié)果沈撞,都支持將結(jié)果數(shù)據(jù)寫入文件。其他的添加上去看看就行雕什。聚合報告前面我們介紹過缠俺,后面是查看結(jié)果樹和用表格查看結(jié)果的截圖。
4.5. 循環(huán)控制器
4.6. 事務(wù)控制器
作用: 事務(wù)控制器會生產(chǎn)一個額外的采樣器监徘,用來統(tǒng)計該控制器子結(jié)點的所有時間晋修。
在線程組下創(chuàng)建事務(wù)控制器
參數(shù):
· Generate parent sample:(選中這個參數(shù)結(jié)果展示如下圖紅框,否則顯示為下圖藍框)
· Include duration of timer and pre-post processors in generated sample:選中這一項會統(tǒng)計定時器(timer)的時間凰盔,否則只統(tǒng)計采樣器(sample)的時間
創(chuàng)建sample 訪問首頁和注冊頁面
生成聚合報告
勾選
聚合報告中只有一項事務(wù)報告
4.7. 斷言---檢查點
斷言(Assertions)可以用來判斷請求響應(yīng)的結(jié)果是否如用戶所期望的墓卦。它可以用來隔離問題域,即在確保功能正確的前提下執(zhí)行壓力測試户敬。這個限制對于有效的測試是非常有用的落剪。
兩個重要斷言:響應(yīng)斷言和JSONAssertion
響應(yīng)斷言:
JSON斷言:
4.8. 前置處理器和后置處理器
前置處理器(Pre Processors)和后置處理器(Post Processors)負責在生成請求之前和之后完成工作睁本。前置處理器常常用來修改請求的設(shè)置,后置處理器則常常用來處理響應(yīng)的數(shù)據(jù)忠怖。我們主要在動態(tài)關(guān)聯(lián)中用到后置處理器的正則表達式提取器呢堰。
https://www.cnblogs.com/fengpingfan/p/4755411.html
4.9. 定時器
定時器(Timer)負責定義請求之間的延遲間隔
<meta charset="utf-8">
五. Jmeter組件參數(shù)化
5.1. 參數(shù)化是什么
動態(tài)的獲取并設(shè)置數(shù)據(jù)
5.2. 為什么使用參數(shù)化
執(zhí)行批量操作,批量添加批量刪除凡泣,人工效率太低
運用程序代替人工獲取并設(shè)置數(shù)據(jù)枉疼,安全高效
比如:對被測系統(tǒng)的用戶名和密碼進行參數(shù)化,來模擬多個用戶同時登錄系統(tǒng)
5.3. 參數(shù)化實現(xiàn)之用戶自定義變量
通過這個功能鞋拟,能實現(xiàn)多接口共享數(shù)據(jù)骂维,修改一條即可修改全部
Filename:所需數(shù)據(jù)文件的路徑。如和腳本同一路徑贺纲,可直接填寫文件名
File encoding:編碼和文件保持一致即可航闺,默認為ANSI。如有中文猴誊,建議為UTF-8
Variable Names:引用變量時的變量名潦刃,對應(yīng)數(shù)據(jù)文件中的每一列,以逗號分隔懈叹。如不填寫乖杠,文件的第一行數(shù)據(jù)將被讀取為變量名
Delimiter:在.txt、.dat文件中项阴,可以用逗號(,)或者Tab鍵(\t)來區(qū)分列與列
Allow quote data:選項選為“true”的時候?qū)θ亲址奶幚沓霈F(xiàn)亂碼
Recycle on EOF:到數(shù)據(jù)文件結(jié)尾時是否循環(huán)讀取滑黔。設(shè)置為True時,線程數(shù)過多环揽,數(shù)據(jù)文件讀取到最后一行時略荡,會再次從第一行開始讀取。設(shè)置為False歉胶,到達文件結(jié)尾時如繼續(xù)讀取汛兜,則值會默認為<EOF>,可通過設(shè)置jmeter屬性csvdataset.eofstring來改變該值通今。
Stop thread on EOF:Recycle on EOF設(shè)置為False粥谬,Stop thread on EOF設(shè)置為True,則讀取數(shù)據(jù)文件最后一行后辫塌,停止測試漏策,不管還有多少線程組未執(zhí)行。
Sharing mode:共享模式臼氨。默認在所有線程組中使用掺喻,可選擇每個線程組單獨打開
相同的部分使用用戶自定義變量
只需要修改一次接口
效果展示
5.4. 參數(shù)化實現(xiàn)之CSV Data Set Config
添加CSV Data Set Config:
添加界面:
通過這個組件可以動態(tài)獲取并設(shè)置數(shù)據(jù),實現(xiàn)批量添加操作
名詞解釋:
Filename:所需數(shù)據(jù)文件的路徑。如和腳本同一路徑感耙,可直接填寫文件名
File encoding:編碼和文件保持一致即可褂乍,默認為ANSI。如有中文即硼,建議為UTF-8
Variable Names:引用變量時的變量名逃片,對應(yīng)數(shù)據(jù)文件中的每一列,以逗號分隔只酥。Delimiter:在.txt褥实、.dat文件中,可以用逗號(,)或者Tab鍵(\t)來區(qū)分列與列
Allow quote data:選項選為“true”的時候?qū)θ亲址奶幚沓霈F(xiàn)亂碼
Recycle on EOF:到數(shù)據(jù)文件結(jié)尾時是否循環(huán)讀取层皱。設(shè)置為True時性锭,線程數(shù)過多赠潦,數(shù)據(jù)文件讀取到最后一行時叫胖,會再次從第一行開始讀取。設(shè)置為False她奥,到達文件結(jié)尾時如繼續(xù)讀取瓮增,則值會默認為<EOF>,可通過設(shè)置jmeter屬性csvdataset.eofstring來改變該值哩俭。
Stop thread on EOF:Recycle on EOF設(shè)置為False绷跑,Stop thread on EOF設(shè)置為True,則讀取數(shù)據(jù)文件最后一行后凡资,停止測試砸捏,不管還有多少線程組未執(zhí)行。
Sharing mode:共享模式隙赁。默認在所有線程組中使用垦藏,可選擇每個線程組單獨打開
添加引用文件:
引用:
在jmeter中添加
線程數(shù)改為某個值
查看結(jié)果樹:
其他:
- 線程組線程數(shù)改為大于文件中數(shù)據(jù)的處理:
遇到結(jié)束符在循環(huán)
遇到結(jié)束符停止線程 - 如果數(shù)據(jù)來自數(shù)據(jù)庫
數(shù)據(jù)庫導出txt文件
5.5. 使用Jmeter函數(shù)助手(文件中不要出現(xiàn)中文):
1、點擊 選項-->函數(shù)助手 調(diào)出函數(shù)助手對話框
2伞访、選擇 _CSVRead 函數(shù)(下圖第一個框)
3掂骏、函數(shù)參數(shù):
1)第一個參數(shù):填寫文件路徑。
2)第二個參數(shù):文件列號是從0開始的厚掷,第一列0弟灼、第二列1、第三列2冒黑、依次類推,然后點擊【生成】按鈕田绑,則會自動生成我們需要的參數(shù)化函數(shù)。
3) 復制生成的參數(shù)化函數(shù)抡爹, copy過程需要使用的地方即可掩驱。
4) _Random函數(shù)是從某數(shù)據(jù)段隨機讀取數(shù)據(jù)替換參數(shù),當需要添加多條數(shù)據(jù)記錄且某些字段需要唯一性時使用。
六. Jmeter正則表達式提取
6.1. 使用正則提取
運用Jmeter正則提取器昙篙,可以從請求的響應(yīng)結(jié)果中取到需要的內(nèi)容腊状,從而實現(xiàn)關(guān)聯(lián)。關(guān)聯(lián)是請求與請求之間存在數(shù)據(jù)依賴關(guān)系苔可,需要從上一個請求獲取下一個請求需要回傳回去的數(shù)據(jù)
正則表達式(regular expression)描述了一種字符串匹配的模式(pattern)缴挖,可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等焚辅。
字符 | 描述 |
---|---|
* | 匹配前面的子表達式零次或多次映屋。例如,zo* 能匹配 "z" 以及 "zoo"同蜻。* 等價于{0,}棚点。 |
+ | 匹配前面的子表達式一次或多次。例如湾蔓,'zo+' 能匹配 "zo" 以及 "zoo"瘫析,但不能匹配 "z"。+ 等價于 {1,}默责。 |
? | 匹配前面的子表達式零次或一次贬循。例如,"do(es)?" 可以匹配 "do" 桃序、 "does" 中的 "does" 杖虾、 "doxy" 中的 "do" 。? 等價于 {0,1}媒熊。 |
( ) | 標記一個子表達式的開始和結(jié)束位置奇适。子表達式可以獲取供以后使用。 |
. | 匹配除換行符 \n 之外的任何單字符芦鳍。要匹配 . 嚷往,請使用 . 。 |
構(gòu)造正則表達式的方法和創(chuàng)建數(shù)學表達式的方法一樣怜校。也就是用多種元字符與運算符可以將小的表達式結(jié)合在一起來創(chuàng)建更大的表達式间影。正則表達式的組件可以是單個的字符、字符集合茄茁、字符范圍魂贬、字符間的選擇或者所有這些組件的任意組合。
正則表達式提取的相關(guān)設(shè)置
說明:
(1)引用名稱:下一個請求要引用的參數(shù)名稱裙顽,如填寫title付燥,則可用${title}引用它。
(2)正則表達式:
():括起來的部分就是要提取的愈犹。
.:匹配任何字符串键科。
+:一次或多次闻丑。
?:不要太貪婪,在找到第一個匹配項后停止勋颖。
(3)模板:用$$引用起來嗦嗡,如果在正則表達式中有多個正則表達式,則可以是$2$$3$等等饭玲,表示解析到的第幾個值給title侥祭。如:$1$表示解析到的第1個值
(4)匹配數(shù)字:0代表隨機取值,1代表全部取值茄厘,通常情況下填0
(5)缺省值:如果參數(shù)沒有取得到值矮冬,那默認給一個值讓它取。
案例:api接口