一、Jmeter腳本錄制
Jmeter使用概述
錄制腳本首先我們需要設置Jmeter:
① 測試計劃>添加>Threads(Users)>線程組;
② 工作臺>添加>非測試元件>HTTP代理服務器。
那么又如何配置HTTP代理服務器呢:
??Global settings Jmeter代理服務器監聽的端口,默認8080,可以修改為:8888;
??目標控制器:測試計劃>線程組;(這樣設置后,錄制下來的HTTP請求會保存在“測試計劃>線程組”下面)
??分組:每個組放入一個新的控制器,這樣設置后JMeter會將我們錄制下來的HTTP請求進行適當的分組,效果后面能看到;
??“記錄HTTP信息頭”“添加斷言”“Regex matching(正則匹配)”保持默認配置
??HTTP Sampler Settings和Content-type,保持默認
??包含模式(重要配置項:只有請求的url,匹配包含模式中的正則表達式,這條請求才會被錄制):如添加“www.baidu.com.*”我們的請求,只有以www.baidu.com開頭的請求才會被Jmeter錄制下來;
??排除模式(重要配置項:只有請求的url,匹配排除模式中的正則表達式,這條請求就會被過濾):如添加“.*\.(js|css|png).*”當HTTP請求中包含,js,或css,或png,就會被Jmeter排除掉;
Jmeter的HTTP代理服務器就配置好了,在啟動這個代理服務器之前,我們還應該去瀏覽器添加一個本地代理(本文以火狐瀏覽器做例,其他瀏覽器設置代理的方法也是一樣),如下:
設置好Jmeter和瀏覽器的HTTP代理服務器之后,瀏覽器訪問任何url地址,都會轉發到127.0.0.1:8888,也就是Jmeter的代理服務地址,同時被jmeter記錄下來,這樣我們就可以開始錄制腳本了。
啟動Jmeter的HTTP代理服務器
二、Jmeter測試腳本
利用Jmeter測試組件對錄制腳本進行加工和編輯;
測試組件介紹:
1.線程組,是Jmeter組件中最核心的測試組件
如:打開主頁,登錄等操作都是Jmeter線程來完成的;線程組,就是管理這些線程的組件;
線程組中的配置項:
① 線程數:Jmeter線程的數量,決定著Jmeter用多少個線程去同時執行這些操作(如圖模擬10個用戶),線程數越大,服務器所承受的壓力就越大;
② Ramp-up Period:啟動所有Jmeter線程所花費的時間,為了防止Jmeter測試時,瞬間給被測服務器施加太大的壓力,從第一個開始慢慢慢慢增加到第10個;(在十秒鐘啟動10個線程,平均每秒增加1個線程,直到10個都啟動完成);Ramp-up Period越大,被測服務器施加的壓力幅度越平緩;
③ 循環次數:決定線程重復循環執行的次數;(如:勾選永遠,主頁>登錄也>登錄的動作將無限循環的執行下去)
④ 調度器:可以詳細的設置線程執行測試的時間;(持續時間:設置測試能持續執行多久;持續時間填寫之后,上面的結束時間就失效;啟動延遲:從當前時刻算起,延遲幾秒才開始執行測試,填寫之后,上面的啟動時間也就失效了)
?2.采樣器(Sample)
添加采樣器:
Connect timeout:指的是,在Jmeter發送請求的時候,會等待多久直到跟服務器的連接正確的建立起來,如果超過這個時間,連接還沒有建立,那么Jmeter就判斷這次請求是失敗的;
Response timeout:Jmeter會等待多久,直到收到服務端的響應數據。
他們的單位都是:“毫秒”;
HTTP請求:Implementation,一般選擇空或HttpClient4;Content encoding:如果前面的方法是“POST”,“PUT”“PATCH”和“(。。。沒聽出來)”這四種方式時的,會使用哪一種字符編碼方式;
路徑:請求的url路徑
參數:也可以手動添加參數
3.斷言
給某個請求添加斷言:
Apply to:指定了斷言的作用范圍;保持默認,只對當前的采樣器生效;
要測試的響應字段:指的是,斷言要檢查的目標;重點關注“響應文本”“響應代碼”和“響應信息”這三個;響應文本:指的是服務器返回的數據;響應代碼:HTTP的響應code(如:200;500;403等);響應信息:http的響應massage:OK,error等;
模式匹配規則和要測試的模式;
例子:
響應代碼 Equals 200;響應代碼 = 200
響應信息 Equals OK;響應信息 = OK
響應文本 包括 夜空黑;響應文本中包括 “夜空黑”三個字 這樣的HTTP請求即為成功的,否則失敗;
4.參數化
如圖:登錄名密碼為固定的20000000000/netease123,模擬的是同一個用戶對操作進行十次。如果要模擬不同用戶對頁面進行操作,就需要對用戶名密碼進行參數化;
先在系統中注冊10個用戶,用戶名密碼寫在一個txt文本中,如下圖,中間用英文的逗號隔開;
首先在線程組下添加>配置元件>CSV Data Set Config,這個組件可以幫助我們實現參數化
Filename:配置文件的絕對路徑;
File encoding:JMeter在讀取文件的時候使用的字符編碼方式;
Variable Names:配置文件中各列代表的數據項;
Delimiter:配置文件中不同列之間的分隔符
接下來的幾個配置項全部選用默認值
在login頁面的body中修改需要傳入的數據,為剛才測試組件中設置的項完全一致
5.HTTP?Cookie管理器:
>實際的登錄動作前后,進行了兩次checkLogin;
>在login操作時,開發者工具(F12)的ResponseHeaders中可以看到,進行了一些set-Cookie操作;換句話說,服務端會返回一些cookie信息給瀏覽器,瀏覽器會自動的在后續的所有請求中自動的帶上這些Cookie;
>但在Jmeter不會錄制下這些Cookie,正是因為缺少了這個cookie,我們的jmeter線程,即使成功執行了登錄操作,后續的請求,服務器依然會認為我們沒有登錄;
>那為什么Jmeter沒有錄制下這些cookie呢?因為這些cookie常常是不固定的,每次測試都有可能不一樣,把這些cookie錄制到Jmeter,反而會有些問題;
? ?>那當前的腳本需要進行怎樣的加工,才能生效呢?我們在此需要引入另一個測試組件:HTTP Cookie管理器
添加:
勾選“每次反復清除Cookies”,腳本反復執行登錄測試,每次執行主頁,登錄頁,登錄這一輪測試后,會清除cookie,下一次執行操作時,仍會以一個未登錄的狀態來執行主頁,登錄頁,登錄的操作;
添加HTTP Cookie管理器后執行測試,再查看結果樹checkLogin信息,可以看到服務端返回了用戶信息,此時服務端認為我們真正完成了登錄;
三、JMeter測試執行
查看結果樹
添加:
取樣器結果:
Load time:請求從發出到接收到完整的返回結果的時間;(即響應時間)
Latency:請求從發出到接收開始接收到響應,一般略小于Load time;
Connect Time:JMeter和服務端建立連接所花費的時間,這個時間端已經包含在Load time中了;
Size in bytes:這次請求的大小;
請求
響應數據:服務端返回的數據
查看結果樹這個監聽器,需要每個請求的詳細信息都顯示出來,所以對系統資源是有一定開銷的。如果在測試的時候,若系統的吞吐率很高,查看結果樹會對性能帶來比較大的影響,不建議用這個監聽器,以免影響測試結果;
聚合報告:
響應時間曲線
添加>監聽器>Response Time Graph
Interval(ms):橫坐標的統計間隔;Jmeter會在10秒內的執行的結果做一個平均值的聚合;
Sampler label
selection:可以設置過濾請求,只顯示一部分的請求;(如下圖:過濾以46和18開頭的請求)
只顯示46開頭的請求
常見問題和解決思路:
小壓力(如2個并發數)