性能測試總結(一)---基礎理論篇

    隨著軟件行業的快速發展,現代的軟件系統越來越復雜,功能越來越多,測試人員除了需要保證基本的功能測試質量,性能也隨越來越受到人們的關注。但是一提到性能測試,很多人就直接連想到Loadrunner。認為LR就等于性能測試,其實這是不對的。LR只是性能測試的一個工具,但性能測試不僅僅是LR。本文會從以下幾個方面介紹基礎的性能測試理論,后續也會持續更新相關文章,盡量理論結合實踐,讓性能測試學習不在是工具的學習。

?

目錄:

一、?什么是軟件性能

二、不同群體眼中的性能

三、性能測試類型

四、性能測試應用場景

五、性能測試基本概念

六、理發店模型和地鐵進站模型

七、做好性能測試需要掌握的知識

?

正文:

一、?什么是軟件性能

? ? ??定義:軟件的性能是軟件的一種非功能特性,它關注的不是軟件是否能夠完成特定的功能,而是在完成該功能時展示出來的及時性

  由定義可知性能關注的是軟件的非功能特性,所以一般來說性能測試介入的時機是在功能測試完成之后。另外,由定義中的及時性可知性能也是一種指標,可以用時間或其它指標來衡量,通常我們會使用某些工具或手段來檢測軟件的某些指標是否達到了要求,這就是性能測試。?

  性能測試定義指通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。

?

二、不同群體眼中的性能

?????? 不同的人由于人生觀、世界觀、價值觀以及教育背景、知識體系、人生閱歷的不同,對于同一事物或問題的看法可能不同。對于軟件性能也是如此,不同的人由于視角的不同,所關注的點也可能不同。下面來看看在不同的人群眼中性能分別是什么樣的。

  • 用戶眼中的性能

  

  • 開發眼中的性能

  

  • 系統管理員眼中的性能

  

??????

  • 測試眼中的性能是什么樣的呢?

?????????????

    測試人員通常是做為軟件質量控制的一個角色,不僅僅是找bug,需要對整個軟件的質量負責,性能也屬于質量的一部分,因此測試人員眼中的性能應該是全面的,考慮的東西也需要全面:

????????????? 1、測試人員需要考慮全面的性能,包括用戶、開發、管理員等各個視角的性能。

????????????? 2、測試人員在做性能測試時除開要關注表面的現象如響應時間,也需要關注本質,比如用戶看不到的服務器資料利用率,架構設計是否合理?代碼是否合理等言方方面面。

?

三、性能測試類型

  1. 基準測試:在給系統施加較低壓力時,查看系統的運行狀況并記錄相關數做為基礎參考
  2. 負載測試:是指對系統不斷地增加壓力或增加一定壓力下的持續時間,直到系統的某項或多項性能指標達到安全臨界值,例如某種資源已經達到飽和狀態等 。
  3. 壓力測試:壓力測試是評估系統處于或超過預期負載時系統的運行情況,關注點在于系統在峰值負載或超出最大載荷情況下的處理能力。
  4. 穩定性測試:在給系統加載一定業務壓力的情況下,使系統運行一段時間,以此檢測系統是否穩定。
  5. 并發測試:測試多個用戶同時訪問同一個應用、同一個模塊或者數據記錄時是否存在死鎖或者其他性能問題,

?

四、性能測試應用場景(領域) 

1、性能測試應用場景(領域)主要有:能力驗證、規劃能力、性能調優、缺陷發現、性能基準比較,下表簡單介紹和對比了這幾個場景的各自用途和特點:?

 主要用途典型場景特點

常用性能

測試方法

能力驗證關注在給定的軟硬件條件下,系統能否具有預期的能力表現在要求平均響應時間小于2秒的前提下,如何判斷系統是否能夠支持50萬用戶/天的訪問量?a)要求在已確定的環境下運行
b)需要根據典型場景設計測試方案和用例,包括操作序列和并發用戶量,需要明確的性能目標。
a)負載測試
b)壓力測試
c)穩定性能測試
規劃能力關注如何使系統具有我們要求的性能能力

某某系統計劃在一年內獲客量在到xxx萬,系統到時候是否能支持這么多用戶量?如果不能需要如何調整系統的配置?a) 它是一種探索性的測試
b) 常用于了解系統性能和獲得擴展性能的方法
a) 負載測試
b) 壓力測試
c) 配置測試
性能調優主要用于對系統性能進行調優某某系統上線運行一段時間后響應速度越來越慢,此時應該如何辦?每次只改變一個配置,切忌無 休止的調優a) 并發測試
b) 壓力測試
c) 配置測試
缺陷發現發現缺陷或問題重現、定位手段某些缺陷只有在高負載的情況下才能暴露出來,如線程鎖、資源競爭或內存泄露。做為系統測試的補充,用來發現并發問題,或是對系統已經出現的問題進行重現和定位a) 并發測試
b) 壓力測試

性能基準比較   常用于敏捷開發過程中,敏捷開發流程的特點是小步快走,快速試錯,迭代周期短,需求變化頻繁。很難定義完善的性能測試目標,也沒有時間在每個迭代開展詳細的性能測試,可以通過建立性能基線,通過比較每次迭代中的性能表現變化,判斷迭代是否達到了目標。

2、通常在某個性能場景(領域)中需要聯合使用多種性能測試方法一起進行性能測試,下表為性能測試應用領域與測試方法關聯:

?

能力驗證

規劃能力

性能調優

缺陷發現

性能基準比較

基準測試

?

?√

?

?

負載測試

?√

?

?

壓力測試

并發測試

?

?

?

穩定性測試

?

?

?

?

?

五、性能測試基本概念

  1、響應時間

    a)定義:從用戶發送一個請求到用戶接收到服務器返回的響應數據這段時間就是響應時間

    b) 關鍵路徑:下圖為一次http請求經過的路徑,請求會經過網絡發送到web服務器進行處理,如果需要操作DB,再由網絡轉發到數據庫進行處理,然后返回值給web服務器,web服務器最后把結果數據通過網絡返回給客戶端。

    

    c) 計算方法:Response time = (N1+N2+N3+N4)+ (A1+A2+a3),即:(網絡時間 + 應用程序處理時間)

    d) 響應時間-負載對應關系:

     ? ??

     圖中拐點說明:

      1、響應時間突然增加

      2、意味著系統的一種或多種資源利用達到的極限

      3、通常可以利用拐點來進行性能測試分析與定位

  2、吞吐量

    a)定義:單位時間內系統處理的客戶端請求的數量

    b)計算單位:一般使用請求數/秒做為吞吐量的單位,出可以使用?頁面數/秒表表示。

      另外,從業務角度來說也可以使用?訪問人數?/天 或 頁面訪問量/天 做為單位。

    c)計算方法:Throughput = (number of requests) / (total time).

    d吞吐量-負載對應關系:

            

     圖中拐點說明:

      1、吞吐量逐漸達到飽和

      2、意味著系統的一種或多種資源利用達到的極限

      3、通常可以利用拐點來進行性能測試分析與定位?

  3、并發數:

    并發用戶數:某一物理時刻同時向系統提交請求的用戶數,提交的請求可能是同一個場景或功能,也可以是不同場景或功能。

    在線用戶數:某段時間內訪問系統的用戶數,這些用戶并不一定同時向系統提交請求

    系統用戶數:系統注冊的總用戶數據

    

    三者之間的關系:系統用戶數 >= 在線用戶數?>= 并發用戶數

  4、資源利用率

    a)?定義:指的是對不同系統資源的使用程度,通常以占用最大值的百分比來衡量

    b) 通常需要關注的服務器資源如下:

      1、CPU:就像人的大腦,主要負責相關事情的判斷以及實際處理的機制

      2、內存:大腦中的記憶塊區,將眼睛,皮膚等收集到的信息記錄起來的地方,以供cpu進行判斷,但是是臨時的,訪問速度快,如果關機或斷電這里的數據會消失。

      3、磁盤IO:大腦中的記憶區塊,將重要的數據保存起來(永久保存,關機或斷電不會丟失,速度慢),以便將來再次使用這些數據。

      4、網絡:

    c)資源利用-負載對應關系:

      

     圖中拐點說明:

      1、服務器某薦資源使用逐漸達到飽和

      2、通常可以利用拐點來進行性能測試分析與定位

  5、其它常用概念:

    a) TPS:Transactions Per Second,每秒事務數

    b)?思考時間:用戶每個操作后的暫停時間,或者叫操作之間的間隔時間,此時間內是不對服務器產生壓力的

    c)?點擊數:每秒鐘用戶向WEB服務器提交的HTTP請求數。這個指標是WEB應用特有的一個指標:WEB應用是"請求-響應"模式,用戶發出一次申請,服務器就要處理一次,所以點擊是WEB應用能夠處理的交易的最小單位。如果把每次點擊定義為一個交易,點擊率和TPS就是一個概念。容易看出,點擊率越大,對服務器的壓力越大。點擊率只是一個性能參考指標,重要的是分析點擊時產生的影響。需要注意的是,這里的點擊并非指鼠標的一次單擊操作,因為在一次單擊操作中,客戶端可能向服務器發出多個HTTP請求.

    d)PV:訪問一個URL,產生一個PV(Page View,頁面訪問量),每日每個網站的總PV量是形容一個 網站規模的重要指標。

      ?UV:作為一個獨立的用戶,訪問站點的所有頁面均算作一個UV(Unique Visitor,用戶訪問)

?

六、理發店模型和曲線拐點模型

  上面介紹了很多性能測試中的基本概念,比較抽象,可以通過性能測試理發店模型?或?地鐵進站模型來幫忙我們更好的理解這些概念。這里不做詳細介紹了,需要的可直接查看原文。

?

七、做好性能測試需要掌握的知識:

  • 掌握一門編程語言
  • 掌握計算機原理和操作系統知識
  • 良好的網絡基礎
  • 掌握數據庫知識
  • 中間件(apache,tomcat)
  • 常用抓包工具
  • 性能測試工具

?

本文轉自賀滿博客園博客,原文鏈接:http://www.cnblogs.com/puresoul/p/5456855.html,如需轉載請自行聯系原作者。


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

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

相關文章

Makefile 7——自動生成依賴關系 三顆星

后面會介紹gcc獲得源文件依賴的方法,gcc這個功能就是為make而存在的。我們采用gcc的-MM選項結合sed命令。使用sed進行替換的目的是為了在目標名前加上“objs/”前綴。gcc的-E選項,預處理。在生成依賴關系時,其實并不需要gcc編譯源文件&#x…

JavaScript使用場景

JavaScript嵌入頁面的方式 1、行間事件&#xff08;主要用于事件&#xff09; <input type"button" name"" onclick"alert(ok&#xff01;);">2、頁面script標簽嵌入 <script type"text/javascript">var a 你好&#…

集合添加元素python_Python 集合(Set)

Python 集合&#xff08;Set&#xff09; 在本文中&#xff0c;您將學習關于Python集的所有內容;如何創建它們、添加或刪除其中的元素&#xff0c;以及在Python中對集合執行的所有操作。 Python中的集合是什么&#xff1f; 集合是項目的無序集合。每個元素都是唯一的&#xff0…

一個極其高效的虛擬機內存冗余消除機制:UKSM

Linux內核機制KSM(Kernel Samepage Merging)能合并KVM虛擬機之間相同內存的頁面&#xff0c;被CentOS, RHEL之類的服務器內核廣泛采用&#xff0c;但是其速度很慢。UKSM(Ultra KSM)是國人在此基礎上的極大改進。通過使用了更高級的算法&#xff0c;UKSM的新特性包括&#xff1a…

【分享】 codeReview 的重要性

研發都知道代碼 Review 的重要性&#xff0c;在代碼 Review 也越來越受大家重視&#xff0c;我參與了大量的代碼 Review&#xff0c;明顯地感受到有效的代碼 Review 不但能提高代碼的質量&#xff0c;更能促進團隊溝通協作&#xff0c;建立更高的工程質量標準&#xff0c;無論對…

FFMPEG功能

FFMPEG功能1&#xff0e; 視頻音頻格式轉換Ffmpeg能使用任何支持的格式和協議作為輸入&#xff1a;*比如你可以輸入YUV文件&#xff1a;ffmpeg -i /tmp/test%d.Y /tmp/out.mpg 它將要使用如下文件&#xff1a; /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,/tmp/test1.Y, /tmp…

線程02

2019獨角獸企業重金招聘Python工程師標準>>> 線程中有幾個方法需要我們區分 1 sleep方法是表示線程執行到這的時候只是暫時處于“睡眠”狀態&#xff0c;在這種狀態下線程是不會釋放CPU資源的&#xff0c;當到達休眠時間后&#xff0c;線程繼續“起來”干活。當線程…

@postconstruct注解方法沒有執行_把對象的創建交給spring來管理(注解IOC)

自動按照類型注入/** * 賬戶的業務層實現類 * * 曾經XML的配置&#xff1a; * <bean id"accountService" class"com.itheima.service.impl.AccountServiceImpl" * scope"" init-method"" destroy-method""> * <pro…

解決-ubuntu 安裝redis無法啟動

解決-ubuntu 安裝redis無法啟動 環境 Ubuntu 16.04 Port 6379 Redis version 5:4.0.9-1 1-安裝 apt install redis2-安裝完成-自啟時提示啟動服務失敗 Errors were encountered while processing:redis-serverredis E: Sub-process /usr/bin/dpkg returned an error code (1…

JavaScript中的數據類型轉換

js數據類型轉換 使用&#xff1a;Number&#xff08;&#xff09;、parseInt() 和parseFloat&#xff08;&#xff09; 做類型轉換 Number()強轉一個數值(包含整數和浮點數)。*parseInt()強轉整數&#xff0c;*parseFloat&#xff08;&#xff09;強轉浮點數函數isNaN()檢測參…

web.xml(8)_jsp-config

13.jsp-config jsp-config元素主要用來設定JSP的相關配置,<jsp:config>包含<taglib>和<jsp-property-group>兩個子元素.當中<taglib>元素 在JSP 1.2時就已經存在了;而<jsp-property-group>是JSP 2.0新增的元素. taglib :對標記庫描寫敘述符文件&…

CABAC之手把手教你編碼

首先要說明的是CABAC的生命期是SLICE,因此本篇所講的也是一個SLICE里CABAC的流程,其次對于我們來說場模式幾乎用不到,所以本文的編碼流程只使用幀模式,因此實際上用到的表只有277個, 當然如果我寫成399, 不是說里面所有表都用到的. 這里只是聲明一下這個問題, 如果大家實際操作…

python網絡攻擊代碼_Python-python網絡編程寫arp攻擊代碼

from scapy.all import ARP,send,arping import sys,re,random,time stdoutsys.stdout ip IPADDR"192.168.1.102" 網關 gateway_ip"192.168.1.1" tmp[] 偽造網關mac地址 for i in range(0,6): tmp.append(str("%02x"%random.randint(0x01,0xfe))…

Kubernetes初步學習

今天分享如題&#xff1a; Kubernetes 本篇內容源于工作項目需要自學 但K8s確實現在十分的主流so推薦給大家 最近更新緩慢由于工作太忙惹&#xff0c;忙里偷閑整理愿分享能與君共勉&#x1f4aa; 大家新年快樂&#x1f389; &#x1f508;言歸正題&#xff0c;相信很多朋友…

手機界面常見的的九宮格

手機界面常見的的九宮格 手機界面常見的的九宮格 首先布局的話需要用到一個mainactivity和一個item的布局目前用得最多也最熟悉的還是LinearLayout布局所以&#xff0c;一下也是&#xff0c;按套路就不過多贅述了。 <GridView android:layout_width"wrap_content"…

JavaScript中的運算符

js運算符 算 字 賦 比 邏 位 它算術運算符 - * / --字符串連接 賦值運算 - %比較運算符 < > > < ! !邏輯運算符 && || !位運算 ^ & | << >>其它運算符 ? : 三元運算符 delete&#xff1…

CABAC編碼

H&#xff0e;264&#xff0f;AVC標準采用了很多新技術和新方法&#xff0c;大大提高了視頻編碼效率&#xff0c;其中CABAC便是H&#xff0e;264&#xff0f;AVC采用的新型熵編碼方法之一。CABAC采用了高效的算術編碼思想&#xff0c;同時充分考慮了視頻流相關統計特性&#xf…

【教程分享】Jmeter入門教程

好&#xff01;回歸學長每周的教程分享&#xff01; PART2 >今天又來分享Jmter 因為最近好像有相關工作內容 提前準備資修一下 分享僅供參考- JMeter的作用對軟件做壓力測試 1.能夠對HTTP和FTP服務器進行壓力和性能測試&#xff0c; 也可以對任何數據庫進行同樣的測試&…

linux 特殊shell變量

特殊變量 環境變量&#xff1a; 系統本身運行需要由linux系統提前創建好的一類變量 主要用于用戶的工作環境&#xff0c;包括&#xff08;用戶的宿主目錄&#xff0c;命令的查找路徑&#xff0c;用戶的當前目錄&#xff0c;登錄的終端等&#xff09;環境變量的值由操作系統本身…

JavaScript中的循環

js循環 程序中進行有規律的重復性操作&#xff0c;需要用到循環語句。 break 和 continue 語句對循環中的代碼執行提供了更嚴格的控制。 for循環 for(var i0;i<len;i){...... }while循環 var i0;while(i<8){......i;}for-in 語句 for-in 語句是嚴格的迭代語句&…