作为php后端工程师,除了实现业务需求之外,需要考虑的就是自己写的服务,在大并发下是否能正常运行了,例如在我之前文章讲到的,在并发下,数据库查询可能会造成脏读幻读等情况,导致业务不正常.
但是,在一般开发情况下,没那么多大并发情况让你测试,那该怎么办呢?
这时候,我们就可以用到apache的压力测试工具了,apache bench简称ab
安装
linux
|
1
2
3
|
yum -y install httpd-tools //centos apt-get install apache2-utils //ubuntu ab -V #查看版本 |
windows
windows只需要安装apache,就自带ab工具

简单使用
通过命令:
|
1
|
ab -c1000 -n100000 http://127.0.0.1/ |
可向目标地址发送 100000次请求,并发数为1000
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
[root@localhost ~]# ab -c100 -n10000 http://127.0.0.1:9501/This is ApacheBench, Version 2.3 <$Revision: 1430300 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking 127.0.0.1 (be patient)Completed 1000 requests //已经完成的请求数Completed 2000 requestsCompleted 3000 requestsCompleted 4000 requestsCompleted 5000 requestsCompleted 6000 requestsCompleted 7000 requestsCompleted 8000 requestsCompleted 9000 requestsCompleted 10000 requestsFinished 10000 requestsServer Software: EasySwoole #服务器名Server Hostname: 127.0.0.1 #请求的URL主机名Server Port: 9501 #端口号Document Path: / #请求路径Document Length: 44 bytes #响应数据长度Concurrency Level: 100 #并发数,我们自己设置的-c参数Time taken for tests: 0.629 seconds #请求完成时间Complete requests: 10000 #完成请求数Failed requests: 0 #错误请求数Write errors: 0 #写入错误次数Total transferred: 2050000 bytes #请求长度总和HTML transferred: 440000 bytes #html响应总长度(去除了响应头的长度)Requests per second: 15909.13 [#/sec] (mean) #每秒处理的请求数Time per request: 6.286 [ms] (mean) #用户平均请求等待时间Time per request: 0.063 [ms] (mean, across all concurrent requests) #服务器平均处理时间Transfer rate: 3184.93 [Kbytes/sec] received #带宽传输速度Connection Times (ms) #连接处理时间 min mean[+/-sd] median maxConnect: 0 1 1.3 1 51Processing: 0 5 5.6 4 56Waiting: 0 4 5.5 3 55Total: 0 6 5.8 5 57Percentage of the requests served within a certain time (ms) 50% 5 #50%的请求在5ms内返回 66% 6 75% 6 80% 7 90% 8 95% 10 98% 24 99% 36 #99%的请求在36ms内返回 100% 57 (longest request)[root@localhost ~]# |
通过ab命令测试,将会输出以上的数据,通过上面的数据可分析出服务器响应情况,并发处理能力,尤其是Requests per second 参数,它确定了服务器的秒并发能力
ab常用参数配置
命令格式
|
1
|
ab [-命令命令参数] 请求地址 |
最后的请求地址不能直接为单域名(http://www.php20.cn) 必须再增加一个/ http://www.php20.cn/
-n //本次测试发起的总请求数
-n10000 代表本次测试发起10000个请求
-c 请求并发数
-c1000 代表每次都同时发起1000次请求,也就是并发数为1000
-t 本次测试的最大秒速,默认没有限制
-t2 代表2秒后就结束测试
-s 每次请求的超时时间,默认为30
-s30 代表每个请求如果超时30秒,则直接代表该请求超时
-p 包含需要post的文件地址,和-T一起使用
例如:
新增文件post.txt:
|
1
|
name=tioncico&password=123456 |
请求:
|
1
|
ab -c100 -n10000 -p post.txt -T "application/x-www-form-urlencoded" http://127.0.0.1:9501/ |
-T 设置content-type 上面有讲到
-v 显示请求的显示详细程度,默认是只显示上面已完成请求数等
默认值为1,只显示请求的总统计
2 显示响应头,响应数据,并包含1的显示
3 显示响应状态码,并包含2的显示
4 (本人没发现和3有啥区别,听说会显示更多信息)
-C 添加cookie
-C "cookie1=cookie1,cookie2=cookie2"
-w 以html表格的元素显示ab的测试结果:

其他
通过上面的一些参数配置,我们可以通过设置cookie,去模拟用户登录情况,用于测试用户登录后的并发压力测试
也可以通过-p配置,去上传post数据,用于测试表单提交等压力测试
总的来说,ab压力测试工具只能简单测试一些请求接口,但是并不能实现复杂的测试条件判断,例如post数据异常,ab测试工具是不能够判断数据是否异常的
本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn