1. 程式人生 > >基準測試工具ab

基準測試工具ab

HTTP請求生命週期 這裡寫圖片描述 依次要經過使用者的主路由器(如果有的話),ISP閘道器和域名伺服器(DNS),並在DNS中會查詢與請求的域名相關聯的IP,然後到達指定IP的web伺服器,最終請求web應用程式生成響應內容 web伺服器將資料打包成多個數據包,並以相反的順序沿著使用者請求的相同路徑將資料包返回給使用者,瀏覽器呈現結果到網頁

ab(Apache Benchmark)

Apache的一個工具

#安裝ab
 yum install apr-util
 yum install yum-utils
 cd /usr/local/src/
 mkdir ab
 cd ab/
 yum install
yum-utils.noarch yumdownloader httpd-tools* rpm2cpio httpd-tools*.rpm | cpio -idmv cp ./usr/bin/ab /usr/bin/ ab -help

命令 ab [ options(可選引數) ] [ full path to web document(測試路徑) ] options 有 -n : 要執行的請求數 eg:

-A < username >:< pwd > :用於提供伺服器身份驗證資訊,使用者和密碼用”:”分割.傳送的字串用base64編碼 eg: user和pwd通過$

_SERVER[‘PHP_AUTH_USER’]和$_SERVER[‘PHP_AUTH_PW’]獲得

-c 數量 : 一次模擬的請求數,數量不能大於”-n”.

-C cookie的key=cookie的value :傳cookie資訊 ab -C “cookie1_name=cookie1_value;cookie2_name=cookie2_value” https://xxx/test/index

-d : 隱藏”Percentage of the requests served within a certain time (ms)”

-e 檔案

: 該檔案包含執行的基準測試結果儲存到.csv檔案.建議用”gnuplog”檔案就是-g

-g 檔案: 儲存測試結果到該檔案中

-H custom-header : 採用欄位值對形式傳送有效標頭和請求

-i : 執行HEAD請求

-k : 啟用keep-alive功能,預設是禁用

-p 包含post資料的檔案路徑 : 傳送$_POST請求

-P username:pwd :採用base64編碼的字串.字串包含基本身份驗證,以及由”:”分隔的使用者名稱和密碼

-q : 執行多餘100個請求時隱藏進度輸出

-t 時間(秒) : 測試時間最大值,預設是無時間限制

-v verbosity-level : verbosity-level:2及以上列印警告和資訊;3:列印HTTP響應程式碼;4及以上列印頭部資訊

最常用的兩個 -n -c

//下面的意思是總共發4個請求,併發數是2
ab -n 4 -c 2  https://test.easypaynet.cn/test/index

-p 傳送POST請求

ab -p post.text -T application/x-www-form-urlencoded https://test.easypaynet.cn/test/index
//其中post.text的內容是data=1&data2=test,程式碼中對應$_POST['data']和$_POST['data2']

-H

ab -H "Cookie: cookie1_name=cookie1_value; cookie2_name=cookie2_value" https://xxxxx/test/index
//在$_COOKIE中就能看到這些值
//自定義瀏覽器標頭資訊
ab -n 100 -c 5 -H "Mozilla/5.9 (Windows; U; Windows NT 5.1; en-US) AppleWeb/Kit/534.2 (KHTML, like Gecko) Chrome/6.0.447.0 Safari/534.2" http://xxxx/test/index

-g 測試結果儲存到tsv檔案

ab -n 1 -g  ./ab.tsv https://xxxxx/test/index

這裡寫圖片描述

-e 測試結果儲存到csv檔案中

ab -n 1 -e  ./ab.csv https://xxxxx/test/index

這裡寫圖片描述

結果分析

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 www.baidu.com (be patient).....done

//伺服器資訊
Server Software:        BWS/1.1    //比如還有nginx
Server Hostname:        www.baidu.com  //請求的域名
Server Port:            443   //埠
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 //ssl協議

//文件資訊
Document Path:          /      //請求的文件,如果你的地址是:/test/index?a=1,展示的就是這個
Document Length:        227 bytes  //包含所有HTML,影象,css,js及響應中任何內容的位元組數總和

//連線資訊
Concurrency Level:      1     //所進行的併發請求總數
Time taken for tests:   0.028 seconds  //執行所話費的總時間
Complete requests:      1    //模擬的請求總數中已完成的請求總數
Failed requests:        0    //請求中失敗的請求總數
Write errors:           0    //使用寫入資料時遇到的錯誤總數
//Non-2xx responses    //為收到HTTP成功響應的請求總數(這個沒有顯示出來.是我自己加的)
Total transferred:      893 bytes   //整個模擬的響應中傳輸的總資料,大小包括標頭資料
HTML transferred:       227 bytes   //整個模擬傳輸的內容正文的總數大小,越小越好
Requests per second:    35.37 [#/sec] (mean) //每秒支援的請求總數(平均數),越大越好
Time per request:       28.271 [ms] (mean)   //滿足一個請求需要的總時間(毫秒)
Time per request:       28.271 [ms] (mean, across all concurrent requests) //滿足所有併發請求中的一個請求需要的總時間(毫秒),越小余額好
Transfer rate:          30.85 [Kbytes/sec] received  //每秒收到的位元組數(KB/s)

//連線指標細目分類,告訴我們請求在每個過程狀態中所需要的時間
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       21   21   0.0     21      21
Processing:     7    7   0.0      7       7
Waiting:        7    7   0.0      7       7
Total:         28   28   0.0     28      28  
//從Total的min和max可以知道所有請求中最少耗時是28ms,最多是28ms