如何简单地给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或更大值可以显示警告和其他信息。

结果分析

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

里面比较关键的是几个数据:

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。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章