基本使用
ab就是Apache Benchmark的縮寫,顧名思義它是Apache組織開發的一款web壓力測試工具,優點是使用方便,統計功能強大。所以要利用ab,首先要安裝Apache,并且打開Apache
安裝
mac
Mac電腦是默認有Apache的,所以不需要另外安裝,只要直接啟動就好了
apache的使用
啟動:
sudo apachectl start
查看 Apache 版本命令:
httpd -v
關閉命令:
sudo apachectl stop
重啟命令:
sudo apachectl restart
window安裝
進入apache官網 http://httpd.apache.org/ 下載apache即可
apache安裝路徑為C:\apache\Apache24\為例
打開終端,輸入命令
cd C:\apache\Apache24\bin
即可啟動ab
ubuntu安裝
sudo apt-get install apache2-utils
centos安裝
yum install httpd-tools
命令介紹
ab一般常用參數就是 -n, -t ,和 -c。
命令 | 介紹 |
---|---|
-n | 表示要發送多少次測試請求 |
-t | 表示測試持續多長時間; |
-c | (concurrency)表示用多少并發來進行測試; |
-p | 發送post請求的時候所請求的參數的文件 |
備注 | 一般-t或者-n選一個用。 |
模擬Get請求進行測試
ab非常簡單
ab -n 100 -c 10 'http://testurl.com/xxxx?para1=aaa¶2=bbb'
模擬POST請求進行測試
對于模擬POST請求進行測試,則稍微復雜些,需要把將要post的數據(一般是json格式)放在文件里。比如一個post接口需要如下方式訪問
curl -H 'Content-Type:application/json' -X POST -d '{"name":"job","age":20}' http://localhost:8083/query/
解釋:
-H 請求頭為"Content-Type:application/json",就是json格式,
-X 請求方式為POST
-d 請求參數為{"name":"job","age":20}
請求鏈接為http://localhost:8083/query/
那么我們用ab來模擬就是:
ab -n 100 -c 10 -p post_data.txt -T 'application/json' http://localhost:8083/query/
其中post_data.txt這是一個文件,這個文件中放到就是請求參數 {"name":"job","age":20}
# post_data.txt
{
"name":"job",
"age":20
}
統計結果分析
我發送了:
ab -t 100 -c 10 -p post_data.txt -T "application/json" http://192.168.2.60:8000/centre/linkview/mvts/scheduler/event/add_task/
得出如下結果
補課: 相關的一些概念做一下說明:
吞吐率(Requests per second)
計算公式:總請求數 / 處理完成這些請求數所花費的時間
并發連接數(The number of concurrent connections)
概念:某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。
并發用戶數(The number of concurrent users,Concurrency Level)
一個用戶可能會產生多個并發。
用戶平均請求等待時間(Time per request)
計算公式:處理完成所有請求數所花費的時間/ (總請求數 / 并發用戶數)
服務器平均請求等待時間(Time per request: across all concurrent requests)
計算公式:處理完成所有請求數所花費的時間 / 總請求數
示例結果分析
這是一種時間統計的方法
這段是每個請求響應時間的分布情況,50%的處理時間在24ms內,66%的處理時間在27ms內...,重要的是看90%的處理時間
重要指標參數說明
//并發請求數
Concurrency Level: 10
//整個測試持續的時間
Time taken for tests: 100.02 seconds
//完成的請求數
Complete requests: 1000
//失敗的請求數
Failed requests: 0
//整個場景中的網絡傳輸量
Total transferred: 13701482 bytes
//整個場景中的HTML內容傳輸量
HTML transferred: 13197000 bytes
//吞吐率,大家最關心的指標之一,相當于 LR 中的每秒事務數,后面括號中的 mean 表示這是一個平均值
Requests per second: 19.66 [#/sec] (mean)
//用戶平均請求等待時間,大家最關心的指標之二,相當于 LR 中的平均事務響應時間,后面括號中的 mean 表示這是一個平均值
Time per request: 5087.180 [ms] (mean)
//服務器平均請求處理時間,大家最關心的指標之三
Time per request: 50.872 [ms] (mean, across all concurrent requests)
//平均每秒網絡上的流量,可以幫助排除是否存在網絡流量過大導致響應時間延長的問題
Transfer rate: 263.02 [Kbytes/sec] received
如果遇到登錄怎么辦?
首先用賬號密碼登錄,找到Cookie,然后在ab命令中添加獲取到的Cookie,如果需要多個用戶登錄,就傳入多個Cookie。命令語句為:一個用戶的情況
ab -n 100 -C key=value http://test.com/
多個用戶的情況
ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://test.com/