wrk 是一款更现代化的 http 压测工具,支持 lua 脚本,可以随心所欲的进行压力测试,相比 ab 命令,它更灵活,现在,wrk 已经成为了我压测的主要工具,而 ab 已经被逐渐抛弃。本文介绍 wrk 的基本命令以及配合 lua 脚本进行压测。
wrk 的官方网站是:https://github.com/wg/wrk ,在这里,你可以看到基本的介绍以及 下载 wrk. 下面是 wrk 的基本用法:
Usage: wrk <options> <url> Options: -c, --connections <N> Connections to keep open -d, --duration <T> Duration of test -t, --threads <N> Number of threads to use -s, --script <S> Load Lua script file -H, --header <H> Add header to request --latency Print latency statistics --timeout <T> Socket/request timeout -v, --version Print version details Numeric arguments may include a SI unit (1k, 1M, 1G) Time arguments may include a time unit (2s, 2m, 2h)
现在,我们来看一个例子:wrk -c 32 -t 16 -d 3m -s ./post.lua http://localhost:18836/api/crm/wx/order/create 这个命令将使用16 个线程,并保持 32 个打开的连接,执行3分钟的压测,同时,使用了 lua 脚本,脚本名称为 post.lua ,现在,我们看看 post.lua 吧:
wrk.method = "POST" wrk.headers["Content-Type"] = "application/json" wrk.headers["token"] = "xxxxxx" wrk.body = '{"appointTime":"2020-07-11 09:00"}'
lua 脚本如上,body 里是可以直接写 json string 的,不过需要用单引号括起来,除了 body 部分需要关心下 特殊符号外,就没什么了。
我们不难发现,wrk 更简单,但却很强大、自由。在我的实际测试中,wrk 几乎榨干了内存与cpu,而 ab 则远远达不到!