压力测试概念:
1、吞吐率(Requests per second)Requests per second吞吐率越高,服务器性能越好。
概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests
2、并发连接数(The number of concurrent connections)
概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
3、并发用户数(The number of concurrent users,Concurrency Level)
概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
4、用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
5、服务器平均请求等待时间(Time per request: across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即
Time per request / Concurrency Level
启用方式:
在apache的bin目录下执行 ab命令 例:ab -c 10 -n 100 http://www.baidu.com
参数:
常用参数:
--help 查看帮助
-n即requests,用于指定压力测试总共的执行次数。
-c即concurrency,用于指定压力测试的并发数。
-t即timelimit,等待响应的最大时间(单位:秒)。
-b即windowsize,TCP发送/接收的缓冲大小(单位:字节)。
-p即postfile,指定post参数的文件,如果文件与ab不在同一目录,需要指定路径(post参数以name=chang&password=11111保存)
-u即putfile,发送PUT请求时需要上传的文件
-T即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。一般与-p一起用
-w以HTML表格形式打印结果。
-A添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。
-X指定使用的代理服务器和端口号,例如:"126.10.10.3:88"。
-V打印版本号并退出。
-P添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。
-v (一般取值为4)会把每个请求测试返回的状态打印出来
-i使用HEAD请求代替GET请求。
-x插入字符串作为table标签的属性。
-y插入字符串作为tr标签的属性。
-z插入字符串作为td标签的属性。
-C添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。如果网站需要登录可以使用,如果只用到一个Cookie:ab -n 100 -C Key1=Value1 如果需要多个Cookie,就直接设Header吧:ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2”
-H添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。
-k使用HTTP的KeepAlive特性。
-d不显示百分比。
-S不显示预估和警告信息。
-g输出结果信息到gnuplot格式的文件中。
-e输出结果信息到CSV格式的文件中。
-r指定接收到错误信息时不退出程序。
-h显示用法信息,其实就是ab -help。
示例:ab -c 10 -n 100 http://www.baidu.com
分析上面的压测结果:
Server Software:表示被测试的Web服务器软件名称。
Server Hostname:表示请求的URL主机名。
Server Port:表示被测试的Web服务器软件的监听端口。
Document Path:表示请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型。
Document Length:表示HTTP响应数据的正文长度。
Concurrency Level:表示并发用户数,这是我们设置的参数之一。
Time taken for tests:表示所有这些请求被处理完成所花费的总时间。
Complete requests:表示总请求数量,这是我们设置的参数之一。
Failed requests:表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况。如果接收到的HTTP响应数据的头信息中含有2XX以外的状态码,则会在测试结果中显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算在失败的请求中。
(Connect: 0, Receive: 0, Length: 5, Exceptions: 0)
注:只要出现 Failed requests 就会多出现一行要求失败的各原因的数据统计,分别有 Connect, Length,与 Exception ,分别代表的意义为:
1、Connect 无法送出要求、目标主机连接失败、要求的过程中联机被中断
2、Length 响应的内容长度不一致 ( 以 Content-Length 标头值为判断依据 )
3、Exception 发生无法预期的错误
注:Length 这个类别是因为受测网站的首页是动态的内容,当第一次发出 HTTP request 与后续发出的 HTTP request 所得到回应的 HTML 长度都是不同大小的 ( 每次回应的 Content-Length 大小不一致 ),才会引发 Failed requests 的 Length 问题的失败,因此这类 Length 不一致的失败在进行「动态网页」压力测试时是合理的,可以不予理会。
Total transferred:表示所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。注意这里不包括HTTP请求数据的长度,仅仅为web服务器流向用户PC的应用层数据总长度。
HTML transferred:表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度。
Requests per second:吞吐率,计算公式:Complete requests/Time taken for tests
Time per request:用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。
Time per requet(across all concurrent request):服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level。
Transfer rate:表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。
Percentage of requests served within a certain time(ms):这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,90%的请求处理时间都不超过30ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。
概念:
QPS: 每秒钟处理完请求的次数;注意这里是处理完。具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加1,1秒后counter=QPS。
TPS:每秒钟处理完的事务次数,一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多。
并发量:系统能同时处理的请求数
RT:响应时间,处理一次请求所需要的平均处理时间
计算关系:
QPS = 并发量 / 平均响应时间
并发量 = QPS * 平均响应时间
post测试:
新建一个文件,里面放入POST参数。注意,这个承载POST参数的文件,不依赖于后缀名。可跨平台(比如 Linux 下用 vi 建立的文件,win下也可以用)
POST文本内容如下:
name=chang&password=11111
我把这个文本保存成 postdata.txt ,放到了win机器下的 F盘 下。
使用ab命令
ab -n 1 -c 1 -p f:/postdata.txt -T application/x-www-form-urlencoded "http://127.0.0.1/abpost"
文章来源于:https://blog.csdn.net/ZYC88888/article/details/85051946
http://www.mamicode.com/info-detail-409587.html
https://www.cnblogs.com/jingmin/p/9100747.html
http://www.mamicode.com/info-detail-409587.html
https://blog.csdn.net/duzilonglove/article/details/79002537