测试篇:ab、wrk性能测试工具
ab快速开始
1、yum -y install httpd-tools
2、测试是否安装成功:ab -V
测试示例:
ab -n 10000 -c 50 http://localhost:8080/v1/posts
- -n表示总共发送的请求数
- -c表示每次并发的请求数
详细使用
ab [ -A auth-username:password ] [ -b windowsize ] [ -B local-address ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -f protocol ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -l ] [ -m HTTP-method ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -r ] [ -s timeout ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -u PUT-file ] [ -v verbosity] [ -V ] [ -w ] [ -x -attributes ] [ -X proxy[:port] ] [ -y -attributes ] [ -z-attributes ] [ -Z ciphersuite ] [http[s]://]hostname[:port]/path
常用参数说明
-n 请求的总数,默认是1次。
-c 并发数,同一时间请求数。
-p 如果后面接的是文件,表示POST请求,文件中包含请求数据,根据数据格式,设置-T参数。
-T 设置请求头中的Content-type(针对POST/PUT),比如:application/x-www-form-urlencoded。默认是text/plain。
-w 将测试结果打印到HTML表格中。
测试结果指标说明(常用的):
Concurrency Level 并发数多少,等于-c后面的数值 Time taken for tests 测试总耗时 Complete requests 成功收到返回的数目 Failed requests 请求失败数目,可能因为网络连接,异常,请求数据长度等等 Total transferred: 整个场景中的网络传输量 HTML transferred:整个场景中的HTML内容传输量 Requests per second 每秒请求数,等于总请求数/测试总耗时 Time per request 每一个请求平均花费时间。第一个Time per request等于concurrency * timetaken * 1000 / done,第二个Time per request(mean, across all concurrency requests)等于timetaken * 1000 / done,第一个可以理解为用户平均请求等待时间,第二可以理解为服务器平均请求等待时间
wrk
安装
- 安装git,并配置git环境变量,
- 克隆源码git clone https://github.com/wg/wrk
- 进入到源码的路径下执行make进行编译
- 然后会在当前路径下生成一个可执行文件wrk
- 配置到环境变量,另外也可以cp wrk /usr/local/bin 可以把这个可执行文件拷贝到某个已在path中的路径,比如/usr/local/bin,这样就可以在任何路径直接使用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压测
get请求
wrk -t1 -c400 -d200s http://www.baidu.com
参数
- -t代表线程数
- -c代表连接数
- -d代表请求持续时间
发送post请求时需要编写一个lua文件
wrk.method = "POST" wrk.body = '{"pushtoken":"fl9Hs_5Vs","params":{"dpi":320,"device_category":"phone"}}' wrk.headers["Content-Type"] = "application/json"
post请求
wrk -t1 -c400 -d200s --script=http_post.lua http://www.baidu.com
测试结果解析