一、前言
- 開發接口以後,對性能有要求的 接口,需要做 性能壓力測試
- 常見免費的如:經典的 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
2. hey: HTTP load generator, ab replacement
- GO語言開發,適用於 Linux、Mac、Windows 平台
- 性能高,跨平台,報表顯示慢請求原因,最近發版是 2020年
- 參數:c 併發數、z 測試時長
hey -c 50 -z 5s http://www.a.com/a
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.jsimport 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 }); }
5. siege
- C語言開發,適用於 Linux 平台
- 優劣:性能較低,不跨平台,報表沒有顯示慢請求原因
- 參數:c 併發數、t 測試時長(末尾單位必須大寫)、b 表示 壓測模式,請求不延遲(BENCHMARK: no delays between requests.)
siege -c 200 -t 10S -b http://www.a.com/a
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
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/ ,其他平台需要審核更新慢一些。