開源API測試工具 Hitchhiker v0.6更新 - 改進壓力測試
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
global function 裏的內容在切換模塊後會消失
schedule裏的請求返回是圖片時,會造成JSON.parse失敗,導致異常,改了圖片只保存鏈接,不保存內容
瀏覽器裏壓力測試的websocket有時會失敗,加了重試
schedule的定時跑的記錄會有1分鐘左右的誤差
改請求的method時name會被重置
後續計劃
短期內還是以增加測試新功能為主,比如curl生成請求,請求生成代碼等,長期的一個是文檔,一個是Mock,開始根據需求來決定下一個模塊。
Github: https://github.com/brookshi/Hitchhiker, 覺得不錯的話麻煩 Star 支持下,謝謝。
開源API測試工具 Hitchhiker v0.6更新 - 改進壓力測試