qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          開源性能測試工具-Apache ab介紹

            引子

            按照原定計劃,今天開始研究 JMeter,一天的時間看完了大半的 User Manual,發現原來只要沉住氣,學習效率還是蠻高的,而且大堆的英文文檔也沒有那么可怕。

            本來想順便把文檔翻譯一下,不過后來想了想,看懂是一回事,全部翻譯出來又是另外一回事了,工作量太大,而且這也不是我一開始要研究 JMeter 的本意。不如大家有興趣一起研究的遇到問題再一起討論吧。

            開源工具通常都是為了某個特定的目的而開發出來的,所以如果想找到一個開源的性能測試工具去與LoadRunner 或者 QALoad 之類去比較,實在有些勉強。但是開源工具也有它自己的優勢:小巧、輕便,在自己擅長的領域可以提供優秀的解決方案。所以,我們可以考慮準備一個自己的“開 源測試工具箱”,平時利用空閑時間了解各種工具所適用的環境和目的,知識慢慢積累下來以后,就可以在遇到問題時順手拈來,輕松化解。

            另外,如果8月份和9月份的空閑時間足夠多,我想我會寫一個系列文章來講述在實際的開發和測試過程中引入開源性能測試工具的情況。如果有朋友感興趣,希望大家可以一起研究和討論。

            簡介

            ab的全稱是ApacheBench,是 Apache 附帶的一個小工具,專門用于 HTTP Server 的benchmark testing,可以同時模擬多個并發請求。前段時間看到公司的開發人員也在用它作一些測試,看起來也不錯,很簡單,也很容易使用。

            通過下面的一個簡單的例子和注釋,相信大家可以更容易理解這個工具的使用。

            一個簡單的例子

            在這個例子的一開始,我執行了這樣一個命令 ab -n 10 -c 10 http://www.google.com/

            這個命令的意思是啟動 ab ,模擬10個用戶(-n 10)同時訪問 www.google.com ,并迭代10次(-c 10)。跟著下面的是 ab 輸出的測試報告,紅色部分是我添加的注釋。

          /*在這個例子的一開始,我執行了這樣一個命令ab -n 10 -c 10http://www.google.com/這個命令的意思是啟動 ab ,向www.google.com發送10個請求(-n 10) ,并每次發送10個請求(-c 10)——也就是說一次都發過去了。跟著下面的是 ab 輸出的測試報告,紅色部分是我添加的注釋。*/

          C:\Program Files\Apache Software Foundation\Apache2.2\bin>ab -n 10 -c 10 http://www.google.com/

          This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0

          Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

          Copyright 1997-2005 The Apache Software Foundation, http://www.apache.org/

           

          Benchmarking www.google.com (be patient).....done

           

          Server Software:        GWS/2.1

          Server Hostname:        www.google.com

          Server Port:            80

           

          Document Path:          /

          Document Length:        230 bytes

           

          Concurrency Level:      10

          /*整個測試持續的時間*/

          Time taken for tests:   3.234651 seconds

          /*完成的請求數量*/

          Complete requests:      10

          /*失敗的請求數量*/

          Failed requests:        0

          Write errors:           0

          Non-2xx responses:      10

          Keep-Alive requests:    10

          /*整個場景中的網絡傳輸量*/

          Total transferred:      6020 bytes

          /*整個場景中的HTML內容傳輸量*/

          HTML transferred:       2300 bytes

          /*大家最關心的指標之一,相當于 LR 中的每秒事務數,后面括號中的 mean 表示這是一個平均值*/

          Requests per second:    3.09 [#/sec] (mean)

          /*大家最關心的指標之二,相當于 LR 中的平均事務響應時間,后面括號中的 mean 表示這是一個平均值*/

          Time per request:       3234.651 [ms] (mean)

          /*這個還不知道是什么意思,有知道的朋友請留言,謝謝 ^_^ */

          Time per request:       323.465 [ms] (mean, across all concurrent requests)

          /*平均每秒網絡上的流量,可以幫助排除是否存在網絡流量過大導致響應時間延長的問題*/

          Transfer rate:          1.55 [Kbytes/sec] received

          /*網絡上消耗的時間的分解,各項數據的具體算法還不是很清楚*/

          Connection Times (ms)

                        min  mean[+/-sd] median   max

          Connect:       20  318 926.1     30    2954

          Processing:    40 2160 1462.0   3034    3154

          Waiting:       40 2160 1462.0   3034    3154

          Total:         60 2479 1276.4   3064    3184

           

          /*下面的內容為整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中 50% 的用戶響應時間小于 3064 毫秒,60 % 的用戶響應時間小于 3094 毫秒,最大的響應時間小于 3184 毫秒*/

          Percentage of the requests served within a certain time (ms)

            50%   3064

            66%   3094

            75%   3124

            80%   3154

            90%   3184

            95%   3184

            98%   3184

            99%   3184

           100%   3184 (longest request)

            在這個例子的一開始,我執行了這樣一個命令 ab -n 10 -c 10http://www.google.com/

            這個命令的意思是啟動 ab ,模擬10個用戶(-n 10)同時訪問www.google.com,并迭代10次(-c 10)。跟著下面的是 ab 輸出的測試報告,紅色部分是我添加的注釋。

          更多信息

            ab 不像 LR 那么強大,但是它足夠輕便,如果只是在開發過程中想檢查一下某個模塊的響應情況,或者做一些場景比較簡單的測試,ab 還是一個不錯的選擇——至少不用花費很多時間去學習 LR 那些復雜的功能,就更別說那 License 的價格了。

            下面是 ab 的詳細參數解釋。

          ab [ -A auth-username:password ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [http://]hostname[:port]/path

          -A auth-username:password

          Supply BASIC Authentication credentials to the server. The username and password are separated by a single : and sent on the wire base64 encoded. The string is sent regardless of whether the server needs it (i.e., has sent an 401 authentication needed).

          -c concurrency

          Number of multiple requests to perform at a time. Default is one request at a time.

          -C cookie-name=value

          Add a Cookie: line to the request. The argument is typically in the form of a name=value pair. This field is repeatable.

          -d

          Do not display the "percentage served within XX [ms] table". (legacy support).

          -e csv-file

          Write a Comma separated value (CSV) file which contains for each percentage (from 1% to 100%) the time (in milliseconds) it took to serve that percentage of the requests. This is usually more useful than the 'gnuplot' file; as the results are already 'binned'.

          -g gnuplot-file

          Write all measured values out as a 'gnuplot' or TSV (Tab separate values) file. This file can easily be imported into packages like Gnuplot, IDL, Mathematica, Igor or even Excel. The labels are on the first line of the file.

          -h

          Display usage information.

          -H custom-header

          Append extra headers to the request. The argument is typically in the form of a valid header line, containing a colon-separated field-value pair (i.e., "Accept-Encoding: zip/zop;8bit").

          -i

          Do HEAD requests instead of GET.

          -k

          Enable the HTTP KeepAlive feature, i.e., perform multiple requests within one HTTP session. Default is no KeepAlive.

          -n requests

          Number of requests to perform for the benchmarking session. The default is to just perform a single request which usually leads to non-representative benchmarking results.

          -p POST-file

          File containing data to POST.

          -P proxy-auth-username:password

          Supply BASIC Authentication credentials to a proxy en-route. The username and password are separated by a single : and sent on the wire base64 encoded. The string is sent regardless of whether the proxy needs it (i.e., has sent an 407 proxy authentication needed).

          -q

          When processing more than 150 requests, ab outputs a progress count on stderr every 10% or 100 requests or so. The -q flag will suppress these messages.

          -s

          When compiled in
            1

          posted on 2012-04-18 10:57 順其自然EVO 閱讀(279) 評論(0)  編輯  收藏 所屬分類: jmeter and badboy

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 堆龙德庆县| 瑞安市| 保定市| 长春市| 苏尼特右旗| 横峰县| 朝阳区| 南昌市| 洛扎县| 沁水县| 海安县| 石棉县| 长寿区| 新化县| 会泽县| 乌鲁木齐市| 鹤峰县| 鸡东县| 虹口区| 东乌珠穆沁旗| 宁远县| 蓝山县| 北票市| 名山县| 石台县| 青河县| 南召县| 新和县| 胶州市| 定西市| 浦城县| 博湖县| 高密市| 弥勒县| 阳原县| 阿尔山市| 中山市| 长寿区| 清镇市| 牟定县| 阿坝县|