1. 程式人生 > >開源API測試工具 Hitchhiker v0.6更新 - 改進壓力測試

開源API測試工具 Hitchhiker v0.6更新 - 改進壓力測試

高級 header 參數 分鐘 goroutine log parse 變量 otto

Hitchhiker 是一款開源的支持多人協作的 Restful Api 測試工具,支持Schedule, 數據對比,壓力測試,支持上傳腳本定制請求,可以輕松部署到本地,和你的team成員一起協作測試Api。

詳細介紹請看: http://doc.hitchhiker-api.com/cn/introduction.html

在線體驗: http://www.hitchhiker-api.com/, 可以用 try without login 來免登錄使用 (在線演示不支持壓力測試和上傳js,虛擬機單核的,撐不住)。

下面來看看這次的更新:

重寫壓力測試

Hitchhiker 之前的壓力測試節點是一個基於Go的 Hitchhiker-Node,早期階段Hitchhiker的腳本功能並不復雜,不支持上傳js庫,async/await,以及文件讀取保存等,而Go的高並發非常有吸引力,做了下調研後,使用otto做為js解釋器,是可以滿足那時的腳本運行邏輯的,所以選用了Go做壓力測試的節點,在早期是夠用的。

後來Hitchhiker開始支持更多復雜的腳本功能,比如自定義js庫,因為npm裏的很多js庫都基於Nodejs,而目前的Go以及otto滿足不了這種需求,除非再加一個Node進程來執行腳本,然而這樣又過於復雜,還不如直接使用Nodejs來寫,所以綜合考慮後還是使用Nodejs重寫了壓力測試點。

重寫之後的壓力測試是集成在Server一起的,也就是不用再部署其他的程序,而且支持現有所有的腳本功能。

兩種方法的優劣:

Go的高並發以及goroutine使得寫起這種壓力程序時非常之輕松,性能也很有保障,缺點還是在於Hitchhiker的腳本是js,所以Go執行這些腳本比較費勁,也因此目前基於Go的壓力點不支持Hitchiker腳本的高級特性。

Nodejs寫這種壓力測試程序就比較費勁,需要自己管理多進程,以及進程間通信,還沒法精確控制1秒的請求數,也就是壓力測試的參數QPS對Nodejs的壓力點是沒用的,不過好在Hitchhiker Server也是基於Nodejs的,所以可以重用請求處理的邏輯,而且Api的壓力測試本質上是高IO的,所以Nodejs的性能也很不錯。不過Nodejs的程序目前還不支持分布式,稍後會加上去,主體功能已經完成。

稍微比較了下兩者的性能,在單機上基本旗鼓相當。

目前是以基於Nodejs的版本為默認的,也可以選用Go的,不過Go的暫時會停止維護,除非Go有了基於Node的js解釋器,那時再考慮移回來。

技術分享圖片

重新整理請求流程

之前的請求流程有點亂,導致有些問題不容易發現,比如環境變量沒應用到Test腳本裏,所以在改這個bug時重構了下代碼,把流程理清下:

技術分享圖片

response 展示圖片

這個是有朋友在github上提出來的,之前我是想不到有人會用這個工具來請求圖片,所以也沒關註這塊,不過有人使用,說明有需求(不止一人),所以實現了這個功能,如果response header有image/*的話就直接展示圖片而不是圖片內容(一片亂碼)

修改Bug

  1. global function 裏的內容在切換模塊後會消失

  2. schedule裏的請求返回是圖片時,會造成JSON.parse失敗,導致異常,改了圖片只保存鏈接,不保存內容

  3. 瀏覽器裏壓力測試的websocket有時會失敗,加了重試

  4. schedule的定時跑的記錄會有1分鐘左右的誤差

  5. 改請求的method時name會被重置

後續計劃

短期內還是以增加測試新功能為主,比如curl生成請求,請求生成代碼等,長期的一個是文檔,一個是Mock,開始根據需求來決定下一個模塊。

Github: https://github.com/brookshi/Hitchhiker, 覺得不錯的話麻煩 Star 支持下,謝謝。

開源API測試工具 Hitchhiker v0.6更新 - 改進壓力測試