鏈路壓測中各接口性能統計

在之前的文章中很多次提到了鏈路壓測,在鏈路壓測的統計結果中,只統計了鏈路的執行的耗時和相對應的QPS,但是缺乏統計鏈路中各個接口的請求耗時,特別在針對接口響應時間的變化曲線統計,今天就補上這一塊的內容。

舊文回顧:

思路

由於沒有在性能測試框架中對鏈路壓測中的,每個HTTP和其他協議請求的響應時間記錄,所以統計響應結果的需要對日誌進行分類統計。

  • 讀取日誌中關於接口響應時間和 requestID的內容。
  • 根據不同的 URL區分不同接口,存入不同的 list中。
  • 使用 StatisticsUtil類的統計畫圖功能完成數據展示。

日誌信息

這裏分享一部分日誌,日誌的格式千差萬別,在讀取日誌中關於接口響應時間的代碼需要使用者自己完成。需要提前將日誌文件清空或者臨時指定其他日誌文件,需要正確預估日誌量和log4j 2的配置,最後所有日誌都在一個文件中,省得麻煩。


WARN-> 創建訂單號:f1615455162cXCQX
INFO-> 請求uri:https://****/api/public/v1/order/refund,耗時:1181 ms, requestId:Fun20210311173240XNwf
INFO-> 請求uri:https://****/api/public/v1/order/create,耗時:1336 ms, requestId:Fun20210311173240NBiR
INFO-> 請求uri:https://****/api/public/v1/order/refund,耗時:853 ms, requestId:Fun20210311173241jBqr
INFO-> 請求uri:https://****/api/public/v1/order/create,耗時:895 ms, requestId:Fun20210311173241lYiS
WARN-> 創建訂單號:f1615455160YBAgE
WARN-> 創建訂單號:f1615455161Ia2GC
INFO-> 請求uri:https://****/api/public/v1/order/refund,耗時:1163 ms, requestId:Fun20210311173240aNZO
INFO-> 請求uri:https://****/api/public/v1/order/refund,耗時:1600 ms, requestId:Fun20210311173240SScO
INFO-> 請求uri:https://****/api/public/v1/order/refund,耗時:1289 ms, requestId:Fun20210311173240UPSB
INFO-> 請求uri:https://****/api/public/v1/order/refund,耗時:35 ms, requestId:Fun20210311173242QENp
INFO-> 請求uri:https://****/api/public/v1/order/create,耗時:44 ms, requestId:Fun20210311173242LcGa
WARN-> 創建訂單號:f1615455162qrVq0
INFO-> 請求uri:https://****/api/public/v1/order/refund,耗時:40 ms, requestId:Fun20210311173242fxJg
INFO-> 請求uri:https://****/api/public/v1/order/create,耗時:31 ms, requestId:Fun20210311173242XWel
WARN-> 創建訂單號:f1615455162baA6B
INFO-> 請求uri:https://****/api/public/v1/order/create,耗時:27 ms, requestId:Fun20210311173242LnwA
WARN-> 創建訂單號:f1615455162SajUw

可以看出,這裏的請求日誌除了兩個接口的響應時間以外,就是WARN打印的訂單號,需要的日誌內容格式比較統一。

腳本

腳本依然用Groovy編寫,因爲實在太好用了。

   def lines = RWUtil.readTxtFileByLine(getLongFile("link.log"), "public/v1/order"true)
        def create = []
        def refund = []
        lines.each {
            def first = (Regex.findFirst(it, /\d+ ms/) - " ms"as int
            if (it.contains(OrderApi.CREATE)) create << first
            else if (it.contains(OrderApi.REFUND)) refund << first
            else println it
        }
        println StatisticsUtil.statistics(create, "創建訂單接口"200)
        println StatisticsUtil.statistics(refund, "退款"200)

這裏的線程數200需要自己傳參,用來生成標題的,無其他實際用途。

控制檯輸出

由於字體原因,這裏只能放圖了。

訂單退款接口相應耗時統計圖
創建訂單接口相應耗時統計圖

FunTester騰訊雲年度作者Boss直聘簽約作者,非著名測試開發er,歡迎關注。

點擊閱讀原文,查看公衆號歷史文章


本文分享自微信公衆號 - FunTester(NuclearTester)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章