軟件測試——性能測試

目錄

一、性能測試簡介

二、性能測試指標?

三、性能測試的流程?

四、Jmeter簡介

五、Jmeter常見測試框架

六、Jmeter錄制腳本?

七、腳本增強?

八、Jmeter腳本參數化?

九、斷言?

十、關聯?

十一、JDBC請求?

十二、分布式測試?

十三、性能測試報告


一、性能測試簡介

性能測試:通過性能測試工具(Jmeter,Loadrunner),通過特定方式對系統施加一定壓力(正常場景、異常負載以及峰值條件來實施壓力,得到各項性能指標來保證系統的性能需求)。

性能測試原理:基于協議,用工具模擬實際操作(發送多個請求),并且收集數據生成報告。

性能測試的目的:

  • 評估系統的能力;
  • 識別系統的弱點(瓶頸);
  • 檢查系統的隱藏問題;
  • 保證系統的穩定性和可靠性;
  • 在保證用戶體驗感的同時節省資源;

性能測試一般在功能測試的中后期進行,性能測試是依賴于功能測試的。

性能測試一般要有獨立的測試環境,并且測試環境要進行用戶數據初始化。

前期的網絡測試能在局域網中進行,網絡影響小。

二、性能測試指標?

  • 響應時間:指的是從客戶端發送請求開始到收到服務的響應且看到響應內容為止的時間段,響應時間=網絡傳輸時間+服務器處理時間+瀏覽器解析呈現時間;
  • 用戶數:在線數:在軟件上不一定操作,并發數:在軟件上且在操作(特定時間或時段);
  • 資源利用率:常見資源有CPU、內存、磁盤、網絡帶寬;
  • 吞吐量:處理數據總量;
  • 吞吐率:單位時間內處理的數據量;
  • 點擊量:點擊的數量;
  • 點擊率:單位時間內點擊的次數;

軟件的性能是否達標是依據用戶的性能需求。

三、性能測試的流程?

  1. 分析用戶的性能需求,確定性能指標;
  2. 制定性能測試方案,設計性能測試的場景;
  3. 根據性能測試場景準備腳本,調試腳本,優化腳本,確保腳本能夠保證性能測試的需求;
  4. 執行測試腳本;
  5. 收集性能測試指標數據,與需求進行比對,性能調優,回歸測試;
  6. 生成測試報告。

四、Jmeter簡介

Jmeter是基于Java語言開發的開源測試工具:輕量級測試工具(與LoadRunner比較);

常用場景

  • 壓力測試:常用于web系統,可以錄制教本、參數化、斷言、關聯以及操作數據庫
  • 接口測試:http腳本(get,post),加cookie,加header、加權限認證以及上傳文件等

支持多種協議(web協議、webService、通過JDBC連接數據庫、FTP等)。

Jmeter的特性優點

  • 免費的開源軟件;
  • 簡單且直觀的圖形用戶界面;
  • Jmeter中負載和性能測試許多不同的服務器類型(HTTP、HTTPS,SOAP等)
  • 獨立于平臺的工具;
  • 擁有完整的Swing和輕量級組件支持;
  • 擁有完整的多線程框架;
  • 高度可拓展;
  • 用于執行應用程序的自動化測試和功能測試。

Jmeter的組成部分

  • 負載發生器:用于產生負載(發送請求),多進程(線程)模擬用戶行為;
  • 用戶運行器:腳本運行的引擎,附加在進程或線程之上的;
  • 資源生成器:生成測試過程中服務器的資源數據(收集測試數據);
  • 報表生成器:根據測試中獲取的數據生成報表,提供可視化的數據顯示方式;

Jmeter常見概念:

  • 測試計劃:描述一個性能測試包含本次測試的所有相關功能;
  • 線程組:一般一個線程組可看作一個虛擬用戶組,其中每個線程為一個虛擬用戶;
  • 取樣器:測試對象以及測試內容,是基于線程的,Jmeter支持多種取樣(Jmeter支持多種協議);
  • 監聽器:對測試結果進行處理和可視化展示的一系列組件,常見的有圖形結果、查看結果樹,聚合報告、表格結果等;
  • 控制器:驅動處理一個測試,有邏輯控制器和取樣控制器;
  • 配置元件:用于提供對靜態數據配置的支持;
  • 定時器:用于在操作之間設置等待時間;
  • QPS:每秒請求數(防止惡意刷取,增加項目負載)
  • 斷言:用于檢查測試中得到的響應數據是否符合預期;
  • 前置處理器:用于在實際請求發出之前對即將發出的請求進行特殊處理;
  • 后置處理器:用于對Sampler發出請求后得到的服務器響應進行處理,一般用于提取響應中的特定數據。

五、Jmeter常見測試框架

測試計劃:只要啟動Jmeter就會默認生成一個測試計劃,這個計劃包含了本次測試的相關功能。

線程(用戶):線程組:主線程組,核心,需要進行性能測試的內容(不可省略);

? ? ? ? ? ? ? ? ? ? ? ? setup 線程組:初始化的內容(可省略),若存在則最先運行;

? ? ? ? ? ? ? ? ? ? ? ? teardown線程組:收尾的內容(可省略);

線程屬性

  • 線程數(用戶數)
  • Ramp-up: 虛擬用戶啟動時間,用戶開始發請求的時間;
  • 循環次數:具體的次數,或者永遠(必須加調度器有持續時間,否則無法結束),當同時設置了次數并且添加調度器時間,以設置次數為準。

取樣器:測試對象及測試內容,基于線程的,即要模擬的動作

? ? ? ? ? ? ? 常用http請求:協議、服務器IP、端口號、方法、url地址、編碼方式

監聽器:用來查看測試結果,圖形化顯示,常用的有查看結果樹(同時查看請求和響應信息,綠色表示測試地址通常,不代表測試case成功,紅色代表異常)、聚合報告(匯總請求發送情況)、圖形結果(圖形化展示)、表格形式展示(可以查看啟動時間)。

Jmeter支持多個請求同時發送,支持多協議、多請求同時并發。

在聚合報告中,時間是以ms為單位的;

在匯總報告中,標準偏差體現穩定性的,表示離散程度,越小約好。

六、Jmeter錄制腳本?

1、http代理服務器設置(在Jmeter中完成);

添加http代理服務器(腳本記錄器),再添加線程組,將目標控制器選為如圖所示,端口默認是8888:

2、瀏覽器的設置;

在internet選項的連接中將局域網設置為如下:

在Jmeter的腳本記錄器中啟動,之后在瀏覽器中進行相關操作,就會錄制:

七、腳本增強?

tps:每秒事務處理量(每秒處理的消息數),表達系統處理能力的性能指標;

集合點:一般用來測試瞬間的并發能力;

思考時間:一般是用來模擬用戶的真實行為(用戶在頁面的停留時間),讓每個用戶的操作有一定差異,有了思考時間會減少服務器堆積的情景時間;

事務通過控制器來體現。

在Jmeter中通過定時器來實現集合點和思考時間。

集合點使用同步定時器,能夠實現真正的并發(先到的線程在集合點等后到的,等到期了就一起走),適用場景:秒殺、限購、搶票等

注意:設置集合的模擬虛擬用戶數不能大于線程數,否則會一直等待。

集合虛擬用戶數小于線程組中的用戶數,表示分批次集合,最后一批有可能不夠集合的數目,必須要設置等待時間。

集合虛擬用戶數等于線程組中的用戶數,表示所有虛擬用戶必須全部到達集合點,才一起開始下一個動作。如果模擬用戶數量設置為0表示全部用戶都參與集合。超時時間設置為0,當最后一批無法達到集合數量時將一直等待,等待到系統的最大值才釋放。

對于思考時間常用的是固定計時器和高斯隨機定時器;

固定計時器:固定停留(間隔),上下請求發出的時間間隔是固定的;

高斯隨即定時器:隨機停留(間隔),每個虛擬在請求前都是按照隨機事件間隔停留。

注意:在設置定時器時,固定偏移量和隨機偏移量不要同時設置,否則以固定偏移量為準。

八、Jmeter腳本參數化?

參數化的作用:讓數據變得不一樣,模擬每個線程(虛擬用戶)的數據不一樣,就進行參數化。

參數化實現的步驟:

  1. 判斷哪些參數需要實現參數化;
  2. 設置參數:新建變量(定義名稱),準備參數的值;
  3. 用參數代替需要參數化的數據(替換形式:${xx});

用戶定義的變量:自定義變量,適用于ip或者歡迎詞等只有一個參數值的數據,但是這個值可以變化;

配置原件 -> 用戶定義的變量。

前置處理器中的用戶參數:在請求發出之前,對請求的參數進行處理;

迭代:需要執行驗證的操作再執行一次。

線程數表示使用的用戶數;

特點:指定了用戶和參數的關系,適用于數量比較少的參數化操作,用戶和參數有特定關系。

配置原件中的CSV數據文件設置:必須先準備好參數文件是.csv文件格式或者.bat文件格式。

使用范圍:大批量用戶參數,并且參數值有一定規律(利用excel表格來準備參數文件)。

當設置的用戶參數數量少于虛擬用戶數時,就會循環重復使用參數。

將excel表格轉換為dat格式時,先保存為txt文本格式,再保存為dat格式,并且在bat文件中鍵和值之間用擁吻逗號分隔。

Tools中的函數助手:使用其中的CSVRead函數。

前提:準備好csv參數文件,注意不要加列表名(參數標題)。

設置csv文件的讀取列號從0開始。

作用域和執行順序:?

作用范圍:處于不同的級別,受控范圍和可控制的范圍是不一樣的,特別是定時器。

當一個定時器只應用于一個請求中,就將定時器作為請求的子節點加入;

當一個定時器同時應用于多個請求時,就將請求跟定時器放在同一個級別。

在Jmeter中,即使集合點放在請求子節點中仍可以實現同步。

在同一個作用域下,執行的順序如下:

配置原件 -> 前置處理器 -> 定時器 -> 取樣器 -> 后置處理器 -> 斷言 -> 監聽器

九、斷言?

作用:用于就檢查測試中得到的響應數據是否符合預期,用于保證性能測試過程中的數據交互與預期一致,主要用于做調試,在進行壓力測試時,斷言可以禁用。

目的:在request的返回層面加一層判斷機制。

實現過程

  1. 在請求下添加斷言(一個請求可以添加多個斷言),請求不同,添加的斷言不同;
  2. 添加一個斷言結果的監聽器,通過斷言結果可以看到是否通過斷言,若通過,斷言結果會打印一次請求的名稱,一個請求的所有斷言都通過了才算請求成功。

Jmeter中的斷言和LoadRunner中的檢查點是一致的。

常用斷言:

響應斷言:判斷返回的內容是否滿足預期;

作用對象:響應報文中的所有對象(響應代碼、響應文本、url等等)

在響應斷言下添加斷言結果:

大小斷言(size斷言):用來判斷返回內容的大小;

作用對象:返回信息,響應報文,添加size斷言,必須指定大小和長度

斷言持續時間:判斷服務器的響應時間是否達到預期;

作用對象:服務器;

BeanShell斷言:與Java語言相結合的斷言,用于驗證腳本。

十、關聯?

在測試過程中需要引用前面的數據,但是數據是經常發生變化的,那么要獲取使用這些數據,就需要使用關聯。

例如:第二個請求需要第一個請求返回數據的結果作為自己的輸入數據,此時就需要使用關聯將這兩個數據對接起來。

具體實現步驟:在第一個請求之后添加后置處理器;

后置處理器的作用:在請求結束之后,處理響應結果的特定數據,提取需要的數據。

在關聯的過程中,會通常使用到正則表達式提取器。

對于Jmeter的參數說明:

引用名稱:下一個請求要引用的參數名稱,比如填寫name時,就需要用${name}進行引用;

正則表達式:

  • ():括起來的部分表示要提取的;
  • . :匹配任何字符串;
  • +:一次或多次;
  • ?:在找到第一個匹配項后停止;

模板:用$$引用起來,如果正則表達式中有多個正則表達式,則可以是$2$$3$等等,

匹配數字:0代表隨機取值,1代表全部取值,通常情況下使用0;

缺省值:如果參數沒有取到值,就要給賦給默認值。

常用的正則表達式操作符:

后置處理器中的正則表達式:

十一、JDBC請求?

使用Jmeter通過jdbc請求來操作數據庫。

準備工作:準備數據庫環境(創建表、準備數據)

實現步驟:

1、添加jar包

  • 直接將jar包復制到jmeter的lib目錄(mysql推薦使用)
  • 通過Test Plan瀏覽加載(oracle推薦使用)

2、建立連接信息:在測試計劃中,點擊添加配置原件 -> JDBC Connection Configuration

3、添加JDBC請求

使用結果樹查看響應結果:

十二、分布式測試?

使用場景:在使用Jmeter進行性能測試時,對于高頻大并發的數據單臺電腦可能難以支持就需要進行分布式壓測,即對客戶端的壓力進行分攤,也叫負載均衡。

原理

  1. 在使用Jmeter進行測試時,選擇其中一臺作為主控調度機,其余作為執行機;
  2. 執行時,主控機器會把每個腳本發送到每臺執行機器上,執行機器拿到腳本就開始執行,執行機器不需要啟動GUI界面;
  3. 執行結束后,執行機器會把結果回傳給主機,主機收集所有的執行機器的測試數據進行匯總;

主控機器:生成腳本,調試腳本,匯總數據;

執行機器:運行腳本,回傳數據給主控數據;

具體實現步驟

1、執行機器的設置

  • 在執行機上安裝JDK和Jmeter(執行機和主控機的版本必須保持一致);
  • 添加環境變量;
  • 在啟動bin目錄下的:jmeter-server.bat;

易出現問題:提示無法啟動,請按任意鍵/文件找不到

解決方案:進入apache-jmeter-5.2\bin\jmeter.properties文件,將server.rmi.ssl.disable設置為true,重新啟動jmeter-server.bat,查看命令行窗口顯示則表示啟動成功。

2、主控機器設置:

  • 準備測試腳本;
  • 修改屬性配置文件:jmeter.properties 文件,修改IP和端口號,在文件中查找remote_hosts,原默認信息是127.0.0.1表示本機,修改host信息:執行機器IP:端口號,執行機器2號IP:端口號,默認端口號是1099,執行時,確保1099未被占用(端口號可以進行自定義)
  • 重新啟動jmeter.bat;
  • 在jmeter中點擊運行,再點擊遠程啟動,即可開啟分布式測試。

十三、性能測試報告

測試報告的大綱:目的、項目簡介、測試過程、測試結果以及項目總結。

性能測試報告的內容:概述、測試環境、測試目標(性能指標)、測試方法、測試數據分析、測試結論。

注意:在測試數據分析的過程中,必須按照不同的測試場景進行描述。

利用Jmeter生成html的測試報告:

方法一:

選擇添加監聽器中的聚合報告,將聚合報告輸出到指定的csv文件,在jmeter的工具中選擇Generate HTML report;

html報告展示:

方法二:在命令行窗口輸入命令來實現:

操作命令:jmeter -n -t 腳本的絕對路徑.jmx -l 測試報告的文件名稱.csv -e -o html報告的目錄路徑。

注意:報告的目錄文件必須為空目錄,測試報告文件也不能有數據,必須是空文件或者是不存在的文件。

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

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

相關文章

API接口技術開發拼多多接口鏈接采集實時銷量、SKU信息、券后價格、優惠券信息API接入步驟及演示示例

要實現拼多多接口鏈接采集實時銷量、SKU信息、券后價格、優惠券信息API接入步驟及演示示例,首先需要了解拼多多開放平臺的相關API接口。以下是一個簡單的Java示例,使用requests庫調用拼多多開放平臺的API接口: 注冊并登錄開放平臺&#xff0c…

【LeetCode】一周中的第幾天+ 一年中的第幾天

2023-12-30 文章目錄 一周中的第幾天方法一:模擬思路步驟 方法二:調用庫函數方法三:調用庫函數 [1154. 一年中的第幾天](https://leetcode.cn/problems/day-of-the-year/)方法一:直接計算思路: 方法二:調用…

react Hook useEffect的基本使用及注解

一、概述 useEffect是React提供的一個Hook,用于在函數組件中執行副作用操作。副作用操作通常包括數據獲取、訂閱事件、手動操作DOM等。useEffect可以讓我們在函數組件中模擬類組件的生命周期方法(如componentDidMount、componentDidUpdate、componentWi…

vue3+ts實現圖片預覽功能

首先&#xff0c;需要創建一個Vue組件&#xff0c;用于顯示圖片和預覽圖。 <template><div><img :src"imageSrc" mouseover"showPreview" mouseout"hidePreview" /><div v-if"previewVisible" class"previ…

【計算機考研】學碩還是專碩?

這里面沒有什么更好的選擇&#xff0c;大家都知道專碩錄取人數多&#xff0c;學碩錄取人數上&#xff0c;博弈一直存在 單就考研的難度上來說&#xff0c;專碩的難度確實要比學說低很多的&#xff0c;同樣的專業課的情況下&#xff0c;專碩的考研數學考的是數學二和英語二&…

rk3568 gamc0 控制器寄存器配置不了導致連接不上phy

系統啟動 GMAC 的驅動開機 log 上出現打印&#xff1a;No PHY found 或者 Cannot attach to PHY。查閱rk 官方gmac 配置指導手冊出現改問題的原因可能如下&#xff1a; 但反復檢查硬件和軟件發現都沒問題。看內核啟動日志發現gamc0 在啟動過程中讀取gmac0 的版本id是讀取不到&a…

P2440 木材加工

題目背景 要保護環境 題目描述 木材廠有 &#xfffd;n 根原木&#xff0c;現在想把這些木頭切割成 &#xfffd;k 段長度均為 &#xfffd;l 的小段木頭&#xff08;木頭有可能有剩余&#xff09;。 當然&#xff0c;我們希望得到的小段木頭越長越好&#xff0c;請求出 &a…

表格自定義音頻播放組件

1.在使用的地方調用 <Audiosvue ref"audio" class"audio-box" :audioFile"item.cont"></Audiosvue> 2.引入組件 import Audiosvue from "/components/audio"; 3.組件 <template><div><div style"d…

優化Vue項目中 WebStorm:2023.3 對 CSS 和 HTML 的默認注釋

前言 WebStorm是一種基于JetBrains IntelliJ平臺的集成開發環境&#xff08;IDE&#xff09;&#xff0c;專門用于Web開發。它支持JavaScript、HTML和CSS等語言&#xff0c;并提供了豐富的功能和工具&#xff0c;以提高開發人員的效率。但是&#xff0c;在開發Vue項目中發現&a…

(科目三)計算機操作系統

1、操作系統的基本概念及功能 1.1概念 一、操作系統的概念 操作系統是運行在裸機之上的&#xff0c;控制和管理計算機硬件和軟件資源、合理組織計算機工作流程一級方便用戶操作的程序集合。 操作系統由一套分層次的控制程序組成&#xff0c;是計算機硬件的一級擴充是軟件系…

【爬蟲逆向實戰 逆向滑塊 Python+Node】今天逆向的網站有點嘿嘿,還是僅供學習,別瞎搞

逆向日期&#xff1a;2024.03.01 使用工具&#xff1a;Node.js、Python 加密方法&#xff1a;AES標準算法 文章全程已做去敏處理&#xff01;&#xff01;&#xff01; 【需要做的可聯系我】 AES解密處理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 標準算…

Java底層自學大綱_互聯網安全設計篇

互聯網安全設計專題_自學大綱所屬類別學習主題建議課時&#xff08;h&#xff09; A 互聯網安全架構平臺設計001 如何防御XSS攻擊與防止抓包篡改數據2.5 A 互聯網安全架構平臺設計002 spring security實現動態權限控制2.5 A 互聯網安全架構平臺設計003 spring security整合j…

基于RISC-V架構的通信DSP的設計以及在5G RedCap基帶中的應用(六)-結論與展望

6 結論與展望 6.1 研究成果總結 基于RISC-V架構的向量指令集和通訊擴展指令集在5G Redcap基帶處理器中的應用&#xff0c;可以有效提升處理器在處理大量數據時的性能以及滿足特定應用需求的無線通訊能力。隨著5G技術的發展&#xff0c;對于滿足特定應用需求的行業&#xff0c;…

CentOS7 Mysql 忘記密碼或臨時密碼進不去時怎么跳過密碼進去然后再更改密碼

CentOS7 Mysql 忘記密碼或臨時密碼進不去時怎么跳過密碼進去然后再更改密碼 1、進文件 vi /etc/my.cnf2、加skip-grant-tables設置跳過密碼 在[mysqld]下面加 skip-grant-tables3、mysql -u root -p直接回車無密碼進去mysql mysql -u root -p3、先更新&#xff0c;不執行這…

實現unity場景切換

本文實現兩個按鍵實現場景1和場景2之間的切換 ①首先在unity 3D中創建兩個場景&#xff0c;分別為Scene1和Scene2 ②在Scene1中創建一個Button&#xff0c;修改txt內容為“To Scene2”&#xff0c;并在Buttons下創建一個空物體&#xff0c;用于掛載腳本。 腳本Trans Scene.…

操作系統x面試|進程與線程

1. 線程進程的區別 進程可以稱為是資源分配的最小單元&#xff0c;而線程可以稱為是處理器分配的最小單元。 資源包括內存空間。同時進程是一段代碼的執行過程&#xff0c;這段代碼需要多少的內存在代碼確定時已經確定下來了。 處理器就是執行單元&#xff0c;一個進程可以拆解…

程序員的金三銀四求職寶典

程序員的金三銀四求職寶典 金三銀四&#xff0c;即三月和四月&#xff0c;是程序員求職的黃金時期。在這個關鍵時期&#xff0c;求職者們需要做好充分的準備&#xff0c;以便在面試中脫穎而出。以下是一些建議&#xff0c;幫助程序員在金三銀四期間更好地準備求職&#xff1a;…

【DAY06 軟考中級備考筆記】數據結構:樹

數據結構&#xff1a;樹 3月1日 – 天氣&#xff1a;晴 之前在B站看的視頻講的是在太過簡單&#xff0c;棄了。現在換了新的視頻繼續&#xff0c;后續會重新看前面的視頻補過來。https://www.bilibili.com/video/BV1pT4m1S7uH/ 1. 樹的基本概念 需要注意的是&#xff1a; 并不是…

CentOS7使用yum安裝MySQL8.0教程

CentOS7使用yum安裝MySQL8.0 一、下載MySQL Yum下載倉庫二、安裝MySQL三、為MySQL運行提供相關的用戶以及環境四、啟動MySQL五、MySQL開機自啟六、修改MySQL中root賬戶的密碼 一、下載MySQL Yum下載倉庫 MySQL下載地址&#xff1a;https://dev.mysql.com/downloads/ 首先進入下…

【前端面試題3】如何實現一個元素的水平垂直居中

以下是題目的布局代碼&#xff1a; <div class"container"><div class"item" style"width: 100px; height: 100px; background: #999;">塊狀元素</div> </div><div class"container"><div class&qu…