iT邦幫忙

0

鼠年全馬鐵人挑戰 WEEK 28:性能測試工具 Apache Bench

  • 分享至 

  • xImage
  •  

           Photo on Morioh by Francisco Barrows


前言

在各式各樣的測試中 免不了會遇到不同的測試
而這週所要提的就是性能測試的方式
那關於性能測試的部分 應該怎麼測又該如何測
那就看看這週所要介紹的內容吧~

如果想要進一步了解性能測試的大哥大姐們
可以回頭看看小弟之前分享的文章
鼠年全馬鐵人挑戰 WEEK 05:軟體測試的種類 - 番外篇


介紹 Apache Bench

Apache Bench 又被簡稱為 ab
是由 Apache 開發的其中一個開源測試工具
主要用來測試 server (網站或 API) 的執行效能
並藉此查看執行後 server 的性能測試結果

安裝 Apache Bench

  • Mac

    MacOS 在默認情況下已經預先安裝了 Apache Bench
  • Linux

    在 Ubuntu 中可以直接透過 apt-get 來進行安裝
    $ apt-get update
    $ apt-get install apache2-utils
  • Windows

    如果使用的是 Windows 作業系統的話
    可以到 Apache 的官網頁面中進行下載
    Apache VS16 binaries and modules download
    而在官網所提供的版本是 MSI 的封裝檔 (Windows Installer)
    換句話說就是連 Apache HTTP Server 也一併安裝了
    如果不想多執行 Apache HTTP Server 的話
    可以在安裝完後進入 Apache Group\Apache2\bin 目錄
    將 ab.exe 執行檔額外拉出單獨來使用

完成安裝後 可以透過指令 $ ab -V 來確認 Apache Bench 的版本

使用 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/

cURL to ab 的工具介紹

另外這邊小弟想要補充分享一下好用的工具
這個工具就是 網頁版的 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 的性能測試
並且查看執行玩的測試數據

如果有疑問或是有錯誤,還請各位大哥大姐提點。
小弟將繼續往下週邁進。 ─=≡Σ((( つ•̀ω•́)つ


參考文獻

官方網站

相關文章


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言