# 性能測試
> ### 什么是系統的性能
一個系統做出來了,客戶需求說明書上的功能都已經完全且準確無誤地實現了,這只表明系統能做事了,但是做得怎么樣還有待驗證,這里所說的,“做得怎么樣”,就可以簡單地理解為系統的性能。
> ### 什么是系統的性能測試?
性能測試,是指在一定的軟件、硬件及網絡條件下,通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試,從而發現系統的性能瓶頸。
也就是說,通過各種測試策略,模擬真實的用戶使用場景,驗證系統能“做得怎么樣”。
> ### 性能測試的常用術語
* 并發用戶
并發用戶,一般分為2種情況。
一種是**絕對并發**,即所有的用戶在同一時刻做同一件事情或者操作,這種操作一般指做同一類型的業務。
一種是**相對并發**。多個用戶對系統發出了請求或者進行了操作,但是這些請求或者操作可以是相同的,也可以是不同的。對整個系統而言,仍然是有很多用戶同時對系統進行操作,因此也屬于并發的范疇。
**并發用戶數的誤解**:關于用戶并發的數量,有2種常見的錯誤觀點。 一種錯誤觀點是把并發用戶數量理解為使用系統的全部用戶的數量或者是系統的注冊用戶,理由是這些用戶可能同時使用系統;還有一種比較接近正確的觀點是把在線用戶數量理解為并發用戶數量。實際上在線用戶也不一定會和其他用戶發生并發,例如正在瀏覽網頁的用戶,對服務器沒有任何影響。
* 點擊率(Hits)
單位時間用戶向WEB服務器提交的HTTP請求數。點擊率和TPS就是一個概念。需要注意的是,這里的點擊并非指鼠標的一次單擊操作,因為在一次單擊操作中,客戶端可能向服務器發出多個HTTP請求。
* 事務響應時間
事務響應時間指的是從客戶端發起請求開始,到客戶端接收到從服務器端返回的響應結束
標準可參考業界的3/5/10原則:
1. 在3秒鐘之內,頁面給予用戶響應并有所顯示,可認為是“很不錯的”;
2. 在3~5秒鐘內,頁面給予用戶響應并有所顯示,可認為是“好的”;
3. 在5~10秒鐘內,頁面給予用戶響應并有所顯示,可認為是“勉強接受的”;
4. 超過10秒就讓人有點不耐煩了,用戶很可能不會繼續等待下去。
* 90%的事務響應時間
90%的響應時間,是指在一次完整的測試過程中,所有事務的請求時間,按從小到大順序排序,90%的事物所消耗的時間范圍。
* 吞吐量(TPS)
吞吐量是我們常見的一個軟件性能指標,對于軟件系統來說,就是指軟件系統在每單位時間內能處理多少個事務/請求等。
* 集合點
用來實現絕對并發
* 資源利用率(內存、CPU、網絡、I/O的利用率等 Resource utilization)
資源利用率指的是對不同系統資源的使用程度,例如服務器的CPU(s),內存,網絡帶寬等。資源利用率通常以占用最大值的百分比n%來衡量。
> ### 性能測試策略
* 負載測試
在一定的軟件、硬件及網絡條件下,通過運行一種或多種業務在不同虛擬用戶數量情況下,測試系統的性能指標是否在用戶的要求范圍內,用于確定系統所能承受的**最大有效用戶數**以及不同用戶數下的系統響應時間及服務器的資源利用率。
負載測試強調的是在一定的環境下系統能夠達到的峰值指標,大多數的性能測試都是負載測試。這種方法的目的是找到系統處理能力的極限,通過模擬不同數量級的用戶,找到如“響應時間不超過10秒”,“服務器平均CPU利用率低于65%”時的用戶數。
負載測試場景:
~~~
50個用戶同時下單請求 響應時間 消耗資源
100個用戶同時下單請求 響應時間 消耗資源
150個用戶同時下單請求 響應時間 消耗資源
200個用戶同時下單請求 響應時間 消耗資源
~~~
* 壓力測試
在一定的軟件、硬件及網絡條件下,通過模擬大量的虛擬用戶向服務器產生負載,使服務器的資源處于極限狀態下并長時間連續運行,以測試服務器在高負載情況下是否能夠穩定工作。
* 絕對并發測試
通過模擬多個用戶并發訪問一個應用或一個應用的某個功能,同一個存儲過程,或接口以及其他并發操作,測試程序是否支持多用戶訪問,是否存在死鎖,線程同步的問題。
* 疲勞測試
疲勞測試,有些公司也叫可靠性測試,是軟件系統長時間(8小時,7\*24小時)運行系統,檢查系統是否能穩定運行,有沒有內存泄漏等。
內存溢出--需要占用的內存超過系統的可用內存 (OOM:OutOfMemory)
內存泄漏--內存被長期占用,無法被回收。
程序沒有做多線程處理:程序在單用戶場景下運行成功,多用戶運行則失敗,提示連不上服務器。
線程同步的問題:程序實現的功能是,隨機給用戶分配不同的任務,單用戶運行時,能成功分配;多用戶并發申請任務時,所有用戶得到的任務都是一樣的。
> ### 性能測試指標
一般來說,性能測試關注的指標有這些:
1、事務成功率
2、事務平均響應時間和90%的事務響應時間
3、吞吐量(TPS)
4、CPU,內存,IO使用率
> ### 性能測試流程
1. 熟悉性能測試需求,確定性能測試點和測試指標;
2. 開發性能測試腳本并調優;
3. 準備性能測試環境,性能測試數據,設計性能測試場景;
4. 監控性能測試環境;
5. 運行性能測試;
6. 分析性能測試結果,提交性能測試bug單,跟蹤問題單直到問題被解決;
7. 輸出性能測試報告。
> ### Jmeter簡介
Jmeter是一種預測系統行為和性能的負載測試工具。它通過模擬實際用戶的操作行為和實行實時性能監測,來幫助測試人員更快的查找和發現問題。
* Jmeter工作原理圖:

* Jmeter環境的搭建:
1. 因為JMeter是JAVA程序開發的,所以要先安裝JDK;
2. 配置JAVA環境變量,包括:JAVA\_HOME,PATH,CLASSPATH;
3. 雙擊jmeter的bin目錄里面的jmeter.bat文件,就可以啟動Jmeter。
- 總章
- Oracle數據庫
- 常見的Linux命令
- 理論內容整理
- 給你如下功能怎么測試
- 支付怎么測試
- 購物車怎么測試?
- 搜索功能怎么測試?
- 文件上傳功能怎么測試?
- 登錄功能怎么測試?
- 還款功能怎么測試?
- 訂單功能怎么測試?
- 自動化測試篇
- 必記代碼
- 接口測試篇
- 性能測試篇
- app測試篇
- 面試篇
- 項目篇
- 職業素養篇
- 真實案列分析
- 如何預防冷場
- redis
- 琪琪
- 禪道搭建手冊
- 禪道搭建手冊1
- 禪道的基本使用
- 基于Python3_Selenium的自動化
- Python3安裝
- Python3基礎
- 列表_元組_集合
- 函數_模塊_類
- Python代碼
- selenium環境
- selenium定位方式
- Selenium常見操作
- toast讀取代碼
- 添加用戶代碼
- 隱式等待與顯式等待
- 循環添加用戶
- 測試用例練習
- 測試用例優化
- Fiddler抓包工具
- 安裝
- Fiddler使用
- 接口測試
- Jmeter的安裝
- Jmeter使用
- jmeter+ant+jenkins接口自動化測試框架
- 接口安全測試
- 性能測試
- Nmon監控LInux系統
- Jmeter分布式
- 性能測試-具體案例
- Monkey
- 安裝1
- Monkey使用
- appium自動化
- appium的安裝
- appium基本使用
- 真機USB連接
- 問題排查
- Jenkins持續集成
- Jenkins安裝
- Jenkins配置任務
- Python擴展內容
- Python連接數據庫
- Python進行接口測試
- 開啟服務