接口压力测试工具之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是真正同时开启多个协程并发请求