1. 程式人生 > 其它 >Jmeter使用及壓測

Jmeter使用及壓測

介紹

Apache JMeter是Apache組織開發的基於Java的壓力測試工具。JMeter 可以用於對伺服器、網路或物件模擬巨大的負載,來自不同壓力類別下測試它們的強度和分析整體效能。另外,JMeter能夠對應用程式做功能/迴歸測試,通過建立帶有斷言的指令碼來驗證你的程式返回了你期望的結果。為了最大限度的靈活性,JMeter允許使用正則表示式建立斷言;

安裝

JDK

Jmeter

1 . 直接訪問官網下載編譯好的版本;
2 . 解壓(建議至/Applications 目錄)後目錄結構如下圖:

3 . 新增環境變數
開啟 ~/.bash_profile檔案
新增以下指令:
export JMETER_HOME=/Applications/apache-jmeter-5.2.1/bin
export PATH=$JMETER_HOME:$PATH:.
執行source ~/.bash_profile使環境變數生效
4 . 執行jmeter -v出現下圖內容則安裝成功

啟動Jmeter

執行jmeter,將啟動JMeter,在終端會有如下輸出:

在輸出中提示不能使用圖形介面進行負載測試,只能建立和除錯測試計劃,負載測試需要執行如下命令:jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
另外提示需要增加JVM的Heap配置去滿足自己的測試需求;

在終端啟動JMeter後會自動開啟圖形介面,如下圖:

可操作選單Options => Choose Language => Chinese 進行中文語言的切換:

模擬壓測環境

建立測試

Jmeter-http介面測試新增步驟

建立執行緒組

在左側的"TestPlan"上右鍵 【新增】-->【Threads(Users)】-->【執行緒組】,設定執行緒數和迴圈次數。只設置這兩個即可,比如100的執行緒數,1次迴圈

配置元件

在我們剛剛建立的執行緒組上右鍵 【新增】-->【配置元件】-->【HTTP請求預設值】。只需要配置協議、地址和埠這三項即可,這樣後面所有的請求都是基於現在的這個進行的,比如http://127.0.0.1:8080,後面的的請求只需要使用path即可

http請求

在“執行緒組”右鍵 【新增-】->【samlper:取樣器】-->【HTTP 請求】設定我們需要測試的API的請求路徑和資料。我這裡是用的json


新增請求頭

執行緒組上右鍵 [新增] --> [配置元件] --> [HTTP資訊頭管理器]

新增斷言

執行緒組上右鍵 【新增】-->【斷言】-->【響應斷言】,根據響應的資料來判斷請求是否正常。比如只根據狀態碼判斷是否正常。
要測試的響應欄位:響應程式碼
模式匹配規則:Equales
要測試的模式:200
錯誤提示資訊:“出錯啦!”

新增檢視結果樹

執行緒組上右鍵 【新增】-->【監聽器】-->【察看結果樹】。點選工具欄上的執行按鈕就可以看到結果了

12.png

新增Summary Report

執行緒組上右鍵 【新增】-->【監聽器】-->【Summary Report:彙總報告】。點選工具欄上的執行按鈕就可以看到結果了
以上的測試計劃已構建完整,點選左上角的報錯按鈕儲存下

執行測試計劃

cmd中執行:進入jmeter的bin目錄,執行下面的命令
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

  • jmx file:測試計劃檔案路徑
  • results file:測試結果檔案路徑
  • Path to web report folder:web報告儲存路徑

e.g.:jmeter -n -t [testplan/RedisLock.jmx] -l [testplan/result/result.txt] -e -o [testplan/webreport]

秒殺介面壓測

1 . 需要滿足的條件:

  • 第一步使用郵箱地址、密碼登入獲取到返回的token
  • 第二步攜帶token請求秒殺介面

需要郵箱地址、密碼及返回的token
2 . jmeter測試需要用到的技術

  • jmeter操作資料庫,讀取郵箱地址和密碼
  • jmeter關聯,使用第一步返回的token作為引數執行第二步,jmeter關聯就可以儲存這個token資訊

Jmeter操作資料庫

1.下載mysql-connector-java-5.1.7-bin.jar,地址:https://dev.mysql.com/downloads/connector/j/

  • 選擇Platform Independent
  • 選擇ZIP檔案進行下載

2.解壓,把裡面的jar包放到jmeter的lib目錄下
3.配置連線資訊

  • 執行緒組右鍵新增“配置原件”--“JDBC Connection Configuration”
  • 執行緒組右鍵新增“samlper:取樣器” -- “JDBC Request”
  • 在TestPlan頁面,點選瀏覽 ,將目錄或jar新增到類路徑 Add directory or jar to classpath。此處選擇我們剛剛放在lib下的jar即可
  • JDBC Connection Configuration頁面配置連線資訊
    • 資料庫:mysql
    • DriverName-->com.mysql.jdbc.Driver
    • URL--> jdbc:mysql://47.94.149.143:3306/{jemeter}?allowMultiQueries=true&serverTimezone=UTC
    • 使用者名稱、密碼

4.使用
在JDBC Request 頁面

Jmeter關聯

1.新增關聯

  • 在某個請求上右鍵新增”後置處理器“ -- ”json提取器“
  • 設定
    • 響應欄位:主體
    • 引用名稱:token
    • 正則表示式:$.key1.key2

2.獲取關聯資料

  • parameters中獲取:${token}

壓測指標

1 . 壓測前要明確壓測功能和壓測指標,一般需要確定的幾個問題;
2 . 固定介面引數進行壓測還是進行介面引數隨機化壓測?
3 . 要求支援多少併發數?
4 . TPS(每秒鐘處理事務數)目標多少?響應時間要達到多少?

jdbc request:設定結果集儲存的變數:user

BeanShell 後置處理器:

var email = vars.getObject("user").get(0).get("email");
vars.put("email",email.toString());

測試問題記錄:

  • 併發查詢怎麼確保每個執行緒一個使用者?使用計數器,不勾選“與每使用者獨立的跟蹤計數器”選項
select email from front_user WHERE email not in (SELECT uemail from orders) limit ${user_offset},1 
  • 相隔時間很小的時候,可能一個使用者會下單兩次都成功
SELECT email FROM shop_sys_front_user WHERE email NOT in (SELECT uemail FROM shop_product_srv.shop_orders_orders) LIMIT 1;