一、Jmeter腳本錄制
Jmeter使用概述

錄制腳本首先我們需要設(shè)置Jmeter:
① 測試計劃>添加>Threads(Users)>線程組;
② 工作臺>添加>非測試元件>HTTP代理服務(wù)器。
那么又如何配置HTTP代理服務(wù)器呢:
??Global settings Jmeter代理服務(wù)器監(jiān)聽的端口,默認8080,可以修改為:8888;
??目標控制器:測試計劃>線程組;(這樣設(shè)置后,錄制下來的HTTP請求會保存在“測試計劃>線程組”下面)
??分組:每個組放入一個新的控制器,這樣設(shè)置后JMeter會將我們錄制下來的HTTP請求進行適當(dāng)?shù)姆纸M,效果后面能看到;
??“記錄HTTP信息頭”“添加斷言”“Regex matching(正則匹配)”保持默認配置
??HTTP Sampler Settings和Content-type,保持默認
??包含模式(重要配置項:只有請求的url,匹配包含模式中的正則表達式,這條請求才會被錄制):如添加“www.baidu.com.*”我們的請求,只有以www.baidu.com開頭的請求才會被Jmeter錄制下來;
??排除模式(重要配置項:只有請求的url,匹配排除模式中的正則表達式,這條請求就會被過濾):如添加“.*\.(js|css|png).*”當(dāng)HTTP請求中包含,js,或css,或png,就會被Jmeter排除掉;

Jmeter的HTTP代理服務(wù)器就配置好了,在啟動這個代理服務(wù)器之前,我們還應(yīng)該去瀏覽器添加一個本地代理(本文以火狐瀏覽器做例,其他瀏覽器設(shè)置代理的方法也是一樣),如下:

設(shè)置好Jmeter和瀏覽器的HTTP代理服務(wù)器之后,瀏覽器訪問任何url地址,都會轉(zhuǎn)發(fā)到127.0.0.1:8888,也就是Jmeter的代理服務(wù)地址,同時被jmeter記錄下來,這樣我們就可以開始錄制腳本了。
啟動Jmeter的HTTP代理服務(wù)器

二、Jmeter測試腳本
利用Jmeter測試組件對錄制腳本進行加工和編輯;
測試組件介紹:
1.線程組,是Jmeter組件中最核心的測試組件

如:打開主頁,登錄等操作都是Jmeter線程來完成的;線程組,就是管理這些線程的組件;
線程組中的配置項:
① 線程數(shù):Jmeter線程的數(shù)量,決定著Jmeter用多少個線程去同時執(zhí)行這些操作(如圖模擬10個用戶),線程數(shù)越大,服務(wù)器所承受的壓力就越大;
② Ramp-up Period:啟動所有Jmeter線程所花費的時間,為了防止Jmeter測試時,瞬間給被測服務(wù)器施加太大的壓力,從第一個開始慢慢慢慢增加到第10個;(在十秒鐘啟動10個線程,平均每秒增加1個線程,直到10個都啟動完成);Ramp-up Period越大,被測服務(wù)器施加的壓力幅度越平緩;
③ 循環(huán)次數(shù):決定線程重復(fù)循環(huán)執(zhí)行的次數(shù);(如:勾選永遠,主頁>登錄也>登錄的動作將無限循環(huán)的執(zhí)行下去)
④ 調(diào)度器:可以詳細的設(shè)置線程執(zhí)行測試的時間;(持續(xù)時間:設(shè)置測試能持續(xù)執(zhí)行多久;持續(xù)時間填寫之后,上面的結(jié)束時間就失效;啟動延遲:從當(dāng)前時刻算起,延遲幾秒才開始執(zhí)行測試,填寫之后,上面的啟動時間也就失效了)
?2.采樣器(Sample)

添加采樣器:


Connect timeout:指的是,在Jmeter發(fā)送請求的時候,會等待多久直到跟服務(wù)器的連接正確的建立起來,如果超過這個時間,連接還沒有建立,那么Jmeter就判斷這次請求是失敗的;
Response timeout:Jmeter會等待多久,直到收到服務(wù)端的響應(yīng)數(shù)據(jù)。
他們的單位都是:“毫秒”;
HTTP請求:Implementation,一般選擇空或HttpClient4;Content encoding:如果前面的方法是“POST”,“PUT”“PATCH”和“(。。。沒聽出來)”這四種方式時的,會使用哪一種字符編碼方式;
路徑:請求的url路徑
參數(shù):也可以手動添加參數(shù)
3.斷言

給某個請求添加斷言:

Apply to:指定了斷言的作用范圍;保持默認,只對當(dāng)前的采樣器生效;
要測試的響應(yīng)字段:指的是,斷言要檢查的目標;重點關(guān)注“響應(yīng)文本”“響應(yīng)代碼”和“響應(yīng)信息”這三個;響應(yīng)文本:指的是服務(wù)器返回的數(shù)據(jù);響應(yīng)代碼:HTTP的響應(yīng)code(如:200;500;403等);響應(yīng)信息:http的響應(yīng)massage:OK,error等;


模式匹配規(guī)則和要測試的模式;
例子:
響應(yīng)代碼 Equals 200;響應(yīng)代碼 = 200
響應(yīng)信息 Equals OK;響應(yīng)信息 = OK
響應(yīng)文本 包括 夜空黑;響應(yīng)文本中包括 “夜空黑”三個字 這樣的HTTP請求即為成功的,否則失?。?/p>

4.參數(shù)化
如圖:登錄名密碼為固定的20000000000/netease123,模擬的是同一個用戶對操作進行十次。如果要模擬不同用戶對頁面進行操作,就需要對用戶名密碼進行參數(shù)化;

先在系統(tǒng)中注冊10個用戶,用戶名密碼寫在一個txt文本中,如下圖,中間用英文的逗號隔開;

首先在線程組下添加>配置元件>CSV Data Set Config,這個組件可以幫助我們實現(xiàn)參數(shù)化

Filename:配置文件的絕對路徑;
File encoding:JMeter在讀取文件的時候使用的字符編碼方式;
Variable Names:配置文件中各列代表的數(shù)據(jù)項;
Delimiter:配置文件中不同列之間的分隔符
接下來的幾個配置項全部選用默認值
在login頁面的body中修改需要傳入的數(shù)據(jù),為剛才測試組件中設(shè)置的項完全一致



5.HTTP?Cookie管理器:
>實際的登錄動作前后,進行了兩次checkLogin;
>在login操作時,開發(fā)者工具(F12)的ResponseHeaders中可以看到,進行了一些set-Cookie操作;換句話說,服務(wù)端會返回一些cookie信息給瀏覽器,瀏覽器會自動的在后續(xù)的所有請求中自動的帶上這些Cookie;
>但在Jmeter不會錄制下這些Cookie,正是因為缺少了這個cookie,我們的jmeter線程,即使成功執(zhí)行了登錄操作,后續(xù)的請求,服務(wù)器依然會認為我們沒有登錄;
>那為什么Jmeter沒有錄制下這些cookie呢?因為這些cookie常常是不固定的,每次測試都有可能不一樣,把這些cookie錄制到Jmeter,反而會有些問題;
? ?>那當(dāng)前的腳本需要進行怎樣的加工,才能生效呢?我們在此需要引入另一個測試組件:HTTP Cookie管理器

添加:

勾選“每次反復(fù)清除Cookies”,腳本反復(fù)執(zhí)行登錄測試,每次執(zhí)行主頁,登錄頁,登錄這一輪測試后,會清除cookie,下一次執(zhí)行操作時,仍會以一個未登錄的狀態(tài)來執(zhí)行主頁,登錄頁,登錄的操作;

添加HTTP Cookie管理器后執(zhí)行測試,再查看結(jié)果樹checkLogin信息,可以看到服務(wù)端返回了用戶信息,此時服務(wù)端認為我們真正完成了登錄;

三、JMeter測試執(zhí)行


查看結(jié)果樹
添加:

取樣器結(jié)果:

Load time:請求從發(fā)出到接收到完整的返回結(jié)果的時間;(即響應(yīng)時間)
Latency:請求從發(fā)出到接收開始接收到響應(yīng),一般略小于Load time;
Connect Time:JMeter和服務(wù)端建立連接所花費的時間,這個時間端已經(jīng)包含在Load time中了;
Size in bytes:這次請求的大?。?/p>
請求

響應(yīng)數(shù)據(jù):服務(wù)端返回的數(shù)據(jù)

查看結(jié)果樹這個監(jiān)聽器,需要每個請求的詳細信息都顯示出來,所以對系統(tǒng)資源是有一定開銷的。如果在測試的時候,若系統(tǒng)的吞吐率很高,查看結(jié)果樹會對性能帶來比較大的影響,不建議用這個監(jiān)聽器,以免影響測試結(jié)果;
聚合報告:


響應(yīng)時間曲線

添加>監(jiān)聽器>Response Time Graph


Interval(ms):橫坐標的統(tǒng)計間隔;Jmeter會在10秒內(nèi)的執(zhí)行的結(jié)果做一個平均值的聚合;
Sampler label
selection:可以設(shè)置過濾請求,只顯示一部分的請求;(如下圖:過濾以46和18開頭的請求)


只顯示46開頭的請求


常見問題和解決思路:
小壓力(如2個并發(fā)數(shù))



