使用wrk测试api性能
Restful Api 压力测试有很多专业工具,但那些工具对于开发人员说过于复杂了(我觉得那些是给测试人员用的)。wrk 是一个简单的多线程的基于命令行的测试工具,它的一个很好的特性是用很少的线程压出很大的并发,能快速的验证接口的性能,比较适合开发场景。下面是使用过程记录。需要注意的是 wrk 只能运行在 linux 平台。
安装wrk
需要从github拉代码并编译
git clone https://github.com/wg/wrk.git |
编译成功后,会在当前目录中生成可执行的wrk。将其copy到bin目录。
sudo cp wrk /usr/local/bin |
使用wrk
简单使用
命令
wrk -t4 -c10 -d10s -T3s --latency http://www.lefer.cn
- -t4 开启四个线程
- -c10 保持10个连接
- -d10s 持续测试10秒
- -T3s 超时设置为3秒
- –latency 统计延迟分布
执行结果
[web@localhost ~]$ wrk -t4 -c10 -d10s -T3s --latency http://www.lefer.cn
Running 10s test @ http://www.lefer.cn
4 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 19.16ms 12.69ms 237.07ms 99.18%
Req/Sec 109.24 11.49 121.00 89.50%
Latency Distribution
50% 17.95ms
75% 18.43ms
90% 19.35ms
99% 29.69ms
4372 requests in 10.05s, 1.59MB read
Requests/sec: 434.84
Transfer/sec: 161.79KB第五行是延迟统计:平均延迟,标准差,最大延迟,正负一个标准差的结果占比
第六行是线程请求次数统计:每个线程的平均请求次数,标准差,最大请求次数,正负一个标准差的结果占比
第八到十一行是延迟分布统计:50%的请求延迟在多少以内,75的请求延迟在多少以内,依次类推
第十二行是总请求数
正常使用
上面的例子太简陋了,下面是一个正常的post
请求,并以json
格式传递request body
数据的例子。
编写lua脚本
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json;charset=UTF-8"
wrk.body = '{ "Request": { "Head": { "Version": "1.1", "TransferType": "", "Callback": "", "TranCode": "PV0602", "LicId": "sdssdsds", "ContentType": "text/json", "ContentEncoding": "", "OrgId": "123321", "AppId": "HIS", "MessageId": "123221212121", "AppType": "PC", "SecurityPolicy": "AES", "SecurityContent": "", "Timestamp": "2017-03-23 14:22:49.727" } } } '这里需要注意的是
wrk.body
的数据不能换行。执行命令
wrk -t1 -c1 -d10s -T3s --script=bisr.lua --latency http://localhost:8000/v1/bisr
事实上可以在lua脚本里做很多事情,可以参考GitHub上提供的脚本示例。
END
欢迎留言讨论
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeFer!
评论