1、介绍
wrk是一个针对Http(s)协议的测试工具m它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器进行压测,在github上的star足足有3k。
2、编译安装
依次执行以下命令即可
Ubuntu/Debian
keyboard_arrow_downsudo apt-get install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
CentOS
keyboard_arrow_downsudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
如果不想每次使用都进入到wrk的目录运行以下命令即可
sudo cp wrk /usr/local/bin
完成后,来检查一下是否安装成功

3、使用
简单例子(使用 wrk 对 mashiro.pub 发起压测,线程为4,并发360,持续10秒。)
wrk -t4 -c360 -d10s https://mashiro.pub

可以看到,对本网站造成了40MB的暴击,平均每秒发起163个请求,平均的流量为4.03MB
4、拓展
在官方的github上,可以了解到wrk支持Lua脚本进行复杂的压测,wrk 支持在三个阶段对压测进行个性化,分别是启动阶段、运行阶段和结束阶段。每个测试线程,都拥有独立的Lua 运行环境。
启动阶段:
function setup(thread)
在脚本文件中实现 setup 方法,wrk 就会在测试线程已经初始化,但还没有启动的时候调用该方法。wrk会为每一个测试线程调用一次 setup 方法,并传入代表测试线程的对象 thread 作为参数。setup 方法中可操作该 thread 对象,获取信息、存储信息、甚至关闭该线程。
thread.addr - get or set the thread's server address
thread:get(name) - get the value of a global in the thread's env
thread:set(name, value) - set the value of a global in the thread's env
thread:stop() - stop the thread
运行阶段:
function init(args)
function delay()
function request()
function response(status, headers, body)
init(args)
: 由测试线程调用,只会在进入运行阶段时,调用一次。支持从启动 wrk 的命令中,获取命令行参数;delay()
: 在每次发送请求之前调用,如果需要定制延迟时间,可以在这个方法中设置;request()
: 用来生成请求, 每一次请求都会调用该方法,所以注意不要在该方法中做耗时的操作;response(status, headers, body)
: 在每次收到一个响应时被调用,为提升性能,如果没有定义该方法,那么wrk不会解析headers
和body
;
结束阶段:
function done(summary, latency, requests)
done() 方法在整个测试过程中只会被调用一次,我们可以从给定的参数中获取压测结果。
5、咕咕咕
由于篇幅限制(才怪 剩下的内容我会放在其他的文章
发表回复