http接口性能測試工具

1、 http_load

程序很是小,解壓後也不到100K。http_load以並行複用的方式運行,用以測試web服務器的吞吐量與負載。linux

可是它不一樣於大多數壓力測試工具,它能夠以一個單一的進程運行,通常不會把客戶機搞死。還能夠測試HTTPS類的網站請求。git

下載地址:wget http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gzgithub

安裝很簡單:web

tar zxvf http_load-12mar2006.tar.gzredis

cd http_load-12mar2006apache

make服務器

make install網絡

 

命令格式:http_load -p 併發訪問進程數 -s 訪問時間 須要訪問的URL文件併發

參數其實能夠自由組合,參數之間的選擇並無什麼限制。好比你寫成http_load -parallel 5 -seconds 300 urls.txt也是能夠的。咱們把參數給你們簡單說明一下:app

-parallel 簡寫-p :含義是併發的用戶進程數。

-fetches 簡寫-f :含義是總計的訪問次數。

-rate    簡寫-p :含義是每秒的訪問頻率。

-seconds簡寫-s :含義是總計的訪問時間

準備URL文件:urllist.txt,文件格式是每行一個URL,URL最好超過50-100個測試效果比較好。文件格式以下:

http://127.0.0.1:80/getuserinfo?uid=1

http://127.0.0.1:80/getgroupinfo?gid=1

... ...

咱們來看運行一條命令來看看它的返回結果 命令:% ./http_load -rate 5 -seconds 10 urls說明執行了一個持續時間10秒的測試,每秒的頻率爲5。

49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds5916 mean bytes/connection4.89274

fetches/sec, 28945.5 bytes/secmsecs/connect: 28.8932 mean, 44.243 max, 24.488 minmsecs/first

-response: 63.5362 mean, 81.624 max, 57.803 minHTTP response codes: code 200 — 49

結果分析:

1.49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds 說明在上面的測試中運行了49個請求,最大的併發進程數是2,總計傳輸的數據是289884bytes,運行的時間是10.0148秒

2.5916 mean bytes/connection說明每一鏈接平均傳輸的數據量289884/49=5916

3.4.89274 fetches/sec, 28945.5 bytes/sec 說明每秒的響應請求爲4.89274,每秒傳遞的數據爲28945.5 bytes/sec

4.msecs/connect: 28.8932 mean, 44.243 max, 24.488 min說明每鏈接的平均響應時間是28.8932 msecs,最大的響應時間44.243 msecs,最小的響應時間24.488 msecs

5.msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min

六、HTTP response codes: code 200 — 49     說明打開響應頁面的類型,若是403的類型過多,那可能要注意是否系統遇到了瓶頸。

特殊說明: 測試結果中主要的指標是 fetches/sec、msecs/connect 這個選項,即服務器每秒可以響應的查詢次數,

用這個指標來衡量性能。彷佛比 apache的ab準確率要高一些,也更有說服力一些。 Qpt-每秒響應用戶數和response time,每鏈接響應用戶時間。 測試的結果主要也是看這兩個值。固然僅有這兩個指標並不能完成對性能的分析,咱們還須要對服務器的cpu、men進行分析,才能得出結論。

2、wrk

wrk 是一個很簡單的 http 性能測試工具,也能夠叫作 http benchmark工具。只有一個命令行,就能作不少基本的 http 性能測試。wrk 是開源的,代碼在 github 上:https://github.com/wg/wrk。

首先要說的一點是: wrk 只能運行在 Unix 類的系統上. 好比 linux, mac, solaris 等. 也只能在這些系統上編譯. wrk 的一個很好的特性就是能用不多的線程壓出很大的併發量. 緣由是它使用了一些操做系統特定的高性能 io 機制, 好比 select, epoll, kqueue 等. 其實它是複用了 redis 的 ae 異步事件驅動框架.  確切的說 ae 事件驅動框架並非 redis 發明的, 它來至於 Tcl的解釋器 jim, 這個小巧高效的框架, 由於被 redis 採用而更多的被你們所熟知.

要用 wrk, 首先要編譯 wrk. 你的機器上須要已經安裝了 git 和基本的c編譯環境. wrk 自己是用 c 寫的. 代碼不多. 而且沒有使用不少第三方庫.  因此編譯基本不會遇到什麼問題.

一、下載編譯:

git clone https://github.com/wg/wrk.git

cd wrk 

make 

就 ok了. make 成功之後在目錄下有一個 wrk 文件. 就是它了. 你能夠把這個文件複製到其餘目錄, 好比 bin 目錄. 或者就這個目錄下執行.

若是編譯過程當中出現:

src/wrk.h:11:25: fatal error: openssl/ssl.h: No such file or directory 

 #include <openssl/ssl.h>  是由於系統中沒有安裝openssl的庫.

sudo apt-get install libssl-dev

或 sudo yum install  openssl-devel

二、測試運行:

咱們先來作一個簡單的性能測試:

./wrk -t10 -c10 -d10s -T10s --latency 'http://127.0.0.1:7001/login/im?appid=1&udata=2'  30秒鐘結束之後能夠看到以下輸出:

核數的2到4倍足夠了. 多了反而由於線程切換過多形成效率下降. 由於 wrk 不是使用每一個鏈接一個線程的模型, 而是經過異步網絡 io 提高併發量. 因此網絡通訊不會阻塞線程執行.

這也是 wrk 能夠用不多的線程模擬大量網路鏈接的緣由. 而如今不少性能工具並無採用這種方式, 而是採用提升線程數來實現高併發. 因此併發量一旦設的很高, 測試機自身壓力就很大. 測試效果反而降低.

三、腳本擴展:

咱們經過一些測試場景在看看怎麼使用 lua 腳本.

POST + header + body.

首先建立一個 post.lua 的文件:

wrk.method = "POST" 

wrk.body   = "foo=bar&baz=quux" 

wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

就這三行就能夠了, 固然 headers 能夠加入任意多的內容. 而後執行:

wrk -t12 -c100 -d30s -T30s --script=post.lua --latency   'http://127.0.0.1:7001/login/im?appid=1&udata=2' 

相關文章
相關標籤/搜索