目錄
JMeter的安裝配置
測(cè)試的性能指標(biāo)
TPS
響應(yīng)時(shí)長(zhǎng)
并發(fā)連接 和 并發(fā)用戶
CPU/內(nèi)存/磁盤/網(wǎng)絡(luò) 負(fù)載
性能測(cè)試實(shí)戰(zhàn)流程
JMeter
JMeter快速上手
GUI模式 運(yùn)行
HTTP請(qǐng)求默認(rèn)值
錄制網(wǎng)站流量
模擬間隔時(shí)間
Cookie管理器
消息數(shù)據(jù)關(guān)聯(lián)
變量
后置處理器
CSV 數(shù)據(jù)文件設(shè)置
斷言
循環(huán)控制器
預(yù)處理器
命令行模式 運(yùn)行
dashboard 產(chǎn)生圖表
JMeter的安裝配置
參考教程
測(cè)試工具JMeter詳細(xì)安裝配置教程(保證一次安裝成功)_jmeter安裝教程-CSDN博客
基本能成功,不能成功自己按報(bào)錯(cuò)自行搜索解決辦法
測(cè)試的性能指標(biāo)
參考鏈接
TPS
TPS (transaction per second) 是 服務(wù)端 每秒處理請(qǐng)求的數(shù)量
TPS 最直觀的反映了 系統(tǒng)的處理能力,當(dāng)然是重要的性能指標(biāo)之一。
說(shuō)到 TPS ,和其相關(guān)的還有如下這些名詞:
-
RPS (request per second) 是 測(cè)試工具 每秒發(fā)送請(qǐng)求的數(shù)量
RPS 和 TPS 概念不同,前者是每秒發(fā)出的請(qǐng)求數(shù)量。后者是處理完成的請(qǐng)求數(shù)量。
但是顯然,RPS 是決定 TPS 的重要因素。
TPS 是由 RPS 、網(wǎng)絡(luò)延遲 、服務(wù)端本身的處理速度 這3個(gè)因素決定的。
一個(gè)性能表現(xiàn)良好的系統(tǒng),TPS和RPS幾乎是相同的
-
EPS (error per second) 是 服務(wù)端 每秒處理出錯(cuò)的數(shù)量,也包含在TPS中。
一個(gè)性能表現(xiàn)良好的系統(tǒng),EPS 應(yīng)該一直為0
-
TOPS (timeout per second) 是 服務(wù)端 每秒處理超時(shí)的數(shù)量
超時(shí)時(shí)間具體是多少,應(yīng)該由產(chǎn)品需求定義。
一個(gè)性能表現(xiàn)良好的系統(tǒng),TOPS 應(yīng)該一直為0
前面說(shuō)過(guò) TPS 是由 RPS 、網(wǎng)絡(luò)延遲 、服務(wù)端本身的處理速度 這3個(gè)因素決定的。
服務(wù)端本身的處理速度 就是我們要測(cè)試的,測(cè)試時(shí),我們要保證的是其他兩個(gè)因素:RPS 和 網(wǎng)絡(luò)延遲。
做 性能/壓力測(cè)試 時(shí), 被測(cè)系統(tǒng)和加壓系統(tǒng), 應(yīng)該在一個(gè)帶寬網(wǎng)速比較理想的環(huán)境中,首先保證網(wǎng)絡(luò)延遲沒(méi)有問(wèn)題。
然后,性能測(cè)試工具要測(cè)試TPS能否達(dá)到 , 主要就是設(shè)置每秒發(fā)送請(qǐng)求的數(shù)量,也就是RPS。
RPS 是由測(cè)試工具決定的。
一個(gè)壓測(cè)工具本身的加壓性能也很重要。
否則,如果TPS指標(biāo)比較高,工具本身做不到,就沒(méi)法測(cè)試了。
如果服務(wù)端性能無(wú)限強(qiáng),網(wǎng)絡(luò)無(wú)限好,在目前的主流機(jī)器上,壓測(cè)能做到
單進(jìn)程 Windows系統(tǒng) 2000-5000 RPS, Linux系統(tǒng)下3000-6000 RPS
整機(jī)大概在 6000-12000 RPS
定義的一種客戶端 里面的行為代碼 就決定這種客戶端的 RPS
總RPS = 客戶端1 RPS * 客戶端1數(shù)量 + 客戶端2 RPS * 客戶端2數(shù)量 + …
所以,關(guān)鍵看你的客戶端行為定義 和 客戶端數(shù)量定義。
一個(gè)性能表現(xiàn)良好的系統(tǒng),TPS 和 RPS 幾乎是相同的。
所以,通常測(cè)試指標(biāo)TPS是多少,工具設(shè)置的RPS就是多少。
當(dāng)然,如果服務(wù)端本身的性能不夠,TPS自然也會(huì)相應(yīng)的下降。這時(shí),可以相應(yīng)的提升一下壓測(cè)工具的RPS
?在測(cè)試過(guò)程中會(huì)產(chǎn)生日志文件,記錄每秒 RPS、TPS、EPS、TOPS。
可以對(duì)測(cè)試數(shù)據(jù)進(jìn)行統(tǒng)計(jì)作圖。
注意:RPS、TPS、TOPS 都不需要我們做什么,工具會(huì)自動(dòng)記錄。
但是 EPS,必須要我們自己寫代碼,對(duì)響應(yīng)數(shù)據(jù)進(jìn)行檢查,并且告知黑羽壓測(cè)。
因?yàn)楣ぞ弑旧聿涣私鈽I(yè)務(wù)邏輯,什么樣的因?yàn)閿?shù)據(jù)是錯(cuò)誤的,工具沒(méi)法預(yù)先知道。
響應(yīng)時(shí)長(zhǎng)
響應(yīng)時(shí)長(zhǎng) 就是 服務(wù)端 處理請(qǐng)求耗費(fèi)的時(shí)間
平均響應(yīng)時(shí)長(zhǎng)
平均響應(yīng)時(shí)長(zhǎng) 就是 服務(wù)端 處理請(qǐng)求的平均耗費(fèi)時(shí)間。
這是影響用戶體驗(yàn)的重要指標(biāo)。設(shè)想一下如果 TPS 很高,但是,很多請(qǐng)求要很長(zhǎng)時(shí)間才得到反應(yīng),是什么樣的用戶體驗(yàn)。。。
在測(cè)試過(guò)程中會(huì)產(chǎn)生日志文件,記錄每秒 平均響應(yīng)時(shí)長(zhǎng)。
響應(yīng)時(shí)長(zhǎng)區(qū)段統(tǒng)計(jì)
光看平均響應(yīng)時(shí)長(zhǎng),往往是不全面的。
可能 有些請(qǐng)求會(huì)耗時(shí)特別長(zhǎng),嚴(yán)重影響用戶體驗(yàn)。但是被平均了就看不出來(lái)。
響應(yīng)時(shí)長(zhǎng)不能兩極分化。
響應(yīng)時(shí)長(zhǎng)區(qū)段統(tǒng)計(jì)就是查看是否兩極分化的衡量指標(biāo)。
并發(fā)連接 和 并發(fā)用戶
并發(fā)連接數(shù) 是 服務(wù)端 和客戶端 建立的?TCP連接的數(shù)量
并發(fā)用戶數(shù) 是 服務(wù)端 同時(shí)服務(wù)的?用戶的數(shù)量
?。
用戶的一個(gè)操作可能引發(fā)多個(gè)并發(fā)連接。
并發(fā)連接
通常,并發(fā)連接數(shù)指標(biāo),適用于 測(cè)試 面向客戶端程序的 API服務(wù)系統(tǒng),比如 云服務(wù)。
和 TPS 對(duì)系統(tǒng)性能的衡量側(cè)重點(diǎn)不同 ,并發(fā)連接數(shù)指標(biāo) 衡量 系統(tǒng) 能?同時(shí)處理
?客戶的能力。
兩者的區(qū)別 用一個(gè)比方 來(lái)解釋,就像銀行服務(wù):
并發(fā)連接數(shù),就像有多少個(gè)服務(wù)窗口
TPS, 就像每個(gè)窗口 服務(wù)員的處理速度
每個(gè)窗口服務(wù)員的處理速度即使很快,但是同時(shí)來(lái)了很多人,也必須開多個(gè)窗口,否則就會(huì)有人得不到服務(wù)。
對(duì) 并發(fā)連接 指標(biāo), 是通過(guò) 客戶端和性能場(chǎng)景 的定義來(lái) 設(shè)置的 。
如果,這樣定義客戶端
client = HttpClient('192.168.2.103',timeout=10)
while True:
response = client.sendAndRecv(
'GET',
'/api/path1'
)
sleep(60) # 間隔60秒
這樣定義性能場(chǎng)景
createClients(
'client-1', # 客戶端名稱
1000, # 客戶端數(shù)量
0.1, # 啟動(dòng)間隔時(shí)間,秒
)
就會(huì)每隔1秒創(chuàng)建10個(gè)客戶端(同時(shí)也建立了10個(gè)并發(fā)連接),直到并發(fā)連接數(shù)達(dá)到1000。
上面代碼中,每個(gè)客戶端發(fā)送請(qǐng)求消息間隔時(shí)間是60秒。如果服務(wù)端 保持連接的時(shí)長(zhǎng)小于60秒(比如 Nginx就是通過(guò)?keepalive_timeout 50;
?這樣設(shè)置的),就會(huì)造成連接 被 服務(wù)端主動(dòng)斷開,下次次發(fā)送請(qǐng)求要重新進(jìn)行連接。
Linux下 可以通過(guò) 如下命令 查看并發(fā)連接的數(shù)量
netstat -an | grep ESTABLISHED | grep -w 80 | wc -l
作為客戶端,本地可以打開的socket 數(shù)量 受操作系統(tǒng)的限制。
我測(cè)試過(guò),
在 Windows 10 專業(yè)版 16G內(nèi)存 可以打開6萬(wàn)個(gè)并發(fā)連接
而在Linux上通過(guò)修改 ip_local_port_range 參數(shù),也可以打開 6萬(wàn)個(gè)并發(fā)連接。
并發(fā)用戶
通常,并發(fā)用戶數(shù)指標(biāo),適用于 測(cè)試 面向真實(shí)用戶的 系統(tǒng),比如 淘寶。
一個(gè)用戶的一個(gè)操作可能引發(fā)多個(gè)并發(fā)連接
單獨(dú)說(shuō) 并發(fā)用戶數(shù) 這個(gè)指標(biāo)沒(méi)有意義, 必須指定是?哪種性能測(cè)試場(chǎng)景
?下的并發(fā)用戶數(shù)。
因?yàn)橛脩舻牟僮餍袨椴灰粯?,?duì)服務(wù)端的 請(qǐng)求數(shù)量 和 并發(fā)連接數(shù)也不一樣。
而且并發(fā)用戶指標(biāo) 是?一段時(shí)間
?內(nèi) 的,說(shuō)某個(gè)時(shí)間點(diǎn)的 并發(fā)用戶數(shù) 也沒(méi)有意義,因?yàn)樵擖c(diǎn)上,很多用戶可能沒(méi)有任何操作。
CPU/內(nèi)存/磁盤/網(wǎng)絡(luò) 負(fù)載
我們做性能測(cè)試時(shí),不能只看 TPS、響應(yīng)時(shí)長(zhǎng) 等指標(biāo)是否達(dá)到,也要看被測(cè)系統(tǒng)在達(dá)到這些指標(biāo)時(shí),機(jī)器本身的負(fù)載情況。
所謂負(fù)載情況,主要是: CPU占用率, 內(nèi)存使用,磁盤IO、磁盤使用率。
測(cè)試結(jié)束后可以產(chǎn)生系統(tǒng)資源使用圖。
在性能測(cè)試分析時(shí),我們主要關(guān)注這兩點(diǎn)
- 是否接近滿負(fù)荷
如果在達(dá)到這些指標(biāo)時(shí),機(jī)器已經(jīng)處于滿負(fù)荷狀態(tài):CPU使用率 接近 100%, 內(nèi)存幾乎用光,那也是不行的。 因?yàn)殡S時(shí)系統(tǒng)可能出問(wèn)題。
就是說(shuō)再加點(diǎn)壓力,或者再持續(xù)一段時(shí)間,就很可能出現(xiàn)響應(yīng)超時(shí)甚至響應(yīng)錯(cuò)誤的情況。
- 是否資源使用持續(xù)上升
這點(diǎn)特別體現(xiàn)在 內(nèi)存使用率 上。
如果系統(tǒng)資源使用圖上,內(nèi)存使用率是一個(gè)斜線不斷上升,的情況,那么很可能被測(cè)系統(tǒng)存在內(nèi)存泄露。
這樣只要再持續(xù)一段時(shí)間,就很可能出現(xiàn)系統(tǒng)因內(nèi)存耗盡而奔潰的現(xiàn)象。
出現(xiàn)這樣的圖表,就應(yīng)該添加測(cè)試用例,做一個(gè)較長(zhǎng)時(shí)間的性能測(cè)試(longevity testing),觀查系統(tǒng)的行為。
性能測(cè)試實(shí)戰(zhàn)流程
參考教程
JMeter
JMeter快速上手
參考鏈接:
安裝他提供給我的網(wǎng)站:安裝運(yùn)行 | 白月黑羽 (byhy.net)
GUI模式 運(yùn)行
運(yùn)行JMeter 有2種運(yùn)行模式:?GUI 圖形界面模式
?和?CLI 命令行模式
前者是開發(fā)調(diào)試用的,后者才是真正執(zhí)行壓力測(cè)試時(shí)用的
現(xiàn)在就是開發(fā)階段,當(dāng)然先使用 圖形界面模式,等調(diào)試沒(méi)有問(wèn)題,再使用命令行模式
HTTP請(qǐng)求默認(rèn)值
測(cè)試過(guò)程中,被測(cè)系統(tǒng)換了, 就要換配置的地址, 要手動(dòng)修改 請(qǐng)求參數(shù),請(qǐng)求取樣器多了, 就非常麻煩了。
可以使用HTTP請(qǐng)求默認(rèn)值
?解決這個(gè)問(wèn)題。
錄制網(wǎng)站流量
JMeter提供了錄制瀏覽器的請(qǐng)求的方法,使用的是代理抓包的機(jī)制。
-
確保?
HTTP請(qǐng)求默認(rèn)值
?里面的服務(wù)器IP 和錄制的網(wǎng)址一致否則錄制時(shí),每個(gè)HTTP請(qǐng)求里面都會(huì)帶上IP,還得手工修改刪除,不利于統(tǒng)一使用
HTTP請(qǐng)求默認(rèn)值
?里面的服務(wù)器IP。 -
在整個(gè)測(cè)試計(jì)劃下面添加?
HTTP代理服務(wù)器
英文叫?
HTTP(S) Test Script Recorder
-
在?
線程組
?里面 添加?邏輯控制器 -> 錄制控制器
-
-
設(shè)置
HTTP代理服務(wù)器
-
分組 選項(xiàng) 選擇:?
將每個(gè)組放到新的事物控制器中
-
如果你需要錄制時(shí)過(guò)濾掉一些請(qǐng)求
點(diǎn)擊Request Filtering 配置頁(yè),
排除模式下 添加 你要 過(guò)濾掉 不抓取的 的類型資源 ,使用的是正則表達(dá)式
- 點(diǎn)擊代理服務(wù)器的啟動(dòng)按鈕
-
-
設(shè)置瀏覽器代理為 本機(jī)(localhost) 的 8888端口,進(jìn)行對(duì)應(yīng)的界面操作
應(yīng)該發(fā)現(xiàn)抓到了相應(yīng)的請(qǐng)求。
?其中,配置過(guò)程中遇到了JMeter錄制不上的情況,按照下面的方法來(lái)
jmeter性能測(cè)試腳本錄制不了的幾種情況_jmeter錄制腳本不成功_曹紅杏的博客-CSDN博客
這個(gè)問(wèn)題前后花了我三四個(gè)小時(shí),上述教程我在很前期就見(jiàn)過(guò),也照著做了,但是在查ip的時(shí)候我偷懶在瀏覽器搜的本機(jī)ip,查到的是本機(jī)對(duì)外(公網(wǎng))的一個(gè)ip,但是教程中用的是一個(gè)局域網(wǎng)ip,導(dǎo)致就各種嘗試都不對(duì),真tm開心。
具體流程如下:
edge瀏覽器下:設(shè)置->搜索“代理”
???????
注意,瀏覽器訪問(wèn)要錄制的頁(yè)面要設(shè)置成本機(jī)ip的方式訪問(wèn)(有坑:外網(wǎng)IP和內(nèi)網(wǎng)ip的區(qū)別-CSDN博客)
基本就可以錄制了。
對(duì)了要注意 它錄制的是一定時(shí)間間隔內(nèi)操作的網(wǎng)絡(luò)訪問(wèn)所以在錄制時(shí),瀏覽器窗口還是盡可能干凈些吧。
此外打開f12,關(guān)閉cookie緩存
-
右鍵點(diǎn)擊?
錄制線程組
?點(diǎn)擊?驗(yàn)證
?,查看一下是否能正確模擬 -
繼續(xù)其它場(chǎng)景的錄制和拖動(dòng)
-
結(jié)束錄制,修改瀏覽器設(shè)置,取消代理
模擬間隔時(shí)間
場(chǎng)景1中兩組請(qǐng)求中間沒(méi)有間隔,不符合實(shí)際情況。
怎么讓它們有間隔呢?
可以使用 JMeter的?定時(shí)器 Timer
定時(shí)器 執(zhí)行優(yōu)先級(jí)高于 取樣器, 會(huì)先暫停, 可以放在下一個(gè)消息的前面
也可以使用 取樣器 里面的?測(cè)試活動(dòng) flow control action
?取樣器
Cookie管理器
假設(shè)現(xiàn)在有一個(gè)性能測(cè)試用例,要求:
用戶數(shù)量 1200 個(gè),
賬號(hào)為 sz_000001 ~ sz_001200, 密碼都是 111111
在10分鐘依次進(jìn)行如下操作 :
打開登錄頁(yè),進(jìn)行登錄后,進(jìn)入首頁(yè)
如果你還用前面錄制的方式,錄制后,驗(yàn)證一下,就可以發(fā)現(xiàn):
有些后續(xù)的API請(qǐng)求返回的結(jié)果是錯(cuò)誤,返回信息表示,沒(méi)有登錄。
即使前面 發(fā)送的登錄請(qǐng)求返回表示成功了。 為什么呢?
這是因?yàn)?這個(gè)被測(cè)系統(tǒng) 使用的 用戶驗(yàn)證機(jī)制是?Cookie Session機(jī)制
這就需要 讓JMeter自動(dòng)把接收到的 HTTP 響應(yīng)消息中的?Cookie
?保存起來(lái),并且在后續(xù)發(fā)給該網(wǎng)站的請(qǐng)求中自動(dòng)攜帶上, 可以在測(cè)試計(jì)劃節(jié)點(diǎn)下面添加一個(gè)?HTTP Cookie管理器
效果
消息數(shù)據(jù)關(guān)聯(lián)
做API接口性能測(cè)試的時(shí)候,后面的請(qǐng)求參數(shù) 往往 需要?根據(jù)前面的請(qǐng)求結(jié)果
?來(lái)決定。
這樣,測(cè)試工具填入的數(shù)據(jù)就是動(dòng)態(tài)的,沒(méi)法預(yù)先寫死。
比如前面的測(cè)試場(chǎng)景,后續(xù)還需要做如下操作:
用戶登錄后,打開?學(xué)習(xí)中心 -> 我的任務(wù)
?頁(yè)面,查看前2個(gè)任務(wù)。
這樣,就要獲取前2個(gè)任務(wù)的id, 因?yàn)槊總€(gè)學(xué)員?任務(wù)分配
?的id都是不一樣的。
JMeter 需要 從 前面 列出任務(wù)的 HTTP API響應(yīng)結(jié)果 里面提取出 ID, 供后面的請(qǐng)求使用。
如何做到呢?
這就要使用?后置處理器
?和?變量
?。
JMeter 通過(guò) 后置處理器 取出 取樣器響應(yīng)結(jié)果中 要提出取出來(lái)的數(shù)據(jù), 存入變量,后續(xù)請(qǐng)求使用這些變量。
變量
JMeter中,使用變量,是通過(guò)?${變量名}
?這樣的格式
變量可以用戶自己定義產(chǎn)生,也可以由前置處理器、后置處理器 等 JMeter 元件產(chǎn)生。
有的是JMeter內(nèi)置變量,比如表示當(dāng)前線程號(hào)的變量?__threadNum
?,就可以這樣使用?${__threadNum}
后置處理器
后置處理器通常用于對(duì) 取樣器 結(jié)果進(jìn)行后續(xù)處理。
后置處理器 的有效范圍是 同級(jí)所有取樣器,如果只要針對(duì)某個(gè)取樣器,應(yīng)該添加在它下面
常用的一個(gè)后置處理器是?JSON提取器
?, 可以把 HTTP響應(yīng)消息中的數(shù)據(jù)提取到變量中,供后續(xù)使用
說(shuō)明文檔:https://jmeter.apache.org/usermanual/component_reference.html#JSON_Extractor
測(cè)試網(wǎng)頁(yè):?http://jsonpath.herokuapp.com
具體操作紀(jì)律:
打開錄制功能,分別錄制下面的 動(dòng)作
分別點(diǎn)擊下面兩個(gè)按鈕
這些操作盡可能快的做完,錄制上,然后點(diǎn)擊自己錄制的結(jié)果,翻閱一下,把鏈接不是來(lái)自192.168.172.1的那些請(qǐng)求刪掉(可能是瀏覽器本身在刷新訪問(wèn)其他頁(yè)面,含有一些隱形的操作也被錄了進(jìn)來(lái))
然后把這批請(qǐng)求組成的事務(wù)拖動(dòng)到含有登錄操作的線程組下面,閱讀接口 手冊(cè)(或者自己簡(jiǎn)單翻閱一下或者網(wǎng)頁(yè)查看f12),找到單擊動(dòng)作得到的id值對(duì)應(yīng)的請(qǐng)求鏈接(上面那張截圖的兩個(gè)“我的任務(wù)”的訪問(wèn)需要這個(gè)id),然后給這個(gè)請(qǐng)求“/api/assignment-391”添加后置處理器->Josn提取器。
提取器的設(shè)置如下
然后將上面JSON提取器設(shè)置的變量給需要引用他的頁(yè)面引用一下
然后 驗(yàn)證一下有沒(méi)有成功,下圖可見(jiàn)傳參成功
HTTP響應(yīng)中有UTF8編碼的中文顯示為亂碼,可以再設(shè)置一個(gè)?BeanShell PostProcessor
?類型的后置處理器,并且在?Script
?中增加?prev.setDataEncoding("UTF-8");
CSV 數(shù)據(jù)文件設(shè)置
有時(shí)候,性能測(cè)試有大量的數(shù)據(jù) 需要從 CSV 格式的文件讀入使用。
CSV格式的文件,其實(shí)就是文本文件,里面記錄了性能測(cè)試數(shù)據(jù),比如
sz_000001,111111
sz_000002,111111
sz_000003,111111
這時(shí),可以在某個(gè)?線程組下面?添加?CSV data set config(CSV 數(shù)據(jù)文件設(shè)置)
?元件
CSV 數(shù)據(jù)文件設(shè)置可以為每列設(shè)置一個(gè)變量名,比如上例就是?loginname,password
JMeter會(huì)把 每行數(shù)據(jù)依次分配給一個(gè)線程。
這樣,每個(gè)線程里面的元件 就可以使用 這些變量 ,得到對(duì)應(yīng)的數(shù)據(jù)。
具體使用?點(diǎn)擊這里參考官方文檔
得到csv文件的方式 :上面的三行數(shù)據(jù)拷貝放到一個(gè)空的data.txt文件中,然后改后綴為csv
設(shè)置如下,可見(jiàn)又設(shè)置了兩個(gè)變量
引用兩個(gè)變量
斷言
利用JMeter斷言, 可以判定 從被測(cè)系統(tǒng) 收到的響應(yīng)消息是否正確。
斷言的有效范圍是 同級(jí)所有取樣器,如果只要針對(duì)某個(gè)取樣器,應(yīng)該添加在它下面。
例如,可以判斷響應(yīng)是否包含某些特定文本、數(shù)據(jù)。
甚至可以使用 Groovy、 BeanShell 這樣的腳本語(yǔ)言做 更加靈活的斷言判定。
比如下面使用?JSR223 斷言
?腳本,可以檢查JSON格式消息體響應(yīng)中的total字段值是否小于10
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper();
def retObj = jsonSlurper.parseText(prev.getResponseDataAsString());
if(retObj.total < 10){
AssertionResult.setFailureMessage("retObj.total <10");
AssertionResult.setFailure(true);
}
循環(huán)控制器
線程組可以整體循環(huán), 但是如果你只想循環(huán) 線程組其中的一部分操作呢?
比如:
用戶登錄一次, 后續(xù)操作循環(huán)10次,每次間隔20秒 可以使用循環(huán)控制器。
循環(huán)控制器 內(nèi)部的元件有時(shí) 需要用到?當(dāng)前循環(huán)序號(hào)
?。
JMeter 的當(dāng)前循環(huán)序號(hào)放到變量?__jm__<循環(huán)控制器名稱>__idx
?中。
比如你的 循環(huán)控制器 名為 LC, 你就可以通過(guò)?${__jm__LC__idx}
?訪問(wèn)到 當(dāng)前循環(huán)序號(hào)。
預(yù)處理器
預(yù)處理器 在取樣器請(qǐng)求 發(fā)出前執(zhí)行一些操作
用的比較多的是:設(shè)置一些參數(shù)、修改取樣器的設(shè)置、腳本預(yù)處理
有效范圍是同級(jí)所有取樣器,如果只要針對(duì)某個(gè)取樣器,應(yīng)該添加在它下面。
常用的有 用戶參數(shù)、HTML鏈接解析器、JSR223/BeanShell 等前置處理器
比如,下面JSR223前置處理器的代碼可以把一個(gè) 當(dāng)前循環(huán)序號(hào)變量值進(jìn)行預(yù)先處理 加1。
long number = Long.parseLong(vars.get('__jm__LC1__idx'))
number = number + 1;
vars.put('loopno',String.valueOf(number))
// OUT.println vars.get('loopno')
命令行模式 運(yùn)行
真正實(shí)施性能測(cè)試應(yīng)該在命令行模式下運(yùn)行,命令格式如下:
E:\apache-jmeter-5.6.2\bin\jmeter -n -t loadtest-case1.jmx -l log.jtl
注意JMeter的路徑替換為你的安裝路徑
假設(shè) 我們有如下的性能測(cè)試用例
只有一種用戶行為:
無(wú)需登錄,先訪問(wèn)首頁(yè),再訪問(wèn) 單課頁(yè) ,再訪問(wèn) 新聞頁(yè)
訪問(wèn)頁(yè)面間隔 10 秒
用戶數(shù)量 1200 個(gè),在10分鐘依次上線
dashboard 產(chǎn)生圖表
E:\apache-jmeter-5.6.2\bin\jmeter -g log.jtl -o report1
就會(huì)產(chǎn)生report1目錄,里面的index.html 打開就是報(bào)告
注意?-o
?后面的目錄 一定要不存在,或者內(nèi)容為空,否則會(huì)報(bào)錯(cuò)。
其中?APDEX (Application Performance Index)
?里面的?T (Toleration threshold)
?和?F (Frustration threshold)
?可以通過(guò) JMeter 工具 bin 目錄下面的?user.properties
?配置文件里面 這兩個(gè)選項(xiàng)來(lái)設(shè)置
jmeter.reportgenerator.apdex_satisfied_threshold
jmeter.reportgenerator.apdex_tolerated_threshold
我的一些結(jié)果
?
?
我本機(jī)結(jié)果比較抽風(fēng),領(lǐng)會(huì)精神吧
?
?
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-789222.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-789222.html
到了這里,關(guān)于測(cè)試工具JMeter的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!