JMeter實戰(二) 執行原理

測試老樹發表於2020-10-26

執行原理

如果不用工具,要做 100 併發的壓力測試,得想辦法組織 100 個人,每個人操作1臺電腦,一聲令下,100 個人同時點選,對系統造成 100 併發。現實中,很難找 100 個人和 100 臺電腦來做測試。1 個人和 1 臺電腦倒是容易得多。有沒有辦法用 1 個人和 1 臺 電腦對系統造成 100 併發?有辦法的。電腦是硬體,硬體之上執行著的是軟體,最基礎的軟體是作業系統。作業系統之上執行著的是程式,程式可以開啟工作管理員看到

JMeter實戰(二) 執行原理

作業系統會把資源分配給程式,程式拿著資源找 CPU 執行。程式挺大的,CPU 看著一堆程式頭也大了,告訴程式拆小一點再來找我。程式思來想去,想了個辦法,把程式拆成了多個執行緒。程式把執行緒拿給 CPU,CPU 一看樂了,這樣我就能靈活切換了,哎喲,不錯哦。這就是書本上說的,程式是作業系統分配資源的最小單位,執行緒是程式執行的最小單位。

作業系統有多個程式,程式有多個執行緒。多程式、多執行緒,正好可以用來模擬多個使用者,對系統造成多個併發。 JMeter、LoadRunner 等壓測工具的原理就是基於這個道理來的。LoadRunner 既支援多程式模擬,也支援多執行緒模擬。JMeter 不同。JMeter 是由 Java 寫成的,執行在 JVM 虛擬機器上面。程式開銷比較大,導致程式的數量有限。如果要增加負載,就只能加機器,這顯然不太經濟。所以 JMeter 只支援多執行緒

JMeter 的執行原理就是用多執行緒來模擬多使用者

執行環境

JMeter 安裝包是綠色版,解壓即用,解壓後的目錄

JMeter實戰(二) 執行原理

bin:配置檔案、啟動檔案、啟動jar包、示例指令碼等。

docs:JMeter API 離線幫助文件。

extras:輔助功能,可以與 Ant、Jenkins 整合。

lib:元件,基礎包放在 lib 根目錄下,擴充套件包放在 lib/ext 目錄下。

licenses:證照文字檔案。

printable_docs:JMeter 離線幫助文件。

LICENSE:證照說明。

NOTICE:版權宣告。

README:JMeter 簡介。

開啟 bin 目錄,找到啟動檔案啟動 JMeter,Windows 用 jmeter.bat,Linux 用 jmeter.sh

JMeter實戰(二) 執行原理

測試計劃

啟動後,會開啟介面,有 1 個測試計劃(TestPlan),JMeter 是基於測試計劃來組織和管理的

JMeter實戰(二) 執行原理

在 JMeter 中,一個介面只能開啟一個測試計劃,儲存後會生成一個 .jmx 指令碼檔案,一個測試計劃就是一個測試指令碼。這意味著測試計劃是在這個介面看到的樹形結構的根節點,根節點只能有一個,如果要同時開啟多個測試計劃,需要開多個介面。同時顯而易見的是,JMeter 的請求模擬和併發設定都是在測試指令碼檔案中一起設定的。

JMeter 是用執行緒來模擬使用者的,那麼測試計劃就必須至少有一個執行緒組,即使這個執行緒組只有一個執行緒。(也可以建立多個執行緒組,把不相關聯的業務分佈在不同的執行緒組,比如讓一些使用者請求這個介面,一些使用者請求那個介面)

而且必須要有一個取樣器和一個監聽器,模擬使用者請求,獲取測試結果,否則用 JMeter 就是用了個寂寞,既不發請求,又不看結果,哈哈。以下是簡單示例

JMeter實戰(二) 執行原理

遠端執行

執行緒建立過多會佔用大量系統資源,一般單臺機器,效能稍微好點的跑個 500 的併發,記憶體就比較吃緊了。因為做壓力測試,壓力機本身不能是效能瓶頸,否則壓測就沒有意義,所以實際測試成百上千的併發時,單臺機器是不夠用的,需要考慮用負載機群,也就是用多臺負載機分佈來模擬併發,如圖所示

JMeter實戰(二) 執行原理

控制機:管理遠端負載機,控制遠端負載機指令碼執行,收集遠端負載機測試結果。控制機本身也是個負載機。

遠端負載機:向被測應用系統發起負載。遠端負載機首先要啟動客戶端(Agent: bin 目錄下 jmeter-server.bat),才能被控制機接管。如果遠端負載機指令碼需要引數或依賴jar包,需要使用自動化工具從控制機傳送到遠端負載機。

遠端執行邏輯

  • 遠端負載機啟動 Agent 客戶端,等待控制機連線。
  • 控制機連線上遠端負載機。
  • 控制機傳送指令到遠端負載機啟動執行緒。
  • 遠端負載機執行指令碼,回傳結果資料。
  • 控制機收集結果並顯示。

遠端執行指令碼

  1. 遠端負載機啟動 jmeter-server.bat

  2. 在控制機 bin\JMeter.properties 檔案中,找到 remote_hosts,新增遠端負載機的 ip 和 port

  3. 多個遠端負載機,ip 用逗號分隔,如 remote_hosts=192.168.0.1:1664,192.168.0.2:1664

  4. 1664 是 JMeter 的 Controller 和 Agent 之間進行通訊的預設 RMI 埠號

  5. 在控制機開啟 GUI,選單欄 Run 下執行 Remote 命令,控制遠端負載機啟動,停止,退出

    JMeter實戰(二) 執行原理

簡要回顧

本文首先簡單介紹了多程式和多執行緒,說明了 JMeter 的執行原理是用多執行緒模擬多使用者。接著講述了 JMeter 的執行環境,有哪些檔案和資料夾,怎麼啟動 JMeter 執行。開啟 JMeter 後,看到一個測試計劃,實際上對應著一個 .jmx 測試指令碼檔案(文字編輯器開啟內容是 xml 程式碼)。最後說明了如何通過遠端執行負載機群來擴充負載。

相關文章