一:ab测试:

源码包下载地址:
1、ab简介:
ab测试时apache软件自带的压力测试工具,全称为apachebench;
ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一个URL地址进行访问。它的测试目标是基于URL的,因此它既可以用来测试apache的负载压力,也可以测试nginx、tomcat、lighthttp、IIS等其他服务器的压力。ab命令对发出负载的计算机要求很低,它既不会占用很高的CPU,也不会占用很多内存。但却会目标服务器造成巨大的负载,其原理类似CC共计。自己测试使用也需要注意,否则一次上太多的负载,可能造成目标服务器资源耗尽,严重时甚至导致死机。

2、ab特点:
统计效果上ab表现优异,ab的优点是统计的结果可读性更强更能帮助人分析,至于一些参数的差异,主要看源代码实现了,但误差在可接受的范围内,作为压力测试,我们需要的是服务器面对压力的一个大致的能力和随着压力增大后服务器行的变化趋势,所以不支持可变参数的ab在服务器性能变化的测试上并不是很适合。
ab不需要写配置文件,只需要几个命令行参数就能执行压测,使用于接口简单业务逻辑简单的web服务测试。

3、ab的安装:
ab的安装非常简单,如果是源码安装apache的话,那就更简单了。apache安装完毕之后,ab命令存放在apache安装目录的bin目录下。如果apache是yum的RPM包方式安装的话,ab命令默认存放在/usr/bin目录下。
如果不想安装apache但是又想使用ab命令的话,我们可以直接安装apache的工具包http-tools(/usr/bin下)。
可以使用ab -V查看ab测试软件版本,也可查看ab是否安装成功。

4、ab常用参数:
-n    在测试回话中所执行的请求个数。默认时,仅执行一个请求。
-c    一次产生的请求个数。默认时一次一个。
-t    测试所进行的最大秒数。其内部隐含值为-n 50000,它可以使对服务器的测试限制在一个固定的总时间内。默认时没有时间限制。
-p    对一个中专代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即是否发送了401认证需求代码),此字符串都会被发送。
-T POST数据所使用的Content-type头信息。
-v设置显示信息的详细程度-4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。
-V显示版本号并退出。
-w以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i执行HEAD请求,而不是GET。
-x设置<table>属性的字符串。
-X对请求使用代理服务器。
-y设置<tr>属性的字符串。
-z设置<td>属性的字符串。
-C对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。
-H对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,"Accept-Encoding:zip/zop;8bit")。
-A对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
-h显示使用方法。
-d不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
-e产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
-g把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
-i执行HEAD请求,而不是GET。
-k启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
-q如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。

5、ab结果解析:
使用ab命令测试的结果,可以参考其中的中文解释:
复制代码

Document Path:          /  ###请求的资源
Document Length:        50679 bytes  ###文档返回的长度,不包括相应头


Concurrency Level:      3000   ###并发个数
Time taken for tests:   30.449 seconds   ###总请求时间
Complete requests:      3000     ###总请求数
Failed requests:        0     ###失败的请求数
Write errors:           0
Total transferred:      152745000 bytes
HTML transferred:       152037000 bytes
Requests per second:    98.52 [#/sec] (mean)      ###平均每秒的请求数
Time per request:       30449.217 [ms] (mean)     ###平均每个请求消耗的时间
Time per request:       10.150 [ms] (mean, across all concurrent requests)  ###上面的请求除以并发数
Transfer rate:          4898.81 [Kbytes/sec] received   ###传输速率


Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2   54  27.1     55      98
Processing:    51 8452 5196.8   7748   30361
Waiting:       50 6539 5432.8   6451   30064
Total:         54 8506 5210.5   7778   30436


Percentage of the requests served within a certain time (ms)
  50%   7778   ###50%的请求都在7778Ms内完成
  66%  11059
  75%  11888
  80%  12207
  90%  13806
  95%  18520
  98%  24232
  99%  24559
 100%  30436 (longest request)

复制代码

对压力测试的结果重点关注吞吐率(Requests per second)、用户平均请求等待时间(Time per request)指标:

1、吞吐率(Requests per second):

服务器并发处理能力的量化描述,单位是reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。

记住:吞吐率是基于并发用户数的。这句话代表了两个含义:

a、吞吐率和并发用户数相关

b、不同的并发用户数下,吞吐率一般是不同的

计算公式:总请求数/处理完成这些请求数所花费的时间,即

Request per second=Complete requests/Time taken for tests

必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。

2、用户平均请求等待时间(Time per request):

计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:

Time per request=Time taken for tests/(Complete requests/Concurrency Level)

3、服务器平均请求等待时间(Time per request:across all concurrent requests):

计算公式:处理完成所有请求数所花费的时间/总请求数,即:

Time taken for/testsComplete requests

可以看到,它是吞吐率的倒数。

同时,它也等于用户平均请求等待时间/并发用户数,即

Time per request/Concurrency Level。


二、http_load:

下载地址:    http://www.acme.com/software/http_load/
1、http_load简介:
http_load是基于linux平台的一种性能测试工具,以并行修复的方式运行,用以测试web服务器的吞吐量与负载,测试web页面的性能。http_load并行运行多个http获取,测试吞吐量 一个web服务器。 然而不像大多数这样的测试客户端,它运行在一个单一的过程中, 所以它不拘泥客户端机器。 它可以配置https取回。

2、http_load特点:
优点:    (1)http_load是基于命令行的,命令简单,易于上手。
        (2)小巧轻便,解压缩之后不到100K。
        (3)开源,免费。
缺点:    (1)仅适合用于web页面的性能测试,不适用于访问数据库。
        (2)测试结果分析有限。
        (3)平台依赖Linux。

3、http_load的安装:
http://www.acme.com/software/http_load/http_load-09Mar2016.tar.gz
下载http_load后直接解压,之后进入解压目录运行make && make install即可。

4、http_load的参数:
-fetches:总计要访问url的次数,无论成功失败都记为一次,到达数量后程序退出。
-rate:每秒访问的次数(即访问频率),控制性能测试的速度。
-seconds:工具运行的时间,到达seconds设置的时间后程序退出。
-parallel:最大并发访问的数目,控制性能测试的速度。
-verbose:使用该选项后,每60秒会在屏幕上打印一次当前测试的进度信息。
-jitter:该选项必须与-rate同时使用,表示实际的访问频率会在rate设置的值上下随机波动10%的幅度。
-checksum:由于要访问某个url很多次,为了保证每次访问时收到的服务器回包内容都一样,可以采用checksum检查,不一致会在屏幕上输出错误信息。
-cipher:使用SSL层的时候会用到此参数(url是https开头),使用特定的密码集。
-timeout:设置超时时间,以秒为单位,默认为60秒。每超过一次则记为一次超时的连接
-proxy:设置web代理,格式为-proxy host:port
-throttle:限流模式,限制每秒收到的数据量,单位bytes/sec。该模式下默认限制为3360bytes/sec。
-sip:指定一个source ip文件,该文件每一行都是ip+port的形式。
需要特别说明的是,-parallel参数和-rate参数中必须有一个,用于指定发请求包的方式;-fetches和-seconds两个参数必须有一个,用于指定程序的终止条件。
开始测试:
cat urllist.txt
http://127.0.0.1/index.jsp
./http_load -p 1000 -s 10 urllist.txt

5、http_load结果分析:
41 fetches, 1020 max parallel, 851898 bytes, in 10.0008 seconds
# 一共请求连接41次,最大并发线程1020个,持续10.0008秒内,总传输速率为 851898bytes
20778 mean bytes/connection
#每次请求连接平均数据量(851898÷41)
4.09969 fetches/sec, 85183.3 bytes/sec
#btyes/毫秒
msecs/connect: 264.607 mean, 269.482 max, 262.187 min
#每次连接平均响应时间:264.607毫秒,最大时间:269.482毫秒,最小时间:262.187毫秒
msecs/first-response: 1949.27 mean, 5394.21 max, 380.501 min
#每次连接平均返回时间:1949.27毫秒,最大时间:5394.21毫秒,最小时间:380.501毫秒
HTTP response codes:
code 200 -- 41
#HTTP返回码:200 ,一共41次。
fetches/sec、msecs/connect数值,即服务器每秒能够响应的查询次数的数值来衡量性能,当然,单纯数值判断并不准确,还要参考CPU、内存的等消耗综合考虑。

三、webbench

1、webbench简介:
webbench是一款知名的网站压力测试工具,它是由Lionbridge公司开发。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行情况。最多可以模拟3万个并发连接去测试网站的负载能力。

2、webbench特点:
部署简单,动静态均可测试,适用于小型网站压力测试。

3、webbench安装:
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
下载webbench后直接解压,之后进入解压目录运行make && make install即可。

4、webbench参数:
   -f|--force                不等待服务器应答
  -r|--reload                生新发送请求
  -t|--time <sec>            运行时间
  -p|--proxy <server:port>        使用代理服务器
  -c|--clients <n>            请求数
  -9|--http09                使用http/0.9模式
  -1|--http10                使用http/1.0模式
  -2|--http11                使用http/1.1模式
  --get                使用get的模式请求
  --head                使用head模式请求
  --options                使用options模式请求
  --trace                使用trace模式请求
  -?|-h|--help                帮助
   -V|--version                            查看版本号

5、webbench结果解析:
webbench -c 600 -t 10 http://192.168.200.101:8080/index.jsp
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.200.101:8080/index.jsp
600 clients, running 10 sec.

Speed=104538 pages/min, 986141 bytes/sec.
Requests: 17423 susceed, 0 failed.
每分钟相应请求数: 104538 pages/min ;
每秒钟传输数据量: 986141 bytes/sec ;
请求成功17423次,失败0次。

四、siege:

1、siege简介:
siege是一款用于WEB开发,评估应用在压力下承受能力的压力测试和评测工具。可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。siege是一个多线程http负载测试和基准测试工具,完全使用C语言实现,可以对http和FTP服务器进行负载和性能测试。通过使用siege提供的功能,可以很容易的制定测试计划:包括规定使用并发用户数、重复数量,从而可以模拟在服务器、网络或者其他对象上附加负载以测试他们提供服务的抗压能力,方便的测试服务器性能。

2、siege特点:
siege是由多线程实现的同步压测工具,它实现的是模拟n个用户不停的访问某个url的场景。由于多线程开销会比多进程小一些,因此该压测工具比多进程的压测工具在系统开销上会好很多。程序提供了到时停止和到量停止两种压测方法,支持同时压测多个url,也能够随机选取url进行压测。
siege对于压力控制并不够精准,只能粗略的根据并发用户数去控制一下压力大小。
在多次的web测试实践中,发现siege只输出了测试结果。存储了概要测试的测试结果,没有详细的测试过程存储。无法分析在何时出现了问题,无法详细了解测试过程的细节问题,使得无法进一步对web的性能进行分析和评价。

3、siege安装:
wget http://download.joedog.org/siege/siege-latest.tar.gz
下载siege源码包,解压后进入解压目录执行
./configure --prefix=/usr/local/siege --mandir=/usr/local/man --with-ssl=/usr/local/ssl  && make && make install


4、siege参数:
查看配置信息:/usr/local/siege/bin/siege -C
-V, --version    打印版本信息
-h, --help    打印帮助信息
-C, --config    显示配置信息。
-v, --verbose    打印冗余配置信息。
-g, --get    显示HTTP交易。
-c, --concurrent=NUM    设置并发用户数

-u, --url="URL"    设置被测Web的URL
-i, --internet    用户模拟、随机访问URL
-b, --benchmark .    基准测试。

-t, --time=NUM    设置测试时间。
-r, --reps=NUM    设置测试次数
-f, --file=FILE    更改配置文件存档
-R, --rc=FILE    更改siegerc文件和环境变量

-l, --log    测试日志
-m, --mark="text"    标记测试日志
-d, --delay=NUM    设置时间延迟
-H, --header="text"    增加测试头文件
-A, --user-agent="text"
设置代理测试请求



5、siege结果解析:
Transactions:    访问次数
Availability:    成功次数
Elapsed time:    测试用时
Data transferred:    测试传输数据量
Response time:    平均响应时间
Transaction rate:    每秒事务处理量
Throughput:    吞吐率
Concurrency:    并发用户数

Successful transactions:    成功传输次数
Failed transactions:    失败传输次数
Longest transaction:    最长响应时间
Shortest transaction:    最短响应时间

50个用户(每次并发量)重复100次 共产生 50*100 个请求
    /usr/local/siege/bin/siege -c 50 -r 100 www.baidu.com

    50个用户 重复100次 发送POST参数 (注意引号)
    /usr/local/siege/bin/siege -c 50 -r 100  "https://www.abc.com/a.php POST name=zhangsan"

    50个用户 重复100次 发送POST参数(从文件中读取)
    /usr/local/siege/bin/siege -c 50 -r 100  "https://www.abc.com/a.php POST < /root/ab_test/post.xml"