一、性能測試問題導入
1.關注於哪些指標
- 單位時間內的響應速度快不快(1個用戶和多個用戶)——打開速度快不快
- 單位時間內能夠處理的數量——能夠同時讓多少人訪問(並發量)
2.怎么調優
性能評估匯報:某某app,在1000用戶同時(**並發量**)進行以下操作(**性能場景**):
1.登錄
2.查詢
3.評價
消息成功率:100%
平均響應時間為0.03s(**響應時間**)
CPU使用率:80%,內存使用率:90%,網絡帶寬:50M,磁盤空間:50%(**資源使用率**)
3.性能測試的關鍵點
- 監控,分析,調優
二、測試對象
1.服務器的接口性能測試(80%):驗證服務器是否滿足需求
- 模擬器-jemeter,模擬http協議,鏈接到后台服務器(web服務器+數據庫服務器MySQL+Linux操作系統)
2.終端性能測試(web端渲染/APP啟動速度——UI性能):受用戶環境影響,如網絡較好/較差
三、什么是性能測試
1.性能測試也是軟件測試的一種,它的主要方向是測試系統在一定的負荷壓力下,系統的響應時間,吞吐量(TPS),穩定性,系統的可擴展性等性能指標
- 吞吐量(漏斗,倒東西可以很快流下來)
2.性能測試的基本目的
- 驗證是否達到用戶的性能指標(逐步加壓,1000人-》2000人,是否會有響應超時等錯誤)
- 發現軟件中存在的性能瓶頸並優化
- 測試中得到的負荷和響應時間數據用於驗證——評估系統的能力
四、性能測試重點:關鍵業務領域的性能
- 測試是在時間、成本、質量之間權衡
五、性能測試一般流程
- 評估-》加壓-》bug,瓶頸-》分析,
調優
-》長時間跑(穩定性)
六、性能測試與項目
1.性能測試做的成功與否,與測試方法和測試自身所關聯的項目背景都有關系(並不是所有的項目都需要性能測試)
2.學習性能:測試思維方法、分析方法
七、性能測試關鍵指標
+ 多:並發量
+ 快:延時,響應時間(用戶感知的時間,是端到端的)
+ 好:穩定性(長時間運行)
+ 省:資源使用率
思考時間(think time):指用戶進行操作時每個請求之間的時間間隔,`為了能更加真實的模擬用戶的操作`
1.響應時間:對請求作出響應所需要的時間,是用戶感知軟件性能的主要指標;
- 對於一個web系統,普遍接受的響應時間標准為2/5/8秒
2.並發用戶數
-
平均並發用戶數的計算模型:C=nL/T(常用計算模型-可供參考)
- C-是平均的並發用戶數
- n-是平均每天訪問用戶數
- L-是一天內用戶從登錄到退出的平均時間
- T-是考察時間長度(一天內多長時間有用戶使用系統)
-
估算並發用戶數量公式:使用系統用戶數量*(5%~20%)
3.吞吐量:指單位時間內系統處理用戶的請求數
- TPS(吞吐率):每秒事務數
- 若用戶數增加到某個值后,用戶數增加,吞吐量不變,一般原因是由於網絡堵塞,需要增大帶寬
八、jmeter基礎簡介
1.jmeter性能測試工具簡介
- 多線程框架——支持
多並發
操作 - 用戶對服務器模擬負載(一台機器若負載太大,可做分布式性能測試)
- 支持web、數據庫、FIP服務器系統的性能測試
- 開源(源碼公開)、純JAVA,可二次定制化開發
2.jmeter運行環境搭建
1) 下載安裝JDK(若jmeter版本為5.11,JDK版本需安裝大於1.8的)
2)設置環境變量(Java環境是OK的)
3)啟動方式
- GUI(界面化):windows(jmeter.bat啟動)或Mac(jmeter.sh啟動)系統
- 非GUI(非界面化,命令行):Linux系統
在jmeter安裝路徑的bin文件夾下創建終端命令窗口,輸入sh jmeter命令打開GUI界面
4)屬性配置:更改jmeter.properties文件
- language=zh_ch(37行)將應用程序設置為中文簡體
3.jmeter基本操作
- 獨立運行每個線程組(勾選,線程組有前后邏輯關系;不勾選,線程組同步進行)
- 調度器(設置執行一段時間)(循環次數勾選永遠)
- 黃色/紅色的三角標志,操作日志
九、jmeter主要元件
1.配置元件
http請求默認值
:所有線程組的請求都會使用這個默認值- 性能工具:多進程(roadrunner),多線程(jmeter),線程數就代表用戶數
http消息頭管理器
:添加授權頭的值http cookie管理器
:添加后會自動管理cookie,即上個接口響應返回的cookie值可用於下個接口的請求中
http cache管理器
:緩存,靜態資源不是從服務器獲取而是從靜態中取的- 提取返回請求返回結果中的值賦予某個變量用於下一個接口,使用
$.token
——關聯接口
2.監聽器元件
-
察看結果樹
- 分析查看具體某一個請求的詳情(請求頭、請求體、響應頭、響應體)
- 在做性能測試場景的時候分析錯誤請求的原因——勾選僅錯誤日志按鈕,在高並發狀態下只顯示錯誤日志
-
聚合報告
- 匯總統計:請求數、響應時間(平均的,90%,95%)等,單位是ms
- 錯誤率——越低越好
- 吞吐量——越高越好
- 發送/接收——帶寬
-
用表格查看結果
-
圖形結果
3.其他常用元件
- 前置處理器:請求發出去之前執行的控制器(元件),比如加密 md5
- 后置處理器:請求發出去之后執行的控制器(元件),比如提取數據——關聯接口
- 定時器
- 思考時間-固定定時器
- 同步定時器-集合點(例如九點開始預售)
- 隨機定時器
- 吞吐量定時器
- 斷言(作用域,對某個請求做斷言,把斷言放在請求下)
2.常用端口號
- 80端口:HTTP協議的默認端口
- 8080:tomcat默認端口號
- 8888:重定向端口
- 443端口:HTTPS協議的默認端口
3.python常用的庫:request,pandas
4.jmeter高級應用(分布式、jenkins等)/監控平台/性能瓶頸分析
十、性能測試過程
1.什么是jmeter腳本
- 用戶操作被測軟件系統
某些場景
的動作流程 - 性能測試:重要場景從1到N
- 功能測試:1個用戶
- 性能測試:N個用戶
2.快速開發漂亮的腳本
- 准確——最基本要求,腳本可以正常運行
- 快速——借助技術手動快速高效完成腳本開發
- 漂亮——腳本邏輯、維護性高
3.開發腳本方案(任何腳本開始之前都要先建一個線程組)
- jmeter自帶代理錄制腳本:配置jmeter和瀏覽器代理服務器,點擊啟動,粗略錄制請求過程(不常用)
- 文檔+抓包——導出腳本(抓包后導出會話export sessions->all sessions,jmx文件)拖拽到jmeter
4.先使用一個線程組,即一個用戶,使用查看結果數看是否能正確返回,再考慮並發
5.jmeter參數化(將腳本中的某些輸入使用參數來代替,運行時指定參數的取值范圍和規則)流程
- 找出需要做參數化的數據
- 准備提供給參數化需要的數據源
- 把腳本里的變量-》常量
6.jmeter參數化方式
- CSV文件-需要配置的元件
- 使用場景:賬號,密碼
- 函數式
- 隨機數
- time
- counter計數器
- 變量
- 編程式