本書以業(yè)界開源性能測試工具JMeter為依托,結(jié)合真實的工作實踐,用通俗易懂的語言層層深入講解性能測試技能。全書共分為5章和6個附錄,第1章講解性能測試基礎知識,包括性能測試的整體知識體系、必備基礎知識和通用標準等;第2章講解初級性能測試技能,包括JMeter九大核心組件的使用、測試腳本的編寫等;第3章講解中級性能測試技能,包括如何擴展JMeter的功能插件、搭建性能自動化和實時可視化平臺等;第4章講解高級性能測試技能,包括Dubbo的擴展測試、中間件的基準測試、JMeter源碼的解析等;第5章通過實例剖析3種典型性能測試場景;附錄部分擴展講解實用性能知識,包括典型性能問題和解決方法、性能參數(shù)調(diào)優(yōu)、問題定位和優(yōu)化建議等。
本書適合對性能測試有入門、進階學習需求的測試人員,也適合對性能知識有學習需求的開發(fā)人員、運維人員等相關(guān)技術(shù)人員。
本書以業(yè)界開源性能測試工具JMeter為依托,結(jié)合真實的工作實踐,用通俗易懂的語言層層深入講解性能測試技能。
本書性能測試相關(guān)知識總結(jié)完善,系統(tǒng)性強,知識點務實,幫助大家完成工作中的測試任務,借鑒性足,實用性高。
本書提供性能測試報告模板、常見中間件搭建方法等配套學習資料。
胡通 通信工程專業(yè)碩士,于某大型移動研發(fā)中心從事性能測試工作6年,在工作期間發(fā)表了5篇發(fā)明專利和1篇論文,參與過公司百萬級數(shù)據(jù)量的性能測試項目,幫助公司從無到有建立起性能測試體系,實戰(zhàn)經(jīng)驗豐富。榮獲2019年杭州未來科技城性能測試大賽一等獎。2018年9月他在51Testing連載“大話性能”至今。
目 錄
第 1章 性能測試基礎 1
1.1 性能測試新手入門 1
1.1.1 性能測試的背景 1
1.1.2 性能測試的目的 2
1.1.3 性能測試的分類 4
1.1.4 性能測試的術(shù)語和指標 4
1.1.5 性能測試的基礎曲線模型 6
1.1.6 性能測試的技能知識圖譜 7
1.1.7 新手入門基礎知識 9
1.2 性能測試必備知識 10
1.2.1 性能測試的完整工作流程 10
1.2.2 性能測試的需求分析 11
1.2.3 性能測試的方案設計 14
1.2.4 性能測試的環(huán)境搭建 15
1.2.5 性能測試的數(shù)據(jù)構(gòu)造 19
1.2.6 性能協(xié)議的抓包分析 22
1.2.7 性能測試的腳本編寫 23
1.2.8 性能測試的監(jiān)控部署 24
1.2.9 性能問題的定位分析 43
1.2.10 性能測試的報告總結(jié) 58
1.3 性能測試閉環(huán)流 58
1.4 性能測試執(zhí)行時機 60
1.5 性能測試通用標準 61
1.6 小結(jié) 62
第 2章 JMeter初級實戰(zhàn)真經(jīng) 63
2.1 JMeter的常用版本功能回溯 63
2.2 JMeter的安裝和使用 65
2.2.1 Windows環(huán)境 65
2.2.2 macOS環(huán)境 67
2.2.3 Linux環(huán)境 68
2.2.4 命令行的使用 68
2.3 JMeter的常用核心組件 69
2.3.1 線程組 71
2.3.2 配置元件 75
2.3.3 監(jiān)聽器 80
2.3.4 邏輯控制器 82
2.3.5 取樣器 84
2.3.6 定時器 88
2.3.7 前置處理器 90
2.3.8 后置處理器 90
2.3.9 斷言 93
2.4 JMeter的參數(shù)化方法 97
2.5 JMeter的關(guān)聯(lián)方法 98
2.6 JMeter的斷言方法 98
2.7 JMeter的集合點設置 98
2.8 JMeter的IP欺騙 99
2.9 JMeter的混合場景方法 100
2.10 JMeter的常見錯誤和常用小技巧 101
2.11 實戰(zhàn)腳本解析 106
2.11.1 HTTP(S)請求 106
2.11.2 SOAP請求 108
2.11.3 UDP請求 109
2.11.4 SQL語句 111
2.12 小結(jié) 114
第3章 JMeter中級實戰(zhàn)真經(jīng) 115
3.1 JMeter的分布式壓測 115
3.1.1 分布式壓測原理 115
3.1.2 使用方法詳解 116
3.1.3 常見錯誤說明 118
3.2 JMeter的BeanShell實戰(zhàn) 119
3.2.1 常用語法說明 120
3.2.2 10個應用示例講解 122
3.2.3 注意事項說明 127
3.3 JMeter的函數(shù)式插件擴展 127
3.3.1 擴展方法說明 127
3.3.2 示例講解 129
3.4 JMeter的WebSocket實戰(zhàn) 137
3.4.1 組件知識講解 138
3.4.2 應用示例分析 141
3.4.3 注意事項強調(diào) 150
3.5 JMeter+Shell的自動化性能測試 150
3.5.1 JMeter+Shell實例講解 151
3.5.2 高級技巧應用 155
3.6 JMeter的實時可視化平臺搭建 156
3.6.1 可視化方案展示 156
3.6.2 InfluxDB知識精華 156
3.6.3 InfluxDB安裝部署 159
3.6.4 Grafana知識精華 161
3.6.5 安裝部署Grafana 162
3.6.6 平臺搭建過程詳解 163
3.7 小結(jié) 173
第4章 JMeter高級實戰(zhàn)真經(jīng) 174
4.1 JMeter的Dubbo性能測試實踐 174
4.1.1 Dubbo核心知識點 175
4.1.2 示例代碼擴展講解 178
4.1.3 二次優(yōu)化腳本和問題 199
4.2 JMeter的TCP自定義消息性能測試
實踐 204
4.2.1 TCP組件知識詳解 205
4.2.2 示例代碼講解 207
4.2.3 百萬連接的參數(shù)調(diào)優(yōu) 213
4.2.4 問題總結(jié) 213
4.3 JMeter對中間件的基準測試 214
4.3.1 消息中間件ActiveMQ 214
4.3.2 緩存中間件Redis 226
4.4 JMeter的常見問題和性能優(yōu)化 238
4.5 JMeter的源碼編譯和解讀 239
4.5.1 JMeter源碼編譯 240
4.5.2 JMeter源碼解讀 246
4.6 小結(jié) 250
第5章 性能測試實戰(zhàn)案例 251
5.1 日常項目性能測試 251
5.1.1 項目背景 251
5.1.2 性能測試目標 251
5.1.3 性能測試架構(gòu) 252
5.1.4 測試環(huán)境搭建 252
5.1.5 測試數(shù)據(jù)構(gòu)造 253
5.1.6 性能測試用例 254
5.1.7 性能腳本編寫 256
5.1.8 性能測試監(jiān)控 266
5.1.9 性能測試執(zhí)行 266
5.1.10 性能測試結(jié)果 267
5.2 方案對比性能測試 268
5.2.1 方案對比需求 268
5.2.2 性能測試方法 268
5.2.3 性能測試場景 269
5.2.4 性能測試腳本和代碼 270
5.2.5 性能測試結(jié)果 273
5.3 MQTT性能測試 274
5.3.1 項目背景 275
5.3.2 MQTT和EMQ 275
5.3.3 性能測試環(huán)境 276
5.3.4 性能測試用例 278
5.3.5 JMeter腳本編寫 279
5.3.6 性能測試結(jié)果 283
5.3.7 問題和優(yōu)化 283
5.4 測試實戰(zhàn)問題分析 283
5.4.1 實戰(zhàn)典型問題一 284
5.4.2 實戰(zhàn)典型問題二 285
5.4.3 實戰(zhàn)典型問題三 287
5.5 小結(jié) 288
附錄A 常見性能測試問題 289
A.1 出現(xiàn)too many open files 289
A.2 出現(xiàn)Out Of Memory Error 290
A.3 數(shù)據(jù)庫連接池不釋放 290
A.4 CPU使用率高 290
A.5 無論怎么壓測,系統(tǒng)的TPS上不去 291
附錄B 性能參數(shù)調(diào)優(yōu) 292
B.1 Spring Boot 292
B.2 操作系統(tǒng) 292
B.3 常用中間件的核心性能參數(shù) 293
附錄C Java代碼定位和優(yōu)化建議 295
C.1 代碼優(yōu)化細節(jié) 295
C.2 Java代碼分析工具 297
附錄D MySQL定位和優(yōu)化建議 300
D.1 數(shù)據(jù)庫性能瓶頸定位 300
D.2 配置優(yōu)化 302
D.3 關(guān)于SQL語句的建議 305
D.4 索引建立和優(yōu)化原則 306
附錄E JVM定位和優(yōu)化建議 308
E.1 堆內(nèi)存設置和原理 309
E.2 虛擬機內(nèi)存監(jiān)控手段 310
E.3 參數(shù)說明和垃圾回收器 311
E.4 常見JVM問題 313
E.5 如何優(yōu)化GC 314
附錄F Cookie和Session的關(guān)系 315
F.1 Cookie 316
F.2 Session 317