测试篇: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

安装

  1. 安装git,并配置git环境变量,
  2. 克隆源码git clone https://github.com/wg/wrk
  3. 进入到源码的路径下执行make进行编译
  4. 然后会在当前路径下生成一个可执行文件wrk
  5. 配置到环境变量,另外也可以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

测试结果解析

原文地址:https://www.cnblogs.com/-wenli/p/13751440.html