性能测试下的AB测试实战

现在大家都在学习自动化和性能,在进行性能测试的时候压力测试肯定是其中不可或缺的一环了。下面我们就来看看怎么用AB进行性能测试。

性能测试下的AB测试实战_第1张图片


​AB 的全称是 ApacheBench , 是 Apache 附带的一个小工具 , 专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求。前段时间看到公司的开发人员也在用它作一些测试,看起来也不错,很简单,也很容易使用,所以今天花一点时间看了一下。

通过下面的步骤,相信大家可以更容易理解这个工具的使用。

AB压力测试功能的安装

 Unix和Mac安装

如果用的是*nix操作系统,则会有很多安装Apache的选项。可以通过ports、yum、apt-get安装或只是下载源文件并安装。显示了安装命令的完整列表。

使用存储库来安装Apache Web服务器

存 储 库命令

yumyum install apache2

portssudo port install apache2

apt-getapt-get install apache2

Mac用户可以在终端上使用MacPorts并执行所示的基于ports的命令。

Windows安装

Windows用户可在浏览器中打开http://httpd.apache.org/。加载此页之后,单击页面左侧的"Download from a mirror"(从镜像下载)链接,找到适合你的系统的相应下载程序包,即Windows 32 Binary版本,然后下载。编写本书时,最新的Apache版本为2.2.X。

当程序包下载完之后,就可以通过运行安装向导在系统的任意位置上安装该软件。我将Apache安装在默认位置C:\Program Files\Apache Software Foundation,但也可以安装在系统的任意位置。此处所选择的位置就是APACHE_HOME引用所指向的位置。

现在,打开目录\Apache2.2\bin。

AB压力测试的常用参数

-n在测试会话中所执行的请求个数。默认时,仅执行一个请求。

-c一次产生的请求个数。默认是一次一个。

-t 测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。

-p包含了需要POST的数据的文件。

-P对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。

-T POST数据所使用的Content-type头信息。

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

-V显示版本号并退出。

-i执行HEAD请求,而不是GET。

-X对请求使用代理服务器。

-C对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。

-H对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,"Accept-Encoding:zip/zop;8bit")。

-A对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。

-h显示使用方法。

-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标记可以抑制这些信息。

AB压力测试实例

通常AB测试只用到-c、-n两个参数,假如我们本地有个a.php的文件,则可执行如下命令: ab -n 1000 -c 100 http://127.0.0.1/a.php

此命令表示模拟每次执行100个请求,总共执行1000次,也可以表示为100人同时在线,每人同一时间发起一个请求,一共发送10次请求。效果如下图:

性能测试下的AB测试实战_第2张图片


可以看到每次请求的数量为100个,请求了10次,总请求为1000个。 Document Path:请求的文件 Requests per second:每秒钟可以接收多少个请求。 Time per request:用户平均请求等待时间 Time per request(across all concurrent requests):服务器平均请求等待时间 Transfer rate:平均每秒网络上的流量,吞吐量,越大抗压越强

Connection Times:网络上消耗的时间的分解

分别有连接、处理、等待的值

Percentage Of The Requests Served Within A Certain Time:整个场景中所有请求的响应情况

在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于25 毫秒,66%的用户响应时间小于27 毫秒,最大的响应时间小于37 毫秒。

由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数。

有了上述的各项指标,我们可以进行多次请求,不断修改-c、-n的值来取得apache的最佳请求数量,从而进行优化配置。需要注意的是每个请求连接得出的结果均不一样。测试的时候可以对多个连接进行测试。

AB不像 LR 那么强大,但是它足够轻便,如果只是在开发过程中想检查一下某个模块的响应情况,或者做一些场景比较简单的测试, ab 还是一个不错的选择——至少不用花费很多时间去学习 LR 那些复杂的功能,就更别说那 License 的价格了。

近年来,软件测试行业越来越不满足只会点点点的测试了,越来越多的公司开始要求自动化、性能等能力。

如果你还在犹豫我到底要不要提升的时候,那些比你学得更早的,更快的已经把你远远地甩在了后面。

如果你感觉到了紧迫和压力,欢迎加群:680748947大家一起交流自动化的技术,为了更高的薪资,更为了不被行业淘汰!

你可能感兴趣的:(性能测试下的AB测试实战)