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

Brook Shi發表於2019-03-01

Hitchhiker 是一款開源的支援多人協作的 Restful Api 測試工具,支援Schedule, 資料對比,壓力測試,支援上傳指令碼定製請求,可以輕鬆部署到本地,和你的team成員一起協作測試Api。

詳細介紹請看: doc.hitchhiker-api.com/cn/introduc…

線上體驗: 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 支援下,謝謝。

相關文章