文章目錄
JMeter - 揭開分佈式壓測的神祕面紗
接觸過實際項目開發的同學都知道,作爲一個有夢想的開發,我們提供的服務需要儘可能保持更高的質量和性能。這裏JMeter就登場了,通過一些工具我們可以對自己所編寫代碼的性能有一個很清晰的認識並根據具體指標分析去做優化。
1. 常用壓測工具對比
相信大家對常用的壓測工具都有一些接觸,目前
LoadRunner
、Apache ab
、Webbench
這幾款都是我們平時出鏡率比較高的壓測工具。這裏我們對每一款做一個簡單的對比:
LoadRunner
:這款工具性能比較穩定、壓測結果及細粒度大、功能繁多,還可以通過自定義腳本實現一些特殊場景驗證。不過優點越明顯缺點也可能越明顯,相對來說比較重量級,學習和使用成本都比較高。Apache ab
:這款工具也可以模擬多線程併發請求,並且對使用該工具的機器配置要求較低(內存、CPU佔用很低),不過卻可以給目標服務器造成巨大的負載。這款工具在壓測單接口時使用最爲頻繁,另外還能實現一些簡單的DDOS攻擊,不過我們不提倡,我們立志要做網絡的守護者。另外這款工具的使用我們在【Spring Boot - 集成Redis以及使用Apache AbTest進行壓力測試】中使用過,大家可以簡單瞭解下。Webbench
:這款工具主要是通過fork
多個子線程然後分別循環去進行Web訪問測試的,子進程會通過pipe
去將結果返回給父進程,父進程去做總體的一個統計。
最後壓軸的就是我們這裏要介紹的JMeter
了,這裏暫時不做簡單的介紹,後面會逐步深入去探索這款工具的神奇之處。
2. JMeter基本介紹和使用場景
2.1 JMeter基本介紹
要對
JMeter
做一個基本介紹,那就得從它功能上講起,這款工具支持的協議和應用類型也是十分豐富的:
- TCP
- FTP
- Web - HTTP, HTTPS
- Database via JDBC
- SOAP / REST Webservices
- Message-oriented middleware (MOM) via JMS
- Mail - SMTP(S), POP3(S) and IMAP(S)
- LDAP(輕量目錄訪問協議)
上述這些都只是它所支持的衆多協議中比較常用的協議,還有一些其他的大家可以自己去了解。
2.2 JMeter使用場景
JMeter
作爲一款非常成功的工具,那麼它的使用場景就不會單一,下面這些都是我們平時實際會遇到的一些常見的場景:
- 功能測試
- 壓力測試
- 分佈式壓力測試
如果使用過其他壓測工具的同學可以自己做一個比較,使用
JMeter
從我個人感受來說帶給我的是一種輕快、方便的感覺。這還是一款基於Java
開發的工具,性能也很好。當我們需要快速去完成一些壓測場景時,這款工具由於上手十分簡單則是當仁不讓的選擇。它還提供了對測試數據的分析以及可以自動生成各種報表數據圖形,十分強大。
3. Windows環境安裝JMeter
3.1 下載安裝JMeter
這裏我們主要先講下在Windows環境下如何安裝
JMeter
,後面進行分佈式壓測時會講解Linux
環境的安裝。過程十分簡單。
首先有一點是我們需要注意的,由於JMeter
是通過Java
編寫的,所以我們需要事先安裝好JDK8(或以上)
,這裏不做過多講解。我們這裏可以進入【Apache JMeter-Download Apache JMeter】去下載最新版本的JMeter
。
Windows
環境我們下載zip
的即可,另外如果官網下載太慢或者無法下載的同學可以通過【清華大學軟件鏡像站】或【北京理工大學軟件鏡像站】下載我們所需的軟件。我們還可以通過【JMeter官方使用文檔】去了解一些快速使用的方法。這裏如果大家有JRE環境的化也可以無需安裝JDK,這裏推薦安裝JDK是因爲在使用某些功能時需要有JDK的支持。
3.2 JMeter目錄簡單介紹
下載完成後,我們只需將
zip
壓縮包解壓即可。解壓完成後目錄大概就是下面這樣:
這裏我們簡單對這些目錄做一個介紹:
bin
:核心可執行文件,包含配置文件
1)jmeter.bat
: windows環境JMeter啓動程序
2)jmeter.sh
: linux環境JMeter啓動程序
3)jmeter-server.bat
: windows環境分佈式壓測啓動程序
4)jmeter-server.sh
: linux環境分佈式壓測啓動程序
5)jmeter.properties
: 核心配置文件extras
:插件拓展的包lib
:核心的依賴包ext
:核心包junit
:單元測試包
3.3 JMeter語言切換
我們點擊
jmeter.bat
打開之後,界面默認是英文的。雖然推薦大家堅持使用英文環境的習慣,但這裏還是介紹下。我們可以通過Options
->Choose Language
去選擇我們需要的語言即可。
另外大家可以發現通過這種方式修改的語言重啓之後又會變回應用,屬於臨時性的方案。這裏我們找到JMeter /bin
目錄下jmeter.properties
找到language=
這裏我們將註釋放開並且設置成我們需要的語言即可,下面提供了所支持的語言對應的屬性值。修改保存後重新啓動即可。
4. JMeter初體驗
4.1 快速開發API接口
這裏我們利用
Spring Boot
編寫一個接口,如何編寫這裏不做過多的介紹,大家可以通過自己擅長的方式去編寫一個接口即可。這裏貼出我們接口相關代碼,這裏主要提供一個GET
和一個POST
接口用於獲取球星列表以及球星對應評分,喜歡籃球的同學一看就懂啦,後面咱們還會專門寫一篇通過NBA某個賽季的各項數據綜合分析擬定一個訓練模板去推測後面一個賽季的比賽結果。
package com.ithzk.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
/**
* @author hzk
* @date 2019/8/23
*/
@RestController
public class JMeterController {
@GetMapping("/stars")
public Object stars(){
System.out.println("stars...");
return getStars();
}
@PostMapping("/getScore")
public Object getScore(String name){
HashMap<String, Integer> stars = getStars();
System.out.println("getScore...");
return stars.get(name);
}
private static HashMap<String,Integer> getStars(){
HashMap<String, Integer> stars = new HashMap<>(3);
stars.put("kobe",99);
stars.put("tracy",95);
stars.put("nash",94);
return stars;
}
}
啓動項目,訪問
http://127.0.0.1:8080/stars
,編寫完成。POST
接口這邊先不請求,待會會直接通過工具校驗。
4.2 創建測試計劃測試接口
這裏我們先通過測試計劃去添加一個
setUp Thread Group
這裏我們修改幾個主要參數,
Name
:線程組名稱Number of Threads
:線程數Ramp-up period
:多少秒內到達指定線程數Loop Count
:循環次數
這裏我們再來新增一個HTTP請求
。
這裏我們也修改一些參數,大家應該一目瞭然就知道什麼意思,英文不好的同學可以中英文切換使用慢慢熟悉。
修改好之後我們點擊啓動。
此時我們可以看到我們服務後臺不停接收到請求,也就是開始配置的數量,大家可以自己數數。
此時時候我們可以發現在JMeter
上沒有看到任何變化,這是因爲我們還缺少一項組件結果樹
。如下圖操作即可添加結果樹。
再次啓動,我們可以看到結果樹中將我們每次請求的結果以及一些數據都展現了出來。大家是不是對JMeter
有了一個簡單的認識呢。