Photo on Morioh by Francisco Barrows
在各式各樣的測試中 免不了會遇到不同的測試
而這週所要提的就是性能測試的方式
那關於性能測試的部分 應該怎麼測又該如何測
那就看看這週所要介紹的內容吧~
如果想要進一步了解性能測試的大哥大姐們
可以回頭看看小弟之前分享的文章
鼠年全馬鐵人挑戰 WEEK 05:軟體測試的種類 - 番外篇
Apache Bench 又被簡稱為 ab
是由 Apache 開發的其中一個開源測試工具
主要用來測試 server (網站或 API) 的執行效能
並藉此查看執行後 server 的性能測試結果
$ apt-get update
$ apt-get install apache2-utils
Apache Group\Apache2\bin
目錄完成安裝後 可以透過指令 $ ab -V
來確認 Apache Bench 的版本
使用 Apache Bench 的最簡單方法是運行 ab <url>
例如 $ ab https://www.google.com/
該指令將執行一個 http request
但是只執行一個 http request 就無法達到開場所說的性能測試了
那是因為 Apache Bench 的功能遠遠不止這些
因此可以透過 $ ab -h
來查看 Apache Bench 的使用方式
-n requests Number of requests to perform
-c concurrency Number of multiple requests to make at a time
-t timelimit Seconds to max. to spend on benchmarking
This implies -n 50000
-s timeout Seconds to max. wait for each response
Default is 30 seconds
-b windowsize Size of TCP send/receive buffer, in bytes
-B address Address to bind to when making outgoing connections
-p postfile File containing data to POST. Remember also to set -T
-u putfile File containing data to PUT. Remember also to set -T
-T content-type Content-type header to use for POST/PUT data, eg.
'application/x-www-form-urlencoded'
Default is 'text/plain'
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234'. (repeatable)
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-q Do not show progress when doing more than 150 requests
-l Accept variable document length (use this for dynamic pages)
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r Don't exit on socket receive errors.
-m method Method name
-h Display usage information (this message)
-I Disable TLS Server Name Indication (SNI) extension
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol
(TLS1, TLS1.1, TLS1.2 or ALL)
-E certfile Specify optional client certificate chain and private key
而通常被較常使用的是 -n 與 -c
-n:測試執行的總請求數,默認值為1
-c:一次執行多請求的數量,也就是模擬連線使用者數,默認值為1
因此舉個例子 下方的指令就是 對 google 的連結進行請求
在短時間內請求 10 筆 request,並且模擬 2 位使用者同時進行$ ab -n 10 -c 2 https://www.google.com/
另外這邊小弟想要補充分享一下好用的工具
這個工具就是 網頁版的 Curl2ab
這個網站可以透過已知的 curl 來快速轉換成 ab 的形式
真的是非常的方便
Paste your cURL command:貼上你的 cURL 內容
Iteration:輸入測試執行的總請求數
Concurrency:輸入模擬連線使用者數
輸入完資料後 網頁下方就會同步的生成 ab 的指令
藉由 ab 執行剛剛所說的指令 $ ab -n 10 -c 2 https://www.google.com/
就可以直接看到執行結果 大概長成這個樣子
Benchmarking www.google.com (be patient).....done
Server Software: gws
Server Hostname: www.google.com
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-ECDSA-CHACHA20-POLY1305,256,256
Server Temp Key: ECDH X25519 253 bits
TLS Server Name: www.google.com
Document Path: /
Document Length: 12502 bytes
Concurrency Level: 2
Time taken for tests: 0.675 seconds
Complete requests: 10
Failed requests: 9
(Connect: 0, Receive: 0, Length: 9, Exceptions: 0)
Total transferred: 134189 bytes
HTML transferred: 124849 bytes
Requests per second: 14.82 [#/sec] (mean)
Time per request: 134.946 [ms] (mean)
Time per request: 67.473 [ms] (mean, across all concurrent requests)
Transfer rate: 194.22 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 46 66 25.5 56 126
Processing: 43 54 9.9 53 75
Waiting: 40 51 9.5 51 68
Total: 97 120 28.0 110 184
Percentage of the requests served within a certain time (ms)
50% 110
66% 129
75% 131
80% 146
90% 184
95% 184
98% 184
99% 184
100% 184 (longest request)
依照執行的結果 來一個個看 到底都回傳了什麼東西吧~
Server Software:Web主機的作業系統與版本 (Google Web Server > gws)
Server Hostname:Web主機的IP位址 (www.google.com)
Server Port:Web主機的連接埠 (443)Document Path:網址的路徑部分 (/)
Document Length:網頁回應的網頁大小 (12502 bytes)
Concurrency Level:同時進行壓力測試的人數 (2)
Time taken for tests:本次壓力測試所花費的總秒數 (0.675 seconds)
Complete requests:完成的要求數 (10)
Failed requests:失敗的要求數 (9)
Total transferred:包括 HTTP Header 的測試總數據傳輸量 (134189 bytes)
HTML transferred:僅回傳的 html 資料的測試總數據傳輸量(124849 bytes)
Requests per second:平均每秒可回應多少要求 (14.82 [#/sec])
Time per request:平均每個要求的時間 (134.946 [ms])
Time per request:平均每個要求的時間,所有同時連線數的平均值 (67.473 [ms])
Transfer rate:ab 到 Web Server 的網路傳輸速度 (194.22 [Kbytes/sec])
Connection Times (ms):試時的連線處理時間橫軸欄位的部分:
- min: 最小值
- mean: 平均值(正、負標準差)
- median: 平均值(中間值)
- max: 最大值
縱軸欄位的部分:
- Connect: ab 發 TCP 要求到 Web 主機所花費的建立時間
- Processing: TCP 連線建立後到收到全部 HTTP 回應資料的時間
- Waiting: HTTP 回應第一個 Byte 所等待的時間
- Total: Connect + Processing 的時間
以上是這週小弟所分享的內容
藉由 Apache Bench 來進行 server 的性能測試
並且查看執行玩的測試數據
如果有疑問或是有錯誤,還請各位大哥大姐提點。
小弟將繼續往下週邁進。 ─=≡Σ((( つ•̀ω•́)つ
官方網站
相關文章