業界壓測工具/平台對比


壓測工具/平台是什么?

壓測,即壓力測試,作用是對各種服務對象進行壓力測試以獲得該服務處於或超過預期負載時系統的運行情況,進而判斷系統在峰值負載或超出最大負載情況下的處理能力。

壓測工具,顧名思義,就是用來進行壓力測試的工具,常用的有ab、jmeter、LoadRunner和wrk等等。

而由於在整個壓測過程中存在以下問題:

  • 時間成本:每次測試都需要重新搭建一套生產環境,成本太高,且幾乎每個環節都需要人力支撐

  • 數據成本:腳本、測試數據、壓測機器、測試報告無法沉淀

  • 風險成本:測試用例多,生產壓測缺乏平台流程管理,手工執行非常容易出錯

  • 自動化問題:自動化性能基線無統一平台支撐,測試過程中靠手動監控,覆蓋不全且定位問題困難

為了解決以上這些問題、更好地滿足自己/用戶的壓測需求,不少企業在開源壓測工具的基礎上進行二次開發,將壓測流程管控、壓測任務管理和自動化性能基線等功能整合在一起,形成一個可以支撐各種個性化壓測需求的分布式業務系統,也就是壓測平台。

本文主要講什么?

用戶在挑選壓測平台時,一般都會關心幾個問題,一是壓力能不能穩定打上去,達到用戶的需求;二是進行壓測的成本有多高,例如操作成本、學習成本、資源成本等;有些用戶可能還會有對於報告輸出的要求。也就是說,對於壓測平台,我們最關心兩個個問題:

  • 該工具/平台是否可以滿足自己的測試需求?
  • 該工具/平台能否穩定提升壓力到指定水平?
  • 該工具/平台的壓測成本有多高?

工具/平台間的對比

在這里進行對比的平台/工具有阿里雲的性能測試平台PTS、華為雲的性能測試服務CPTS、睿象雲的雲壓力測試平台CPT這三款雲壓測平台以及k6Apache JMeter這兩款壓測工具。

為什么挑選它們?

因為這三家壓測平台都接受個人用戶在其平台上進行壓測,而像騰訊雲的WeTest壓測大師、數列科技的ForceCop和壓測寶等一些雲壓測平台則暫時只接受企業用戶進行壓測,定價與服務也是依據企業用戶的自身情況進行定制的,個人無法評測。

而這兩款壓測工具,一款是更大眾的JMeter,另一款是新興的測試工具k6。

  1. 該工具/平台是否可以滿足自己的測試需求?

    我們來對比各個工具/平台支持的協議有哪些,如下表

    壓測工具/平台 支持的協議
    性能測試平台PTS HTTP、HTTPS、WebSocket、TCP、UDP、Dubbo、Mqtt
    性能測試服務CPTS HTTP、HTTPS、TCP、UDP
    雲壓力測試平台CPT HTTP、HTTPS、Socket、WebSocket、TCP、UDP、Mqtt
    JMeter HTTP、FTP、JDBC、SOAP、LDAP、TCP、JMS、SMTP、POP3、IMAP
    K6 HTTP 1.1、HTTP 2、WebSockets、gRPC、SOAP、REST
  2. 該工具/平台能否穩定提升壓力到指定水平?

    對於雲壓測平台來說,由於本指標中的“穩定”不太好評價,以及這些平台的官方文檔一般都有說明自己所能達到的最大並發,於是我去對比了這些平台的價格,也就是說,我們對比的是想要達到某個程度的並發,用戶需要花費多少錢?

    注:我們選取最大並發用戶數為5000作為對比的基准線。

    1. 性能測試平台PTS(阿里雲)

      套餐詳情:

      這是一個月的價格,一年也就是278*12=3336元。

    2. 性能測試服務CPTS(華為雲)

      套餐詳情:

    3. 雲壓力測試平台CPT(睿象雲)

    而對於壓測工具來說,一般有以下兩個指標可以進行對比

    • 在運行測試時消耗的資源是多少?

    • 在相同配置下,壓測工具能支持多少並發?

    也就是說,我們需要考慮壓測工具產生並發時所需要的資源成本是多高,以及可以產生多少並發。

    1. 消耗的資源

      JMeter遠比k6要更消耗資源,它往往需要多個負載生成器來生成負載,並且它需要更高的內存。在比較中,JMeter占用了760 MB的內存,而k6占用了256 MB的內存。

      In an independent test by Rafaela Azevedo, JMeter took up 760 MB of memory

      來源: Rafaela Azevedo

      In an independent test by Rafaela Azevedo, k6 took up 256 MB of memory compared to JMeter's 760 MB for the same test

      來源: Rafaela Azevedo

      k6是用go語言編寫的,go語言是一種編譯型語言,不像Java那樣需要先解釋再運行,也就是說go本身就是以性能為目標構建的。

      對於壓測工具來說,產生並發最簡單也最常見的方法是將一個虛擬用戶分配給一個內核或者一個線程,這個方案有個缺陷:當虛擬用戶正在等待響應或者執行sleep()時,該線程也被阻塞而無法處理其他工作。

      在k6中,每個虛擬用戶都在goroutine上而不是線程上運行,goroutine被Go Scheduler控制,它通過允許“工作竊取(work stealing)”和線程之間的工作交換,重新利用空閑線程並智能地分配工作,以此來提高總體性能,並顯著降低內存利用率。一個運行k6的線程不會超過100 kb,但像JMeter這樣的JVM線程默認使用1 MB內存,會給堆帶來巨大壓力。

      ——來自Comparing k6 and JMeter for load testing

    2. 產生的並發

      根據文檔來看,JMeter平均可以達到1000左右的並發,如果需要更高的並發則需要設置分布式的JMeter測試;但是如果給k6相同的資源,k6可以產生數以萬計的並發。這有幾個原因,一是因為k6所占用的內存更低,所以它可以運行更多並發並產生更高的負載,二是k6處理硬件資源的方式與其他負載工具不同,單個k6進程可以有效地利用所有CPU內核;總的來說,k6的單個實例可以產生30000-40000個並發。

  3. 該工具/平台的壓測成本有多高?

    在這里大致把壓測成本細分為

    ①學習成本:指第一次接觸該工具/平台到可以熟練使用所需要的時間

    • 安裝是否簡單
    • 有無外部依賴
    • 社區支持是否豐富

    ②操作成本:指該工具/平台的操作是否簡單,可否通過插件拓展新的功能

    • 腳本語言
    • 編寫腳本是否簡單
    • 維護是否簡單
    • 插件支持
    功能\工具 PTS(阿里雲) CPTS(華為雲) CPT(睿象雲) JMeter k6
    安裝簡單 - - - 否,需要提前安裝Java
    外部依賴 - - - Java
    費用 ☆☆☆☆☆ ☆☆ ☆☆☆☆ 免費 免費
    支持腳本 jmx、json、yaml jmx、json - jmx JavaScript
    腳本編寫方式 GUI設置、上傳腳本文件 GUI設置、上傳腳本文件 GUI設置、上傳腳本文件 GUI設置 代碼編寫
    維護難易 難,腳本冗長 中,腳本簡潔
    插件支持 - - - 插件豐富 可用插件不多
    支持分布式測試 否(可通過付費服務支持)
    測試可以監控 是,添加監聽器 否(可通過付費服務支持)
    面向人群 對測試人員友好 對測試人員友好 對測試人員友好 對測試人員友好 對開發人員友好
    社區豐富程度 ☆☆☆ ☆☆☆ ☆☆ ☆☆☆☆☆ ☆☆☆☆

不同工具/平台的優勢

不同的工具/平台肯定會有自己的優勢以及特點,下面展開闡述一下

  • 價格低到高排序:JMeter & k6、CPTS(華為雲)、PTS(阿里雲)、CPT(睿象雲)

  • 操作簡單到復雜排序:PTS(阿里雲)& CPTS(華為雲)、JMeter、k6、CPT(睿象雲)

    注:睿象雲的操作是最復雜的,雖然有UI界面,但是其設計不太人性化,例如說上傳腳本的功能,在用戶上傳腳本失敗后也不提示自己需要什么格式的腳本。而對比之下,其他的工具/平台都是你可以通過自己摸索就能完成基本操作的。

  • 社區豐富程度高到低排序:JMeter、k6、PTS(阿里雲)、CPTS(華為雲)、CPT(睿象雲)

對於壓測工具來說:

  • JMeter的特點有

    • 使用UI界面,對測試人員友好

    • 可以執行復雜的壓測場景,包括不同的協議

    • 可以為每個測試編寫完整的場景

    • 可以用一種經濟有效的方式進行分布式壓測

    • 可以利用監聽器內置預先准備好的報告

    • 有一個擁有大量文檔的成熟社區

  • k6的特點有

    • 安裝速度極快,不需要其他依賴項
    • 可以最大化性能和效率
    • 所需要的內存空間少
    • 腳本是純代碼,可以減少二義性
    • 可以進行版本控制,以便團隊可以更容易在腳本上進行協作

對於壓測平台來說:

  • 阿里雲PTS的特點是它的社區文檔豐富,但是價格較高
  • 華為雲CPTS的特點是價格較低,可滿足主要壓測需求
  • 睿象雲CPT的特點是它主要提供運維服務,壓測服務可與旗下的其他產品(如告警與監控服務)搭配使用

參考資料

Load tests: Jmeter vs K6

Comparing k6 and JMeter for load testing


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM