如何简单地给Web『施压』

Web压力测试有很多工具,这里我们介绍一个最简单易用的工具:ApacheBench。
ApacheBench是Apache自带的一个小工具,专门用于http server的benchmarking testing,可以同时模拟多个并发请求。因而利用 ApacheBench 可帮助我们在网站开发期间模拟实际上线可能的情况,利用模拟出来的数据做为调整服务器设定或程序的依据。
这个工具在Mac系统中是自带的。Windows的话可以去Apache官网下载最新的版本。下面我们详细说下它的用法。

基础命令

 ab -n 100 -c 100 http://www.baidu.com
其中-n表示请求数,-c表示并发数。上面表示对百度首页进行100次请求,每次请求是100个并发。

AB还有很多参数来满足其他场景。

-t       测试最长的时间,默认没有限制。

-r       当接收到socket错误的时候不退出

-k      启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认不启用。

-p      指定POST的数据文件,配合(-T使用)

-T      指定POST/PUT数据所使用的 Content-type 头信息,配合(-p使用)

-C      设置登录的cookie。多个cookie用逗号分割。

-v   设置输出信息的详细程度。4或更大值显示头信息,3或更大值显示响应代码(404, 200 等), 2或更大值可以显示警告和其他信息。

结果分析

执行完命令后,如果测试完成,会有一些这样的信息:

如何简单地给Web『施压』

里面比较关键的是几个数据:
Failed requests: 0 
失败的请求数量。因网络原因或服务器性能原因,发起的请求并不一定全部成功,通过该数值和Complete requests相除可以计算请求的失败率,作为测试结果的重要参考。
Requests per second: 95.68 [#/sec] (mean)
平均每秒请求数,即吞吐率,大家最关心的指标之一,相当于负载中的每秒事务数,后面括号中的 mean 表示这是一个平均值。
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即:
Request per second = Complete requests / Time taken for tests
Time per request: 104.520 [ms] (mean)
每次并发请求平均耗时,即用户平均请求等待时间,大家最关心的指标之二,相当于负载中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值。
计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即:
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
Time per request: 10.452 [ms] (mean, across all concurrent requests)
平均每个请求的耗时,即服务器平均请求处理时间,大家最关心的指标之三。
计算公式:处理完成所有请求数所花费的时间 / 总请求数,即:
Time per request(across all concurrent requests)= Time taken for tests / Complete requests
 
最后是每个请求处理时间的分布情况,主要看90%的处理时间。

模拟请求

如果要压测数据接口,可以用-p和-T两个参数来模拟请求:

以x-www-form-urlencoded形式发送

ab -n 1000 -c 100 -p post.txt -T 'application/x-www-form-urlencoded' http://www.test.com/test/api

以multipart/form-data形式发送

ab -n 1000 -c 100 -p post.txt -T 'multipart/form-data; boundary=--WebKitFormBoundaryE19zNvXGzXaLvS5C' http://www.test.com/test/api

其中post.txt文件内容为post需要的参数,例如 name=xiaoming&age=28

模拟登录

有些接口需要登录鉴权时,需要用到-C参数设置cookie来模拟登录。先用账户和密码登录,用开发者工具找到标识这个会话的Cookie值记下来,然后通过设置-C参数来请求:

ab -n 100 -c 100 -C "uin=o0369491785;skey=@MC7dyF5lu;" http://www.test.com/api

注意事项

需要注意的是,AB命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。

总结:

AB工具小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。因此它可以用作简单的压力测试和临时紧急任务。图形化的工具推荐jmeter或者LoadRunner。

发表评论