測好測滿(一) : 壓力測試Jmeter

LUFOR129
6 min readSep 24, 2021

系統上線以前,如果我們沒有去挑戰一個系統的極限,我們永遠不知道該系統最高可以有多少的可靠度,壓力測試就是因此而生(Stress testing)。最常見的就是Jmeter,一款由Apache開源的JAVA壓力測試工具。今天我們來講解如何安裝、執行測試。

Jmeter能做到的事情包含:

  • HTTPS 性能測試
  • LDAP 測試
  • FTP

更重要的是,Jmeter在完成測試後可以產生完整動態的HTML報告,方便使用者觀看。 接下來就來講一下Jmeter的安裝與使用。

安裝Jmeter

進入Apache Jmeter

  • Windows版安裝 : apache-jmeter-X.X.X.zip
  • Linux版安裝 : apache-jmeter-X.X.X.tgz

以下用Windows版講解:
下載完成後解壓縮,獲得了一包apache-jmeter-X.X.X,cmd 執行該包下的apache-jmeter-X.X.X/bin/jmeter.bat。可以獲得一個Jmeter畫面:

接下來我們要建立Jmeter的腳本,假如測試目標是Express的一個GET API,localhost:3000/hello,呼叫後會回傳Hello World,我們要來看看系統最高能承受多少的壓力。以及localhost:3000/postParams,測試呼叫的參數是否符合要求。

router.get("/hello",function(req,res,next){
res.send("<h1>Hello World</h1>")
})
router.post("/postParams",function(req,res){
const params = req.body.number;
if(params < 1000) res.send("That's Good Number") //回傳200
else res.status(404).send("I don't like this Number") //回傳404
})

壓力測試

進入Jmeter GUI後在測試計畫(Test Plan)上點擊右鍵 > Add > Threads(Users) > Thread Group。每一個Threads就是在模擬每一個人的行為。

在Thread Properities中,Number of Threads代表同時模擬的用戶數,Loop Count代表共幾輪。可以暫時調成1000人與3輪。接著對著Thread Group按右鍵 > Add > Sampler > Http Reqester

在Http Request中輸入這次Test名稱、Server Name、路徑。localhost:3000/hello如下:

多建立幾個Http Request任務後我們就能開始執行測試了。對著Thread Group 右鍵 > Add > Listener > ...,可以選擇各式各樣的結果圖,這裡選擇Summary Report。 按下save保存你的測試參數為一個.jmx檔,接下來按下三角型進行測試。

注: 要是按下save報錯
打開 Options > Look and Feel > 選擇一個非Darcula的外觀 > 重新啟動即可解決。

Summary Report可以很清楚的看到測試結果:

參數測試

如上面的API,他只接受1000以下的數字,我們可以來建立一個Sequencial的數字與Random的數字來進行測試。

Random數與Post
該如何建立Random數,可以參考Jmeter function,同樣的接著對著Thread Group按右鍵 > Add > Sampler > Http Reqester,這次選擇POST,底下選擇Body Data,輸入:

// Body Data
{
"number": ${__Random(0,2000)}
}

但是這樣還不夠,Post的data不是JSON格式,對著HTTP Request右鍵 > Config Element > HTTP Header Manager,新增一個格式為content-type:application/json

Sequence 數
該如何建立Sequence數,讓我們從0~1000每個數字測試一遍呢? Jmeter沒有給這個Function,但是還是能辦到。對著Thread Group右鍵 > Add > Logic Controller > Loop Controller

Loop Controller內有一個Loop Count,這代表執行幾次Loop。比如說Thread Group的Threads為1000、Thread Group的Loop Count為2、Loop Controller的Loop Count為2,則Loop總共執行次數是: 1000*2*2共4000次。

接著對著Loop Controller右鍵 > Add > Config Element > Counter

Counter可以設定你的Start Number與Increment,最重要的定義你的Export Variable Name,這裡我定義成counter_value

再次建立好你的HTTP Request (在Loop Countroller之下),記得調整你的HTTP Header,然後在Body Data輸入:

// Body Data
{
"number": ${counter_value}
}

接著就能套用運行順序類的參數了。

--

--