隨著軟件行業的快速發展,現代的軟件系統越來越復雜,功能越來越多,測試人員除了需要保證基本的功能測試質量,性能也隨越來越受到人們的關注。但是一提到性能測試,很多人就直接連想到Loadrunner。認為LR就等于性能測試,其實這是不對的。LR只是性能測試的一個工具,但性能測試不僅僅是LR。本文會從以下幾個方面介紹基礎的性能測試理論,后續也會持續更新相關文章,盡量理論結合實踐,讓性能測試學習不在是工具的學習。
**目錄:**
一、?**什么是軟件性能**
二、****不同群體眼中的性能****
**三、**性能測試類型****
四、****性能測試應用場景****
五、**性能測試基本概念**
**六、理發店模型和地鐵進站模型**
**七、做好性能測試需要掌握的知識**
一、?**什么是軟件性能**
? ? ?**定義**:軟件的性能是軟件的一種**非功能特性**,它關注的不是軟件是否能夠完成特定的功能,而是在完成該功能時展示出來的**及時性**。
由定義可知性能關注的是軟件的非功能特性,所以一般來說性能測試介入的時機是在功能測試完成之后。另外,由定義中的及時性可知性能也是一種指標,可以用時間或其它指標來衡量,通常我們會使用某些工具或手段來檢測軟件的某些指標是否達到了要求,這就是性能測試。
**性能測試定義**:指通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。
二、**不同群體眼中的性能**
?????? 不同的人由于人生觀、世界觀、價值觀以及教育背景、知識體系、人生閱歷的不同,對于同一事物或問題的看法可能不同。對于軟件性能也是如此,不同的人由于視角的不同,所關注的點也可能不同。下面來看看在不同的人群眼中性能分別是什么樣的。
* **用戶眼中的性能**

* 開發眼中的性能

* **系統管理員眼中的性能**

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

測試人員通常是做為軟件質量控制的一個角色,不僅僅是找bug,需要對整個軟件的質量負責,性能也屬于質量的一部分,因此測試人員眼中的性能應該是全面的,考慮的東西也需要全面:
????????????? 1、測試人員需要考慮全面的性能,包括用戶、開發、管理員等各個視角的性能。
????????????? 2、測試人員在做性能測試時除開要關注表面的現象如響應時間,也需要關注本質,比如用戶看不到的服務器資料利用率,架構設計是否合理?代碼是否合理等言方方面面。
**三、**性能測試類型****
1. 基準測試:在給系統施加較低壓力時,查看系統的運行狀況并記錄相關數做為基礎參考
2. 負載測試:是指對系統不斷地增加壓力或增加一定壓力下的持續時間,直到系統的某項或多項性能指標達到安全臨界值,例如某種資源已經達到飽和狀態等 。
3. 壓力測試:壓力測試是評估系統處于或超過預期負載時系統的運行情況,關注點在于系統在峰值負載或超出最大載荷情況下的處理能力。
4. 穩定性測試:在給系統加載一定業務壓力的情況下,使系統運行一段時間,以此檢測系統是否穩定。
5. 并發測試:測試多個用戶同時訪問同一個應用、同一個模塊或者數據記錄時是否存在死鎖或者其他性能問題,
四、**性能測試應用場景(領域)**
1、性能測試應用場景(領域)主要有:能力驗證、規劃能力、性能調優、缺陷發現、性能基準比較,下表簡單介紹和對比了這幾個場景的各自用途和特點:?


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,用戶訪問)
**六、理發店模型和曲線拐點模型**
上面介紹了很多性能測試中的基本概念,比較抽象,可以通過[性能測試理發店模型](http://www.cnblogs.com/jackei/archive/2006/11/20/565527.html)?或[地鐵進站模型](http://www.cnblogs.com/puresoul/p/5458734.html)來幫忙我們更好的理解這些概念。這里不做詳細介紹了,需要的可直接查看原文。
**七、做好性能測試需要掌握的知識:**
* 掌握一門編程語言
* 掌握計算機原理和操作系統知識
* 良好的網絡基礎
* 掌握數據庫知識
* 中間件(apache,tomcat)
* 常用抓包工具
* 性能測試工具
- 第一章-測試理論
- 1.1軟件測試的概念
- 1.2測試的分類
- 1.3軟件測試的流程
- 1.4黑盒測試的方法
- 1.5AxureRP的使用
- 1.6xmind,截圖工具的使用
- 1.7測試計劃
- 1.8測試用例
- 1.9測試報告
- 2.0 正交表附錄
- 第二章-缺陷管理工具
- 2.1缺陷的內容
- 2.2書寫規范
- 2.3缺陷的優先級
- 2.4缺陷的生命周期
- 2.5缺陷管理工具簡介
- 2.6缺陷管理工具部署及使用
- 2.7軟件測試基礎面試
- 第三章-數據庫
- 3.1 SQL Server簡介及安裝
- 3.2 SQL Server示例數據庫
- 3.3 SQL Server 加載示例
- 3.3 SQL Server 中的數據類型
- 3.4 SQL Server 數據定義語言DDL
- 3.5 SQL Server 修改數據
- 3.6 SQL Server 查詢數據
- 3.7 SQL Server 連表
- 3.8 SQL Server 數據分組
- 3.9 SQL Server 子查詢
- 3.10.1 SQL Server 集合操作符
- 3.10.2 SQL Server聚合函數
- 3.10.3 SQL Server 日期函數
- 3.10.4 SQL Server 字符串函數
- 第四章-linux
- 第五章-接口測試
- 5.1 postman 接口測試簡介
- 5.2 postman 安裝
- 5.3 postman 創建請求及發送請求
- 5.4 postman 菜單及設置
- 5.5 postman New菜單功能介紹
- 5.6 postman 常用的斷言
- 5.7 請求前腳本
- 5.8 fiddler網絡基礎及fiddler簡介
- 5.9 fiddler原理及使用
- 5.10 fiddler 實例
- 5.11 Ant 介紹
- 5.12 Ant 環境搭建
- 5.13 Jmeter 簡介
- 5.14 Jmeter 環境搭建
- 5.15 jmeter 初識
- 5.16 jmeter SOAP/XML-RPC Request
- 5.17 jmeter HTTP請求
- 5.18 jmeter JDBC Request
- 5.19 jmeter元件的作用域與執行順序
- 5.20 jmeter 定時器
- 5.21 jmeter 斷言
- 5.22 jmeter 邏輯控制器
- 5.23 jmeter 常用函數
- 5.24 soapUI概述
- 5.25 SoapUI 斷言
- 5.26 soapUI數據源及參數化
- 5.27 SoapUI模擬REST MockService
- 5.28 Jenkins的部署與配置
- 5.29 Jmeter+Ant+Jenkins 搭建
- 5.30 jmeter腳本錄制
- 5.31 badboy常見的問題
- 第六章-性能測試
- 6.1 性能測試理論
- 6.2 性能測試及LoadRunner簡介
- 第七章-UI自動化
- 第八章-Maven
- 第九章-測試框架
- 第十章-移動測試
- 10.1 移動測試點及測試流程
- 10.2 移動測試分類及特點
- 10.3 ADB命令及Monkey使用
- 10.4 MonkeyRunner使用
- 10.5 appium工作原理及使用
- 10.6 Appium環境搭建(Java版)
- 10.7 Appium常用函數(Java版)
- 10.8 Appium常用函數(Python版)
- 10.9 兼容性測試