Jmeter基本使用

爱老的虎油發表於2024-05-03

入門

簡介

特點

  • 能夠對HTTP和FTP伺服器進行壓力和效能測試,也可以對任何資料庫進行同樣的測試(透過DBC)
  • 完全的可移植性和100%純java
  • 完全多執行緒框架允許透過多個執行緒併發取樣和透過單獨的執行緒組對不同的功能同時取樣。
  • 各種負載統計表和可連結的計時器可供選擇
  • 資料分析和視覺化外掛提供了很好的可擴充套件性以及個性化。
  • 具有提供動態輸入到測試的功能

缺點

  • 不支援IP欺騙
  • 使用Jmeter無法驗證js程式,也無法驗證頁面ui,所以要和selenium配合完成Web2.0應用的測試

工作原理

image

下載安裝

Jmeter下載安裝詳細步驟(最新)-CSDN部落格

image

一個簡單案例

需求:使用JMeter訪問百度首頁介面,並檢視請求和響應資訊
步驟:

  1. 啟動JMeter
  2. 在‘測試計劃’下新增‘執行緒組
  3. 在‘執行緒組’下新增‘HTTP請求’取樣器
  4. 填寫HTTP請求’的相關請求資料
  5. 在‘執行緒組’下新增‘察看結果樹’監聽器
  6. 點選‘啟動’按鈕執行,並檢視

bin目錄

  • bin目錄是可執行檔案,jmeter.bat用於啟動jmeter,裡面可以配置jvm引數
  • 根據經驗,heap最多設定為實體記憶體的一半,預設設定為512M。如果heap超過實體記憶體的一半,可能執行jmeter會慢,甚至出現記憶體溢位。
  • jmeter的log在jmeter.log中檢視
  • jmeter.properties檔案中有一個屬性log_level.JMeter可以設定改變日誌詳細度。預設為info,可以改為debug。

專案簡介

一文看懂什麼是 RESTful API?- API 介面簡介
RESTful 風格詳解_restful風格-CSDN部落格

image

執行緒組

程序和執行緒的簡單概念:

  • 程序:正在執行的程式
  • 執行緒:是程序中的執行線索
  • 執行緒組:程序中有許多執行緒,為了方便管理,可以對執行緒按照性質分組,分組的結果就是執行緒組

PS:三者關係,一個程序可以包含多個執行緒組,一個執行緒組可以包含多個執行緒
併發執行和順序執行:

  • 併發執行:多個執行緒同時執行
    image

  • 順序執行:多個執行緒依次執行(選中測試計劃,勾選獨立執行每個執行緒組)
    image

兩個特殊執行緒組

tearUp執行緒組:最優先執行執行緒組
tearDown執行緒組:最後執行執行緒組

http請求預設值

對於一個執行緒組內的多個執行緒,可能存在相同的執行緒設定項,比如協議、IP地址、埠、編碼格式等,此時可以新增一個http請求預設值元件,來實現對複用內容的封裝

image

資訊頭管理器

有的介面是新增資料的請求,這類請求提交的資料是json格式的,需要宣告提交資料的內容型別

image

image

引數化

當提交的資料量較大,怎麼提交?每測試一次就修改一次嗎?
引數化定義:動態的獲取、設定或生成資料,是一種由程式驅動代替人工驅動的資料設計方案,提高指令碼的編寫效率以及編寫質量
以下四種方式實現引數化:

  1. 使用者定義的變數
  2. CSV資料檔案設定
  3. 使用者引數
  4. 函式

一、使用者定義的變數

呼叫格式:${變數名}
image

二、CSV資料檔案設定

CSV:逗號分隔值,是一種簡潔且常見的資料儲存格式,儲存語法如下圖所示
實現步驟:

  1. 使用CSV檔案儲存測試資料
  2. 編寫被複用的學院新增指令碼模板(注意:編碼集使用UTF-8無BOM格式)
  3. 關聯指令碼與資料(將檔案資料匯入指令碼)
    image
    image
    注意設定好之後,要將執行緒組設定中的迴圈次數設定為永遠,這樣才能遍歷讀取完csv資料中的每一行

三、使用者引數

這種引數化的方法實際應用不多,原因是使用者引數的資料和編寫的指令碼必須是放置在一起的,不能實現資料的分離和單獨維護。
案例:

  1. 編寫被複用的學院新增指令碼模板
  2. 使用使用者引數儲存測試資料
  3. 將資料匯入指令碼模板
  4. 設定執行次數
    image
    image

四、函式實現引數化

用於引數化常用的幾個函式:

  1. _counter計數器函式
    1. TRUE(每個使用者都有自己的計數器)
    2. FALSE(所有使用者共用一個計數器)

這裡我遇到一個問題,我的counter函式是從2開始計數,每次遞增2,使用的JMeter版本是5.6.2,後來使用5.0版本的JMeter,就是從1開始計數,每次遞增1

image
image

  1. _Random隨機數函式
    1. 引數1:取值範圍最小值(包含)
    2. 引數2:取值範圍最大值(包含)
  2. time獲取當前時間的函式
    1. 無參:獲取的是距離1970/01/0100:00:00的毫秒值
    2. 引數1:yyyy-MM-dd hh:mm:ss格式化成年\月_日時分秒格式

在JMeter中使用函式助手新增函式:

image

連線資料庫

JMeter直連資料庫:

  1. JMeter不具備直連資料庫功能,所以需要新增jar包到ClassPath
  2. 新增JDBC Connection Configuration配置元件,配置資料庫連線池的選項
    1. 資料池名稱
    2. 資料庫URL
    3. JDBC Driver class
    4. 賬號密碼(有就填,沒有不填)
  3. 新增JDBC Request,選擇Query型別,編寫SQL

斷言

步驟:

  1. 編寫測試指令碼
  2. 為被判斷的取樣器新增斷言元件
  3. 直接執行,檢視結果,如果斷言透過,沒有提示,如果斷言失敗,給出錯誤資訊

斷言可以讓JMeter代替人工判斷響應結果是否符合預期,斷言一般分為以下幾種:

  1. 響應斷言:斷言狀態碼和響應體

image

  1. 大小斷言:判斷響應內容的位元組長度

image

  1. 斷言持續時間:判斷響應時間

image

注意這裡有一個json斷言需要補充

進階

能掌握JMeter的邏輯控制器
能掌握JMeter的關聯操作
能掌握JMeter跨越執行緒組關聯
能掌握JMeter高併發場景的設定
能掌握JMeter高頻率場景的設定
能知道JMeter的分散式原理

JMeter元件的作用域與執行順序

image
image

邏輯控制器

透過引數化可以實現單個介面的功能測試,而介面測試過程中,除了單個介面的功能測試之外,還會測試介面業務實現,所謂業務,就是一套完整的業務邏輯或流程,這就必須要使用到邏輯控制和關聯。

IF控制器

需求1:測試計劃中定義一個http請求訪問傳智播客官網,但是該請求不是無條件執行的,宣告一個使用者定義的變數,如果變數是itcast才執行,否則就不執行

  1. 搭框架,測試計劃,執行緒組,結果樹,宣告一個使用者定義的變數
  2. 核心:新增if控制器,子級新增取樣器(和之前實現不同,控制器和取樣器存在父子級關係)
    image
    image

forEach控制器

需求2:有一組關鍵字[hello,python,測試](使用使用者定義的變數儲存)要依次取出,並在百度搜尋

  1. 搭框架,測試計劃,執行緒組,結果樹,宣告一個使用者定義的變數,儲存一組資料
  2. 新增forEach控制器,子級新增取樣器(和之前實現不同,控制器和取樣器存在父子級關係)
  3. 百度搜尋關鍵字

迴圈邏輯控制器

需求3:迴圈訪問學生管理系統10次

  1. 搭框架,測試計劃,執行緒組,結果樹
  2. 新增迴圈控制器,子級新增取樣器(和之前實現不同,控制器和取樣器存在父子級關係)

關聯操作

某一個請求的響應結果和下一個請求的資料有關係,這就是關聯

xpath提取器

需求:兩個http請求,請求A訪問傳智播客官網,請求B訪問百度,請求A將傳智播客官網原始碼中的title標籤的值取出,傳遞給請求B,在請求B中作為關鍵字搜尋這個title值
步驟:

  1. 搭框架,編寫兩個請求,傳智播客+百度搜尋
  2. 核心:取出傳智播客頁面原始碼的title值
  3. 傳遞給百度:${變數名}的方式傳值

正規表示式提取器

跨越執行緒組關聯

變數作用域侷限於當前執行緒組,其他執行緒組不可以直接呼叫。可以將請求A中提取的結果匯出到公共空間(可以被不同執行緒組共享),請求B再從公開空間呼叫該變數,相當於全域性變數。
想要實現跨越執行緒組變數的引用,可以使用函式助手中的兩個內建函式實現:

  1. setProperty生成設定全域性變數的指令碼
  2. 新增BeanShell取樣器貼上上邊的指令碼
  3. property函式生成引用變數的指令碼,貼上到想要引用的位置即可

高併發設定

JMeter中內建才定時器,可以實現時間模式相關的效能測試
需求1:同一時刻100個同學去訪問學生管理系統的查詢所有學院資訊功能統計高併發情況下平均響應時間以及錯誤率(高併發)
1、搭框架,測試計劃,執行緒組,取樣器,結果樹(侷限性),指定執行緒組的執行緒數屬性值為100
2、新增定時器synchronizing timer(集合點元件)
3、執行並檢視結果檢視:聚合報告元件,可以對結果彙總分析

高頻率設定

需求2:-個使用者以20QPS(==20次/s)的頻率訪問學生管理系統伺服器,持續15秒,統計伺服器的平均響應時間

QPS:Query per Seconds每秒查詢數(查詢率),每秒訪問多少次伺服器

1、搭框架:測試計劃>>>執行緒組>>>取樣器>>>聚合報告,根據題幹計算資料:迴圈次數=訪問頻率持續時間
2、新增QPS訪問頻率控制的相關元件(常數吞吐量計時器):每分鐘訪問次數=訪問頻率
60

分散式原理(瞭解)

多臺機器協作,以叢集的方式完成測試任務,可以提高測試效率
分散式角色劃分:

  • 控制機:負責任務分配
  • 執行機:負責任務實現

工作流程:

  1. 控制機制定測試任務,下發到執行機
  2. 執行機執行任務並將結果返回給控制機
  3. 控制機做結果彙總
    image
    環境搭建:
    1、不同的測試機上安裝Jmeter
    2、配置基礎環境(統一作業系統、JDK、Jmeter.)
    3、核心:控制機如何與執行機通訊?關鍵點:埠號
    4、控制機中設定執行機的P
    %JMETER HOME%/bin/jmeter.properties-->remote hosts:=執行機A的lP:埠號,執行機B的IP:埠號
    image
    image.png
    在執行之前,啟動jmeter.bat,使其處於待命效果

監聽器

聚合報告

image.png

實戰

介面測試流程:

  1. 制定測試計劃,分配任務
  2. 從API文件中提取介面清單:對API文件簡化,提高測試效率,主要是提取三要素

三要素:請求地址、請求方式、請求資料

  1. 設計測試用例並且引數化覆蓋測試用例
  2. 編寫指令碼實現,並匯入設計的測試資料
  3. 對於自動化介面指令碼的設計,每次更新都要保證之前的程式碼沒有受到影響,所以要把最基本的增刪改查功能設計一套自動化執行的指令碼,每次更新後可以啟動一下指令碼進行迴歸
  4. 測試結果彙總,提交缺陷

在實際的工作中,根據實際需求來決定是否進行效能測試
生成測試報告:
jmeter -n -t 指令碼檔案 -l 日誌檔案 -e -o 目錄
-n:無圖形化執行
-t:被執行的指令碼
-l:將執行的資訊寫入日誌檔案
-e:生成測試報告
-o:制定報告輸出目錄

JMeter聚合報告中的時間單位是毫秒

相關文章