性能測試相關理解---性能測試流程(二)

六、性能測試流程(如何做性能測試?)

根據學習全棧測試博主的課程做的筆記

1、前期準備–

項目初期就開始,業務需求評審時盡量參與,對業務更深刻的認識(確定哪些是核心業務、哪些可能存在并發請求、確定什么地方會出現瓶頸,方便后續性能需求評審時給出建設性建議)

2、性能需求分析、評審(確定性能測試的范圍、性能測試的目標是多少)

2.1、確定范圍:哪些業務接口

使用多的、核心業務功能

2.2、目標:tps、rt、成功率、資源利用率等

2.3、補充

2.3.1關于需求來源(項目組一起定性能目標)
2.3.1.1迭代項目
1)范圍

新增、修改、受影響的功能也是需要放在壓測范圍內

2)目標

不能低于之前版本的性能
還需要進行容量評估,根據歷史數據的請求數據進行統計月增長率是多少
比如現在要做一個容量預估:可以根據增長率(業務、用戶增長的情況)預估tps達到多少未來才能滿足業務需求,就可以做容量預估

3)業務比例:類似ELK的日志平臺來統計

從生產上統計接口的業務比例(其實就是單接口的比例)
這只是統計出接口的比例,但是需要轉換成業務比例,評審時就需要將業務比例獲取到,最后在jmeter設計場景時要用到。

2.3.2新項目
1)范圍:核心業務功能
2)目標值:參考競品、經驗值(產品經理)

若是迭代項目可以和之前的版本性能做對比,也可以通過生產環境的統計日志獲得容量tps,新項目就是參考競品和產品經理的經驗。

3)補充:①業務比例(項目組談論、項目運行后統計)②要測出最大容量Tps,為上線后限流提供參考

迭代項目的業務比例是可以通過類似ELK日志平臺拉取數據,看一下壓測時間范圍內各個接口請求的壓測業務比例歷史數據統計,新項目沒有歷史數據,怎么解決?

這種新項目的業務比例只能是項目組進行討論(不好定的情況,最簡單的就是1:1或者就是項目試運行后數據統計比例,少量用戶和大量用戶使用的tps有差異,業務比例的1偏差不是太大。

對于新項目,一定需要測出最大容量tps,為上線后限流進行提供參考。

3、制定性能測試方案(為后續工作進行指導)

方案很重要(設計相關的、數據的設計、場景的設計、監控的設計等)

3.1、項目背景

描述項目做什么、核心業務什么、出現什么問題,系統架構(用到什么技術棧)

1)背景描述
2)系統架構

了解系統架構、用到什么技術棧、接口的的數據流向、經過了哪些技術棧,才能為后續設計監控提供參考(才知道去監控哪些服務)

3)壓測目的

解決當前什么性能問題、還需要測試出系統的最大容量tps(為上線后續的保證服務不掛、限流等)

3.2、術語說明(主要為了避免理解偏差)

1)tps
2)rt
3)并發
4)業務比例
5)單場景
6)容量場景(混合場景)
7)穩定性場景

3.3、測試范圍、目標

1)要壓測的接口清單以及業務比例
2)各個場景的目標:tps、rt、成功率等

3.4、測試資源

1)人力資源(組織架構)

項目經理(協調壓測需要的資源)

性能測試工程師(編寫性能測試方案、性能測試腳本、設計壓測場景、執行壓測、收集監控數據、編寫測試報告等)

開發工程師(開發需要配合性能測試進行打對應的壓測分支、做性能分析、做性能優化)

運維工程師(配合性能測試部署壓測測試環境、協助性能部署測試監控)

2)壓測工具(主要是壓力端的工具)

jmeter還是loadrunner
壓力機(window、linux)
如果對性能要求不高,用window壓力機即可,一般用的是linux

3)壓測環境:

硬件、軟件、部署描述清楚

3.5、壓測設計(最重要)

1)數據設計
①參數化數據—數據量–根據業務來

唯一性:tps500,壓測時間600s,至少需要30000數據量乘以20%,
非唯一性:tps500,也是時間600s,至少覆蓋線上時間被使用到的

如:注冊要用不同的用戶名,系統要求用戶名是唯一,就需要準備不同用戶名。
模擬不同的真實用戶,發送請求。

參數化數據設計多少?得根據業務來,對數據有唯一性。
若要求tps=500,壓測時間10分鐘,600s,至少需要30000數據量,但是壓力端在發送請求時,不是輪流發請求,假設起了200個線程,jmeter線程關系之間也是有競爭關系,也是要去爭奪cpu的執行權限。如果獲得cpu的執行權限,就將請求發送出去,可能有的線程獲得cpu執行權限多一點,發的請求數也會多,jmeter數據量把,一部分數據分成線程1,線程2,線程3,獲得cpu的執行權限不一樣,為了避免發的請求更多數據量不夠,再算出的數據量再乘以20%或者更多

對數據若沒有唯一性。如查詢商品,a\bc都可以查詢到電腦,商品表有10萬個商品,數據量應該設置多少?假設tps=500,壓測時間10分鐘,600s,至少需要30000數據量,商品表里有10萬數據,可以直接用,也可以直接統計線上某一段時間內哪些商品被搜索,再進行參數化,需要與線上覆蓋到(實際被使用到的數據)

參數化唯一性數據需要自己造
非唯一性數據在庫里存在,若想所有數據都需要參數化數據導出,若想拿某一些熱點數據進行參數化,就需要統計線上日志。

②數據庫存量

數據庫里各個表都存有數據,測時的數據庫量級與生產一致,方便復現線上回歸壓測復現問題,變量太多,盡量保持與生產一致(數據量級、環境差異、軟硬配置)

數據庫的表和生產量的數據庫表的盡量保持一致

2)場景設計(單場景、容量場景、穩定性場景等)
①單場景

單個業務接口進行壓測

生產環境有很多的業務功能,一般說系統的tps都是混合容量的tps,為什么還需要對單場景進行壓測?單個接口,鏈路簡單,可以發現明顯的性能Bug,可以為后續混合場景tps參考(代碼邏輯性能Bug、軟件配置bug如數據庫連接配置,應用代碼線程池里的配置)

②容量場景(混合場景)

容量場景一定需要集合業務比例模擬線上真實業務場景,在性能需求評審時不僅要給到目標tps,還需要給到業務比例,因為線上環境,每個接口調用次數不一樣。

涉及到有用戶登錄、查詢商品、添加購物差、創建訂單接口:若對這些業務做單場景測試,這四個接口就屬于壓測范圍。

單場景就是針對每一個業務(單獨的接口)去進行單獨指定目標、設計到加壓方式、表的數據量,腳本涉及到關鍵點,以及重點關注相關指標

根據圖中的單場景的目標tps是300、500、500、200,一般性能測試中給出的tps都是混合容量的tps。

在這里插入圖片描述

混合容量tps=800,接口業務占比,可以根據業務比例算出在混合容量場景各個接口的tps。創建訂單 業務比例10%,總的tps是800,則創建訂單接口的tps為800*10%=80
其他接口也是同樣算法:根據混合容量總的tps算出各接口在混合容量場景下的tps

在這里插入圖片描述

單場景若沒有指定目標tps,接口的目標tps至少是需要比混合容量場景中各接口的tps高(有的項目組會告訴單場景的tps,有的項目組則不會告訴單場景的tps,不指定的話根據總混合容量場景tps和業務比例是可以進行算出每個單接口的tps需要達到多少)

在這里插入圖片描述

圖中的業務比例是日志平臺統計業務峰值容量tps,分解出來各個接口的比例,在jmeter中設置的時候還需要進行轉換(吞吐量控制器)
在這里插入圖片描述
業務占比用戶登錄15%,查詢商品40%,添加購物車35%,創建訂單10%,根據日志平臺線上系統進行統計(有并發請求的業務的一個量,后面再根據jmeter的吞吐量控制器進行業務比例轉換)

③穩定性場景(防止系統在高峰值時掛)

壓測時需要設置一個持續時間,jmter中,循環次數勾選永遠,會設置一個持續時間

穩定性壓測時間設置多少合理?jmeter中,tps=總請求數/并發時間

并發時間=總請求數/tps
5000萬/800=62500s–建議,時間乘以120%
50000萬/1000=50000s,建議:時間乘以120%(防止跑到后面后,性能下降后,沒有達到5000萬的業務量)

穩定性場景的tps用的是混合容量場景測試出來的最大tps1000,用更大的tps跑出更少的時間。

在這里插入圖片描述

④加壓方式

秒殺、搶購----瞬間產生壓力

非秒殺、搶購-----逐步階梯加壓

3)監控設計

根據壓測接口的鏈路涉及的技術棧、選擇合適的監控工具
比如:鏈路監控工具是微服務的標配(服務很多,排查問題難)

java項目:通過鏈路監控工具,進行時間拆分,發現是應用耗時多(對應用接口的調用的方法,通過arthas之類工具看哪個是方法耗時多或者可能是jg在耗時,通過jdk自帶的相關命令進行查看,jstack)

系統架構、數據流向、技術棧需要清楚

3.6、測試計劃

流程的一個里程碑計劃、產出物什么、時間節點、負責人是誰?

3.7、風險評估

根據當前情況羅列出可能的風險(如涉及到外圍系統,外圍系統也屬于外圍風險、人力資源缺少、環境差異)

3.8、參考資料

4 、性能測試方案評審

寫好后項目組進行評審、性能測試計劃、性能測試場景怎么設計的.
根據評審會議的建議進行修改

評審會議通過后需要發送給各項目組的成員

5、申請性能測試環境

簡單架構(nginx+2 tomcat +mysql),nginx做反向代理,tomcat容器有兩個+mysql,看哪一個服務是影響大的,資源不足的話,對對應的服務等比例縮放進行兩次壓測,看損耗率。

初步判斷,瓶頸在應用層,第一次是一個tomcat,tps是100,兩個tomcat的tps是180,此處有20的tps的損耗。換算成損耗率,生產是3個tomcat,預估可以達到多少tps,現在簡單架構較少,一般都是復雜架構,復雜架構鏈路長,涉及的服務多,每一個服務的影響因子性能大小不一樣,很難換算。建議項目組進行評估,做好線上的保護,如限流。
大公司一般壓測環境不足,一般是直接線上全鏈路,充分利用線上的資源。

補充:新項目可以直接在線上環境壓測

6、性能測試用例編寫及評審

性能測試用例設計:一般是對性能測試場景進行設計

對單場景、混合容量場景、長時間穩定性的設計,重點就是各場景里的數值
單場景(目標tps、加壓方式、數據量、腳本設計等)

混合容量場景(業務比例、目標tps等)
長時間穩定性(總的壓測時間、總的目標業務量等)

7、搭建測試環境

參考測試資源壓測環境的部署
除了部署應用,還需要部署監控

8 、準備測試腳本、測試數據

8.1、腳本

推薦:開發提供壓測環境調通的postman或者jmeter腳本
或者根據接口文檔寫(swagger)

8.2、場景設計

8.3、準備數據

1)參數化數據

方式,代碼生成,從數據庫導出

2)數據庫存量數據

方式:
復雜表,jmeter跑業務接口
單表:代碼,存儲過程

9、環境確認測試

9.1、靜態測試

確認環境配置(軟件、硬件),盡量和生產保持一致
軟件(jdbc的配置、線程池的配置等是否和生產保持一致)

9.2、非靜態測試

確認環境是否可用(壓測的接口是否通、發送請求是否有響應響應結果是否正確等)

10、執行壓測并監控

先單場景測試發現明顯的性能bug,為容量場景做準備
混合容量場景:模擬真實線上的真實場景
再執行穩定性場景

執行壓測監控時,不要一次性打開所有監控,監控也是需要耗費監控資源。先通過jmeter非gui模式下持續階梯加壓跑一下,看一下結果,如不達標后,若是微服務(用skywalking)是哪一個節點耗時多,就著重監控不達標的節點(如果是mysql服務,則將mysql的服務打開),通過mysql監控看是什么問題,若有慢sql,后續就需要出現問題的接口執行的sql,拿出來用explain單獨分析sql執行情況

每一步需要哪個監控就開哪個監控

11、分析定位

11.1方法

1)簡單架構

查看資源消耗,通過監控發現應用服務器的CPU高,java項目可以進行打棧,看一下線程在做什么,下一步就是代碼邏輯。

2)復雜架構

通過分解時間方式(微服務skywalking)

舉例:
場景比對:加節點

懷疑是服務資源不足,可以進行加節點,
性能提升后就是服務資源不足導致的,服務為什么消耗資源,代碼邏輯是否合理。

隔離:這個功能會調另一個功能,先將一個功能去掉后再進行壓測。

12、性能優化

13、性能回歸

14、編寫性能測試報告

14.1、測試過程詳情以及對應的分析

14.2、測試問題總結及建議

14.3、問題匯總

14.4、風險評估

14.5、優化清單

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41704.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41704.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41704.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WebOffice在線編微軟Offfice,并以二進制流的形式打開Word文檔

在日常辦公場景中,我們經常會遇到這種場景:我們的合同管理系統的各種Word,excel,ppt數據都是以二進制數組的形式存儲在數據庫中,如何從數據庫中讀取二進制數據,以二進制數據作為參數,然后加載到瀏覽器的Office窗口&…

【無標題】地平線2西之絕境/Horizon Forbidden West? Complete Edition(更新:V1.3.57)

游戲介紹 與埃洛伊同行,在危險壯美的邊疆之地揭開種種未知的神秘威脅。此完整版可完整享受廣受好評的《地平線 西之絕境?》內容和額外內容,包括在主線游戲后展開的后續故事“炙炎海岸”。 重返《地平線》中遙遠未來的后末日世界,探索遠方的土…

Twitter群發消息API接口的功能?如何配置?

Twitter群發消息API接口怎么申請?如何使用API接口? 為了方便企業和開發者有效地與用戶互動,Twitter提供了各種API接口,其中Twitter群發消息API接口尤為重要。AokSend將詳細介紹Twitter群發消息API接口的功能及其應用場景。 Twit…

html+css+js貪吃蛇游戲

貪吃蛇游戲&#x1f579;四個按鈕控制方向&#x1f3ae; 源代碼在圖片后面 點贊??關注&#x1f64f;收藏?? 互粉必回&#x1f64f;&#x1f64f;&#x1f60d;&#x1f60d;&#x1f60d; 源代碼&#x1f4df; <!DOCTYPE html> <html lang"en"&…

15jQuery引入

【一】什么是jQuery jQuery是一個輕量級的、兼容多瀏覽器的JavaScript庫。jQuery內部封裝了原生的js代碼&#xff0c;提高編寫效率 【二】jQuery引入配置 1.● 代碼復制下來放到自己建的txt中&#xff0c;然后把他移入pycharm項目中重構成js文件(注意&#xff1a;只能在當前…

win10使用小技巧三

1. 添加照片查看器支持 目的&#xff1a;為Windows 10添加對特定圖片格式&#xff08;如JPG&#xff09;的支持&#xff0c;使用Windows照片查看器。步驟&#xff1a; 使用WinR打開運行窗口。輸入regedit&#xff0c;點擊確定進入注冊表編輯器。導航至HKEY_CURRENT_MACHINE\SO…

tomcat原理、結構、設計模式

1 what 一種web服務器&#xff0c;運行java servlet、jsp技術&#xff0c;能為java web提供運行環境并通過http協議處理客戶端請求。即tomcat http服務器 servlet容器。同類產品有jetty Web應用&#xff1a;Web應用是指通過Web瀏覽器訪問的應用程序&#xff0c;它使用Web技術…

平臺穩定性里程碑 | Android 15 Beta 3 已發布

作者 / 產品管理副總裁、Android 開發者 Matthew McCullough 從近期發布的 Beta 3 開始&#xff0c;Android 15 達成了平臺穩定性里程碑版本&#xff0c;這意味著開發者 API 和所有面向應用的行為都已是最終版本&#xff0c;您可以查閱它們并將其集成到您的應用中&#xff0c;并…

HTML 標簽列表(功能排序)

HTML 標簽列表(功能排序) HTML(超文本標記語言)是構建網頁的標準語言,它定義了網頁的結構和內容。HTML包含眾多標簽,每個標簽都有其特定的功能和用途。本文將按照功能對HTML標簽進行分類和排序,以幫助您更好地理解和使用這些標簽。 基礎結構標簽 <!DOCTYPE html>…

使用Node.js 框架( Express.js)來創建一個簡單的 API 端點

文章目錄 使用Node.js 框架&#xff08; Express.js&#xff09;來創建一個簡單的 API 端點什么是express安裝修改代碼 express 自動刷新 使用Node.js 框架&#xff08; Express.js&#xff09;來創建一個簡單的 API 端點 什么是express Express 是一個保持最小規模的靈活的 …

系統架構設計師——計算機體系結構

分值占比3-4分 計算機硬件組成 計算機硬件組成主要包括主機、存儲器和輸入/輸出設備。 主機&#xff1a;主機是計算機的核心部分&#xff0c;包括運算器、控制器、主存等組件。運算器負責執行算術和邏輯運算&#xff1b;控制器負責協調和控制計算機的各個部件&#xff1b;主存…

如何看自己電腦的ip地址?這些方法教你搞定

在數字化時代&#xff0c;網絡已經成為我們生活中不可或缺的一部分。對于每一個接入網絡的設備來說&#xff0c;IP地址就像是一個獨特的身份證&#xff0c;它標識著設備在網絡中的位置。對于電腦用戶而言&#xff0c;了解如何查看自己電腦的IP地址&#xff0c;不僅有助于我們更…

Linux設備驅動器 之一 工作(worker)線程

Linux設備驅動器之一 工作線程 數據結構Linux APIs產生工作線程 kthread_create_worker初始化工作 kthread_init_work排隊工作 kthread_queue_work 在Linux中的應用實列SPI 驅動器與imx SPI任務工作線程代碼啟動任務工作線程 工作線程&#xff08;worker&#xff09;Linux管理線…

14-44 劍和詩人18 - 你想怎么應用 RAG 與微調

?????? 要充分發揮 LLM 的潛力&#xff0c;需要在檢索增強生成 (RAG) 和微調之間選擇正確的技術。 讓我們研究一下何時針對 LLM、較小模型和預訓練模型使用 RAG 而不是微調。我們將介紹&#xff1a; LLM 和 RAG 的簡要背景RAG 相對于微調 LLM 的優勢何時針對不同模型大…

AI集成工具平臺一站式體驗,零門檻使用國內外主流大模型

目錄 0 寫在前面1 AI藝術大師1.1 繪畫制圖1.2 智能作曲 2 AI科研助理2.1 學術搜索2.2 自動代碼 3 AI智能對話3.1 聊天機器人3.2 模型競技場 4 特別福利 0 寫在前面 人工智能大模型浪潮滾滾&#xff0c;正推動著千行百業的數智化進程。隨著技術演進&#xff0c;2024年被視為是大…

linux修改內核實現禁止被ping

概述 Linux默認允許被ping。其主要決定因素為&#xff1a; 內核參數防火墻&#xff08;iptables/firewall&#xff09; 以上的決定因素是與的關系&#xff0c;即需要均滿足。 因此&#xff0c;修改linux禁被ping有以上兩種方法可以實現。 修改內核文件使禁ping 1. 臨時生…

服務預約自動化:智能機器人引領預約新潮流

在數字化時代&#xff0c;服務預約的需求日益增長&#xff0c;智能機器人以其自動化和智能化的特性&#xff0c;正在重塑服務預約的流程。 一、服務預約的現代挑戰 服務預約流程面臨的挑戰包括用戶操作復雜、等待時間長、個性化服務難以滿足等。 二、智能機器人的優勢 智能…

Perl 語言入門:編寫并執行你的第一個腳本

摘要 Perl 是一種高級、通用的、解釋型、動態編程語言&#xff0c;以其強大的文本處理能力而聞名。本文將指導初學者如何編寫和執行他們的第一個 Perl 腳本&#xff0c;包括 Perl 的基本概念、腳本的基本結構、運行 Perl 腳本的方法以及一些簡單的 Perl 語法。 引言 Perl&am…

保健品商城小程序模板源碼

保健品商城小程序模板源碼 簡潔通用的保健品&#xff0c;健康生活&#xff0c;零售商品&#xff0c;電子商務微信小程序前端模板下載。包含&#xff1a;主頁、購物車、客服、個人中心、我的訂單、商品詳情、我的錢包、設置等等。 保健品商城小程序模板源碼

定制化模型煉金術:Mojo模型與自定義訓練循環的動態融合

定制化模型煉金術&#xff1a;Mojo模型與自定義訓練循環的動態融合 在機器學習領域&#xff0c;模型訓練循環是構建智能系統的核心過程。Mojo模型&#xff0c;作為H2O.ai提供的一種模型部署格式&#xff0c;主要用于模型的序列化和預測。雖然Mojo模型本身不支持自定義訓練循環…