動態

詳情 返回 返回

HTTP接口性能壓力測試 - 動態 詳情

一、前言

  • 開發接口以後,對性能有要求的 接口,需要做 性能壓力測試
  • 常見免費的如:經典的 ab,性能不太好的 jmeter、siege(有時候都懷疑程序性能不行了),另介紹 hey、k6、vegeta、wrk

二、方案

1. ab - Apache HTTP server benchmarking tool

  • C語言開發,適用於 Linux 平台
  • 優劣:可能因為在 WSL裏面運行,性能表現不太好,容易報錯,apr_pollset_poll: The timeout specified has expired (70007)
  • 參數:c 併發數、n 總請求數、k 表示 開啓 Keep Alive 特性、r 表示 忽略 socket receive errors
  • ab -c 100 -k -r -n 10000 http://www.a.com/a
    http-bench-ab.png

2. hey: HTTP load generator, ab replacement

  • GO語言開發,適用於 Linux、Mac、Windows 平台
  • 性能高,跨平台,報表顯示慢請求原因,最近發版是 2020年
  • 參數:c 併發數、z 測試時長
  • hey -c 50 -z 5s http://www.a.com/a
    http-bench-hey.png

3. jmeter

  • Java語言開發,適用於 多 平台
  • 優劣:性能較差,跨平台

4. k6:load testing tool, using Go and JS

  • GO語言開發,適用於 Linux、Mac、Windows 平台
  • 優劣:性能較高,跨平台,支持 請求、統計結果 校驗,非常適合開發人員(複製略作調整即可)做接口自動化測試
  • 參數:u 併發數、d 測試時長
  • 需用 JavaScript 腳本 定義測試內容(如保存為 k6.js),k6 run -u 200 -d 10s k6.js

    import http from "k6/http";
    import { check, sleep } from "k6";
    // Test configuration
    export const options = {
    };
    
    export default function () {
    let res = http.get("url");
    // check(res, { "status was 200": (r) => r.status == 200 });
    }

http-bench-k6.png

5. siege

  • C語言開發,適用於 Linux 平台
  • 優劣:性能較低,不跨平台,報表沒有顯示慢請求原因
  • 參數:c 併發數、t 測試時長(末尾單位必須大寫)、b 表示 壓測模式,請求不延遲(BENCHMARK: no delays between requests.)
  • siege -c 200 -t 10S -b http://www.a.com/a
    http-bench-siege.png

6. vegeta

  • GO語言開發,適用於 Linux、Mac、Windows 等5平台
  • 優劣:性能高,跨平台,報表沒有顯示慢請求原因
  • 參數:rate 指定併發,默認每秒 50個請求,0 表示不限制(用於測試接口極限性能,需和 max-workers 參數一起使用)
  • 另 workers 參數 指定 初始 workers 數量,默認為 10,設置和 max-workers 相等可避免測試過程中創建連接耗時
  • echo "GET http://www.a.com/a" | vegeta attack -rate 0 -workers 200 -max-workers 200 -duration 10s | vegeta report
    http-bench-vegeta.png

7. wrk

  • C語言開發,適用於 Linux 平台
  • 優劣:性能超高,不跨平台,最近發版是 2021年2月,另WSL裏面運行卡住停不下來
  • t 線程數(不宜過大,避免太多上下文切換,CPU核心數 1到3倍左右),c 連接數,d 測試時長(末尾 s 表示秒),latency 輸出延遲統計
  • wrk -t12 -c100 -d10s --latency http://www.a.com/a

三、總結

Open source load testing tool review 2020 (k6.io)

工具 RPS 開發語言 支持平台 備註
ab 1929 C Linux 可能因為在 WSL裏面運行,性能不太好,容易報錯
hey 12000 GO 3平台 性能高,跨平台,報表顯示慢請求原因,最近發版是2020年
jmeter - Java 多平台 性能低,跨平台
k6 10000 GO 3平台 性能較高,跨平台,支持 請求、統計結果 校驗,更適合自動化測試
siege 2253 C Linux 性能低,不跨平台,報表沒有顯示慢請求原因
vegeta 10400 GO 5平台 性能高,跨平台,報表沒有顯示慢請求原因
wrk - C Linux 性能超高,不跨平台,最近發版是 2021年2月,另WSL裏面運行沒有效果

本文遵守【CC BY-NC】協議,轉載請保留原文出處及本版權聲明,否則將追究法律責任。
本文首先發佈於 https://www.890808.xyz/ ,其他平台需要審核更新慢一些。

javalover123

user avatar u_13529088 頭像 seazhan 頭像 AmbitionGarden 頭像 lenglingx 頭像 chuanghongdengdeqingwa_eoxet2 頭像 jkdataapi 頭像 lenve 頭像 flydean 頭像 dengjijie 頭像 swifter 頭像 aishang 頭像 heerduo 頭像
點贊 31 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.