一、執行緒與程式
一個軟體/程式,是以程式的方式存在的,一個程式可含多個執行緒(一個軟體可以做多個事情,就是基於執行緒而實現的)
二、併發的基本概念
併發:
併發使用者數:同一時刻,伺服器/介面接收到的使用者量,例如同一時刻有22個同學同時點選登入按鈕,此時併發使用者數為22
併發請求數/qps/rps:同一時刻伺服器正在處理的請求數 (請求數一般理解為介面的請求數),例如點選登入按鈕後,會同時請求8個介面,則併發請求數為22*8
注意:通常意義上的併發指的是併發使用者數
jmeter效能測試原理:透過模擬高併發來測試伺服器在一段時間內的效能瓶頸/最大併發
三、設定併發
1、設定執行緒數(線上程屬性裡設定執行緒數,一個執行緒數即為一個人)
- Ramp-up Period(in seconds):決定多長時間啟動所有執行緒。如果使用10個執行緒,ramp-up period是100秒,那麼JMeter用100秒使所有10個執行緒啟動並執行。每個執行緒會在上一個執行緒啟動後10秒(100/10)啟動。Ramp-up需要要充足長以避免在啟動測試時有一個太大的工作負載,並且要充足小以至於最後一個執行緒在第一個完成前啟動。 一般設定ramp-up=執行緒數啟動,並上下調整到所需的。
- 迴圈次數:通常使用迴圈次數增加測試時間,一般設定為100
也可以使用排程器設定時間,通常是5min、10min、30min這種比較短的
2、新增集合點(適用於順時併發較高的情景,在jmeter中不用設定所有的情況,在併發高的第一個介面設定)
應用場景:搶購/秒殺(等待執行緒數準備好了再衝)
例子:活動,大轉盤,每天九點開啟,獎品非常豐富,你做效能測試的時候,怎麼模擬這種情況?
設定集合點步驟:
①新增同步定時器
右鍵http請求--->新增---->定時器---->synchronizing timer
②配置定時器
四、jmeter中的引數化
設定併發後,會發現登入介面有的能正常執行,有的報錯,這是因為多個人共用同一個賬號導致的,所以針對這個情況,需要對資料進行引數化
引數化含義:單個執行緒需要單獨的資料,比如登入的賬號和密碼
1、引數化步驟
4.1.1:明確哪些資料需要做引數,資料是從哪裡來的
4.1.2:準備測試賬號
web介面:呼叫介面準備
小程式:生成openID的演算法來建立測試賬號的token,再把token按照規則插入到Redis和資料庫表中
4.1.3:使用CSV資料檔案設定引用資料檔案
CVS資料檔案設定會自動取出單獨的資料,保證沒分執行緒資料是唯一的
①右鍵執行緒組--->新增---->配置元件---->CSV資料檔案設定
②選取已配置的檔案
③資訊頭管理器中,引用變數
五、聚合報告
即效能測試結果/效能指標,在測試計劃中新增
右鍵測試計劃--->新增--->監聽器--->聚合報告
指標判斷標準:
- 響應時間--平均響應時間:
- 響應時間-90%line、95%line、99%line:當前有多少人在這個時間點的響應時間(決定了絕大使用者的使用感受)
不同行業和專案對響應時間會有不同的要求,例如,網際網路:500ms以下,例如淘寶業務10毫秒左右;
金融企業,1秒以下為佳,部分複雜業務3s以下
保險企業:3s以下為佳
製造業:5s以下為佳
一般來說,響應時間都會遵循258原則,即2s以下優秀,2-5s可接受,5-8s良,8s差(不清楚就以8s作為依據)
- 失敗率,即出錯的機率
專案給出的標準 200qps,失敗率不超過0.01%,一般的小公司系統,小於5%即可,比較簡單粗略
- 伺服器上cpu使用率,即伺服器的繁忙程度,原則是不要持續100%,最好是在85%<x<90之間
- tps:伺服器每秒返回的請求數,在jmeter中稱為吞吐量,評論伺服器效能的輔助指標
tps最主要的作用是用來找效能瓶頸(一般來說,隨著併發數的增加,系統的效能會先穩定增加,之後一段時間系統效能趨於平穩,最後系統效能會下降,系統效能下降的那個點,稱為效能拐點,可得到最大併發)
注:我們在專案中,一般是隻以響應時間、失敗率、CPU使用率來判斷效能指標就夠了