接口壓力測試工具之go-wrk


  go-wrk 是一個用Go語言實現的輕量級的http基准測試工具,類似於wrk,本文將簡單介紹一下如何使用go-wrk實現接口的性能(壓力)測試。

github地址:https://github.com/tsliwowicz/go-wrk

 

安裝:

go get github.com/tsliwowicz/go-wrk 

 

使用:

Usage: go-wrk <options> <url>
   Options:
    -H      header line, joined with ';' (Default )
    -M      HTTP method (Default GET)
    -T      Socket/request timeout in ms (Default 1000)
    -body      request body string or @filename (Default )
    -c      Number of goroutines to use (concurrent connections) (Default 10)  // 啟動的寫成數量, 也就是並發數量
    -ca      CA file to verify peer against (SSL/TLS) (Default )
    -cert      CA certificate file to verify peer against (SSL/TLS) (Default )
    -d      Duration of test in seconds (Default 10)  // 壓測持續時長
    -f      Playback file name (Default <empty>)
    -help      Print help (Default false)
    -host      Host Header (Default )
    -http      Use HTTP/2 (Default true)
    -key      Private key file name (SSL/TLS (Default )
    -no-c      Disable Compression - Prevents sending the "Accept-Encoding: gzip" header (Default false)
    -no-ka      Disable KeepAlive - prevents re-use of TCP connections between different HTTP requests (Default false)
    -redir      Allow Redirects (Default false)
    -v      Print version details (Default false)

 

./go-wrk -c 80 -d 5  http://192.168.1.118:8080/json

持續5秒中, 開啟每秒80個並發請求

返回結果:
Running 10s test @ http://192.168.1.118:8080/json  
  80 goroutine(s) running concurrently  
   142470 requests in 4.949028953s, 19.57MB read  
     Requests/sec:        28787.47  
     Transfer/sec:        3.95MB  
     Avg Req Time:        0.0347ms  
     Fastest Request:    0.0340ms  
     Slowest Request:    0.0421ms  
     Number of Errors:    0  


還有其他參數: -n 10000 就是模擬1w次請求

 

如果你是Mac的話,可以使用wrk

github地址:https://github.com/wg/wrk

wrk是一個一個簡單的 http benchmark 工具, 能做很多基本的 http 性能測試。
wrk 的一個很好的特性就是能用很少的線程壓出很大的並發量。
wrk支持大多數類UNIX系統,不支持windows。

[安裝]

# mac

brew install wrk


# linux
git clone https://github.com/wg/wrk.git
cd wrk
make

成功后再目錄下有一個wrk文件
使用方法: wrk <選項> <被測HTTP服務的URL>                            
Options:
-c, --connections <N> 跟服務器建立並保持的TCP連接數量
-d, --duration <T> 壓測時間
-t, --threads <N> 使用多少個線程進行壓測

-s, --script <S> 指定Lua腳本路徑
-H, --header <H> 為每一個HTTP請求添加HTTP頭
--latency 在壓測結束后,打印延遲統計信息
--timeout <T> 超時時間
-v, --version 打印正在使用的wrk的詳細版本信息

<N>代表數字參數,支持國際單位 (1k, 1M, 1G)
<T>代表時間參數,支持時間單位 (2s, 2m, 2h)


[使用]
wrk -t12 -c100 -d30s http://192.168.31.107

-t12 為模擬12個用戶線程 -c100模擬100個連接

 12 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.25s   453.24ms   1.97s    65.31%
    Req/Sec    13.11     12.15    60.00     62.57%
  1020 requests in 30.09s, 5.04MB read
  Socket errors: connect 0, read 0, write 0, timeout 971
Requests/sec:     33.90
Transfer/sec:    171.43KB

  分析:

項目 名稱 說明
Avg 平均值 每次測試的平均值
Stdev 標准偏差 結果的離散程度,越高說明越不穩定
Max 最大值 最大的一次結果
+/- Stdev 正負一個標准差占比 結果的離散程度,越大越不穩定
實例:

 

當然除了這兩個工具之外,也可以使用傳統的ab工具進行測試
使用示例:
\ab.exe -n 9 -c 3 "http://localhost:8888/v2/customer/user/lists?company_id=104"
    -n: 總請求數
    -c: 並發數量

 

注意點:

1.wrk並不能指定總的請求數量, 使用ab可以

2.ab好像並不是真正的並發測試, wrk是真正同時開啟多個協程並發請求

 


免責聲明!

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



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