接口性能測試


一、概述

性能測試按照不同視角,可以分為以下幾類:
a. 用戶視角的性能
用戶角度感受到的網站響應速度的快和慢。從用戶在瀏覽器輸入網址/打開應用,到整個頁面呈現給用戶的耗時。包含了用戶端發送請求,服務端收到並執行請求,返回請求,客戶端收到之后渲染的總時間。

b.開發人員視角的性能
包括系統吞吐量,並發處理能力,系統穩定性,響應延遲等。如果發現有不滿足要求的地方,需要定位出問題所在,並給出解決方案。
c.運維
主要關注基礎設施性能和資源利用率,如網絡運營商帶寬能力,服務器應急配置,數據中心網絡架構,服務器和網絡帶寬的資源利用率等。

二、為什么要做接口壓力測試

1.清楚自己所提供的接口性能是多少
2.判斷出系統可能存在的問題(代碼,DB,cache,系統配置,容量等),提前解決
3.為設置接口的限流/熔斷做參考

三、接口壓力測試的局限性

接口壓力測試只注重單業務的接口性能,進行壓測的時候,只關注個別接口的性能。
接口大部分時間是在線下進行,可能線上線下機器配置不一樣,而且線上同時在進行着各種不同的業務。
因此在線下進行接口壓力測試的結果,只能作為線上配置的一個參考值。

四、誰來做接口壓力測試

對接口比較熟悉的開發人員來做,這樣有以下好處:
1.對接口實現比較了解,對接口中潛在的問題有一定的預判
2.比較容易對接口進行優化(業務邏輯層面和技術層面)。

五、如何做接口壓力測試

通常使用 Jmeter ,loadRunner 等進行壓力測試。
六、如何設計接口壓力測試方案

如何確定並發數:
可以通過嘗試的方式。第一次壓測的時候,可以設置自己預期接口需要達到的並發數,進行壓力測試。然后通過二分法進行調整。
舉例:如果期望的並發數是512 ,第一次壓測並發數設置為512 ,如果系統沒有壓力,第二次並發就嘗試設置為1024。如果系統有壓力,下次就設置為256。通過逐漸嘗試的方式,找出當前接口的並發閾值。

如何確定總請求次數:
有時候單純的通過並發數並不能完全發現系統的壓力狀況,因為並發數只能測出系統的處理能力。
但是有時隨着長時間的調用,系統可能會出現其他問題。比如:隨着數據量的增多,存儲磁盤滿了、內存緩存用光,緩存服務使用磁盤緩存而拖慢系統等情況。
為了避免這種情況,可以嘗試用現有線上業務每天產生的數量乘以一定的天數(天數的大小視業務的具體情況而定,推薦180天以上),作為接口壓力測試的總請求次數。

接口壓力測試數據的選取:
通常隨機選擇數據。但是要注意重復進行壓力測試對性能的影響。
比如:
第一次壓測的 Id 是從2500W 到2600W 之間選擇的,下次用同樣的 Id 范圍做壓測的時候,如果接口實現中有緩存,則會很大程度影響壓力測試的結果,對壓力測試的解讀時候,要考慮到這個因素。
另外,使用不存在的 Id 去進行壓測,結果並沒有太大意義。

七、壓力測試報告應該包含哪些結果

接口壓力測試結果

 

服務器壓力

每次接口壓力測試時,接口所在服務的服務器 cpu/jvm 使用率歷史記錄,jvm堆大小,響應時長圖 (借助 pinpoint 查看),cpu load 值(top 命令),gc 信息等。

八、如何解讀壓力測試的結果

對於接口壓力測試結果:
關注 響應時間是否符合要求,響應時間(前99%) 是不是在可允許的范圍內。最大值是多少,是否可以容忍。 通常來說,錯誤百分比應該為0。

對於服務器壓力:
看 cpu 使用率是否在可接受范圍內,jvm 堆大小是否變化頻繁,是否有 fullGC。Young GC 耗時,CPU load值是否在可接受范圍內。 響應時長圖是否平滑(如果有毛刺現象,需要找出原因)。

九、如何根據測試結果定位性能問題

1.響應時間不符合要求:
通過 pinpoint 觀察調用鏈,找出耗時比較長的步驟,進行優化

2.並發數達不到要求,可以從以下幾個方面進行考慮:
a 是否發生系統依賴資源爭用(比如:數據庫連接,業務處理線程數等)

b 業務流程/代碼性能是否可以優化 c 在運行的過程中是否頻繁 GC

3. CPU 使用率過高:
a 在運行的過程中是否頻繁 GC

b是否發生過多的線程切換 c 程序中是否有比較耗 cpu 的代碼

cpu 內存 磁盤 io 網絡 io 服務器 top 命令 vmstat pidstat / iostat

sar jvm java mission Control 工具 jmap 命令,結合eclipse mat 工具進行分析

全鏈路:pinpoint

 

十、修復性能問題

除了只可能在極端壓力測試情況下會發生的性能問題,並且修復代價過大的問題可以不進行修復(但是要在壓力測試報告中體現出來此問題,以及解決方案),其他問題都必須進行修復。


十一、其他

如果沒有專門的接口壓力測試環境,記得做完接口壓力測試之后,將測試數據清除(緩存,數據庫,消息中間件中未消費完畢的消息 等)。

 

————————————————
版權聲明:本文為CSDN博主「天龍的技術雜談」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_42335070/article/details/104986447


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM