在之前的文章中很多次提到了鏈路壓測,在鏈路壓測的統計結果中,只統計了鏈路的執行的耗時和相對應的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源創計劃”,歡迎正在閱讀的你也加入,一起分享。