性能測試須要掌握的知識:java
一、性能測試工具mysql
二、操做系統(windows,Linux(CPU,磁盤,網絡,內存))redis
三、編程語言(java簡單代碼(jvm))sql
四、網絡知識數據庫
五、數據庫(mysql、Oracle、redis、mongoDb)編程
六、中間件(Nginx,Tomcat)windows
七、架構(能夠從項目的數據流向開始瞭解)瀏覽器
性能測試關注的經常使用指標(重點)tomcat
一、併發服務器
二、併發用戶數
三、事務
四、響應時間
五、TPS
六、吞吐量
七、點擊率
八、資源利用率
性能測試基礎:
1、什麼是軟件性能測試
性能測試是指被測系統,在必定的負載下運行,監控系統的各項指標,是否符合需求(指標,指的CPU,內存,事務響應時間,等)若是不符合,就發現了系統的性能瓶頸
衡量指標有倆個方面:響應時間 和 及時處理能力
2、性能測試的目的
一、評估系統處理能力:驗證系統處理能力是否達到規劃時的水平
二、發現系統的性能瓶頸:某個接口響應時間是否很長,tps很低,硬件方面是否是能夠支持
三、驗證系統穩定性和可靠性:長時間的測試會不會致使內存溢出
四、系統調優:重複執行性能測試,來驗證系統調優是否取得預期結果
問題分析:
中間件:優化鏈接數(Nginx,tomcat)
tps低:須要看服務器資源使用狀況,若是資源使用狀況很低,那麼通常都是鏈接數致使的,須要調大你的鏈接數(包括中間件的鏈接數,數據庫的鏈接數),
若是時資源使用很高,須要定位是哪一個進程致使的
3、性能測試方法
常規性能測試:a點到b點的性能測試,指以系統預期性能指標爲前提,對系統不斷增長壓力,以驗證系統可否達到預期性能。
負載測試:不斷的增長系統的併發用戶數(10-30-50),給系統不斷的增長壓力,直到性能指標(例如響應時間)超過預期值,或者系統已達到飽和狀態
負載測試主要目的:是找到系統處理能力的極限在哪裏
壓力測試:負載必定的狀況下(例如100),持續的運行一段時間(例如n*24小時),來驗證系統的穩定性
4、性能測試的步驟
性能測試的時候,先作單接口的性能測試場景,方便定位性能問題,
再作混合場景的性能測試,看有沒有新的性能問題
5、性能測試應該關注的指標
用戶關注的:系統的響應時間
響應時間的組成:網絡( N1+N2+N3+N4)+服務器(A1+A2+A3)
測試(管理)人員關注的性能點:
性能關注點 | |
應用服務器/數據庫服務器資源使用是否合理 |
資源利用率 |
系統可否實現可擴展 |
可擴展性 |
系統最多支持多少用戶 |
系統容量 |
系統最大業務處理能力 |
tps(每秒服務器可以處理的請求數) |
系統性能可能存在的瓶頸在哪裏 |
數據庫慢查詢等 |
更換哪些設備可以提升系統性能 |
cup核數加大,內存加大,固態硬盤等,特殊節日堆服務器等 |
穩定性,可否支持7*24小時的業務訪問 |
通常跑8小時,12小時 |
開發人員關注的性能:
架構設計是否合理 |
系統架構 (架構數據流向) |
數據庫設計是否合理 |
數據庫設計(監控是否是有慢查詢) |
代碼是否存在性能問題 |
代碼(多個事務一塊兒跑) |
代碼是否存在不合理的內存使用方法 |
代碼(監控內容是否有內存溢出) |
性能測試工具對比:(100以上均算大併發)
LR | jmeter |
專業化的工具,須要購買序列號,或者用破解版(國內目前可用lr11) |
開源的性能測試工具 |
學習成本低,只需學習三大部分 | 作一個請求就須要設計不少插件 |
腳本:lr支持錄製,但不建議錄製(對瀏覽器版本依賴強,可能錄製不成功) | 錄製功能須要藉助badboy,不建議錄製 |
報表:自帶的監控信息很全 | 須要本身裝插件 |
大併發時數據比較準確 | 大併發時數據不是很準確 |
支持線程和進程 | 只支持線程,不支持進程 |
數據庫處理比較麻煩 | sql處理很方便 |
術語解釋:
併發,分爲狹義和廣義倆種併發:
狹義併發:全部用戶在同一時間請求同一接口
廣義併發:多個用戶在同一時間請求不一樣的接口
在性能測試中,通常時先進行狹義併發,再進行廣義併發
性能測試的時候,先作單接口的性能測試場景,方便定位性能問題,再作混合場景的性能測試,看有沒有新的性能問題
併發用戶數:
系統用戶數:註冊過系統的全部用戶,包括天天的活躍用戶數以及殭屍用戶數
在線用戶數:登陸系統的用戶,但不必定會對服務器產生壓力,例如:有N個用戶狀態爲在線狀態,可是並不必定都會有請求,對服務器形成壓力
併發用戶數:對服務器產生壓力的用戶,例如:可能在線的N個用戶中,只有20%的用戶對服務器產生了壓力,也就是說這個接口只有20%的用戶是併發用戶