測試工程師全棧技術進階與實踐 | 運動資訊第一站 - 2024年11月

測試工程師全棧技術進階與實踐

作者:茹炳晟
出版社:人民郵電
出版日期:2019年09月01日
ISBN:9787115513281
語言:繁體中文

本書全面講解了軟體測試人員必知必會的測試知識、技術和工具。

全書分為12章。第1章和第2章用“使用者登錄”測試實例,講解了軟體測試基礎知識,讓讀者快速學習關鍵的基礎知識;第3章講解了GUI測試框架設計、框架在大型電商網站的具體實踐,梳理了影響GUI自動化測試穩定性的關鍵因素,並給出了切實可行的解決方案;第4章介紹了3類移動應用的測試方法與技術,以及如何在移動測試中應用Appium來幫助測試人員更好地實現自動化測試;第5章以循序漸進的方式,講解了API測試的關鍵技術、微服務架構下的API測試挑戰等;第6章講解了代碼級測試的基礎知識、靜態測試方法、動態測試方法、靜態掃描工具Sonar、單元測試框架TestNG、代碼覆蓋率工具等內容;第7章和第8章系統地對性能測試的方法以及應用領域進行闡述,並基於LoadRunner講解大型企業性能測試的規劃、設計、實現的具體實例,還介紹了大型互聯網產品的全鏈路壓測的行業實踐;第9章探討了測試資料準備的技術,並討論了很多準備測試資料的新方法;第10章結合主流的DevOps和CI CD,深入剖析了大型互聯網企業的測試基礎架構設計;第11章和第12章講解了軟體測試新技術,如探索式測試、測試驅動開發、精准測試、滲透測試、基於模型的測試,以及人工智慧在測試領域的應用。

本書適合測試人員、開發人員、運維人員、測試經理和軟體品質保證人員學習,也可以作為大專院校相關專業師生的學習用書和培訓學校的教材。


茹炳晟碩士,現任DellEMC資深架構師,負責VxRail產品線的全面品質保障工作。歷任eBay中國研發中心測試基礎架構技術主管,HP中國研發中心資深測試架構師、性能測試專家,Alcatel-Lucent高級測試主管,Cisco中國研發中心資深測試工程師等職位,具有超過15年的軟體測試開發以及管理經驗,具有豐富的測試框架設計與自動化測試經驗。曾負責建立全球大型電商網站的測試基礎架構和和自動化測試方案,主持搭建DevOps持續集成測試生態體系,並負責主導無線路由產品的整體自動化測試方案、金融平臺產品SDK測試框架設計、系統開發平臺的白盒測試方案、DSP平臺自動化測試方案、軌道交通安全軟體平臺測試、大規模產品鏈的自動化部署和多個大型電子商務網站的自動化功能測試,API測試與性能測試。

作者曾在國際和國內技術期刊發表多篇技術和管理類論文,同時受邀在國際(美國,俄羅斯,日本)與國內技術大會(ArchSummit,CNUTCon,Tid,GITC等)上多次發表軟體測試和DevOps相關的技術演講。另外,茹炳晟還是極客時間“軟體測試52講-從小工到專家的實戰心法”的專欄作者。


第1章 軟體測試基礎知識精要(上) 1
1.1 從“用戶登錄”測試談起 2
1.1.1 功能測試用例 2
1.1.2 更多的測試用例 3
1.1.3 功能性需求與非功能性需求 3
1.1.4 測試的不可窮盡性 5
1.2 設計“好的”測試用例 5
1.2.1 “好的”測試用例的定義 6
1.2.2 “好的”測試用例具備的特徵 6
1.2.3 常用測試用例的設計方法 6
1.2.4 “好的”測試用例的設計方法 8
1.2.5 測試用例設計的其他經驗 10
1.3 單元測試的基礎知識 10
1.3.1 單元測試的定義 10
1.3.2 單元測試的最佳實踐 11
1.3.3 單元測試用例詳解 12
1.3.4 單元測試在實際專案中的最佳實踐 14
1.4 自動化測試的原始驅動力和使用場景 15
1.4.1 自動化測試的基本概念 15
1.4.2 自動化測試的優勢與劣勢 16
1.4.3 自動化測試的使用場景 17
1.5 軟體發展各階段的自動化測試技術 18
1.5.1 單元測試的自動化技術 19
1.5.2 代碼級集成測試的自動化技術 21
1.5.3 Web Service測試的自動化技術 21
1.5.4 GUI測試的自動化技術 24
1.6 測試覆蓋率 25
1.6.1 需求覆蓋率 25
1.6.2 代碼覆蓋率 25
1.6.3 代碼覆蓋率的價值 26
1.6.4 代碼覆蓋率的局限性 27
1.6.5 關於代碼覆蓋率的報告 27
1.6.6 代碼覆蓋率工具的實現技術 29

第2章 軟體測試基礎知識精要(下) 31
2.1 高效撰寫軟體缺陷報告 32
2.1.1 缺陷標題 32
2.1.2 缺陷概述 33
2.1.3 缺陷影響 33
2.1.4 環境配置 33
2.1.5 前置條件 34
2.1.6 缺陷重現步驟 34
2.1.7 期望結果和實際結果 34
2.1.8 優先順序和嚴重程度 34
2.1.9 變通方案 35
2.1.10 根原因分析 35
2.1.11 附件 35
2.2 以終為始,做好測試計畫 36
2.2.1 沒有測試計畫會怎麼樣 36
2.2.2 測試範圍 37
2.2.3 測試策略 37
2.2.4 測試資源 38
2.2.5 測試進度 39
2.2.6 測試風險預估 40
2.3 軟體測試工程師的核心競爭力 40
2.3.1 兩個實際面試案例 40
2.3.2 傳統測試工程師的核心競爭力 41
2.3.3 測試開發工程師的核心競爭力 43
2.4 軟體測試工程師需要掌握的非測試知識 44
2.4.1 迷你版的系統架構師 44
2.4.2 網站架構的核心知識 44
2.4.3 容器技術 45
2.4.4 雲計算技術 46
2.4.5 DevOps思維 46
2.4.6 前端開發技術 47
2.5 互聯網產品的測試策略設計 47
2.5.1 研發流程的不同決定了測試策略的不同 47
2.5.2 傳統軟體產品的測試策略——金字塔模型 48
2.5.3 互聯網產品的測試策略——菱形模型 49

第3章 GUI自動化測試精要 52
3.1 從0到1:GUI自動化測試初探 53
3.1.1 示例:構建一個Selenium自動化測試用例 53
3.1.2 Selenium的實現原理 55
3.2 效率為王:測試腳本和測試資料的解耦 58
3.2.1 測試腳本和測試資料的解耦 59
3.2.2 資料驅動測試 59
3.3 效率為王:頁面物件模型 60
3.3.1 早期GUI測試腳本的結構 60
3.3.2 基於模組化思想實現GUI測試用例 61
3.3.3 基於頁面物件模型實現GUI測試用例 63
3.4 更接近業務的抽象:讓自動化測試腳本更好地描述業務 63
3.4.1 操作函數的細微性把控 63
3.4.2 銜接兩個操作函數之間的頁面 64
3.4.3 業務流程抽象 64
3.5 過不了的坎:GUI自動化過程中的測試資料 66
3.5.1 基於API調用創建測試資料 67
3.5.2 基於資料庫操作創建測試資料 68
3.5.3 綜合運用API調用和資料庫操作創建測試資料 68
3.5.4 即時創建測試資料 69
3.5.5 事先創建測試資料 69
3.5.6 即時創建測試資料和事先創建測試資料的互補 70
3.6 GUI測試還能這麼“玩” 70
3.6.1 自動生成頁面物件 70
3.6.2 自動生成GUI測試資料 71
3.6.3 無頭流覽器簡介 72
3.6.4 Headless Chrome與Puppeteer的使用 73
3.7 精益求精:提高GUI測試穩定性的關鍵技術 74
3.7.1 非預計的彈出對話方塊 75
3.7.2 頁面控制項屬性的細微變化 76
3.7.3 被測系統的A B測試 76
3.7.4 隨機的頁面延遲造成控制項識別失敗 77
3.7.5 測試資料問題 77
3.8 眼前一亮:帶你玩轉GUI自動化的測試報告 77
3.8.1 早期基於視頻的GUI測試報告 78
3.8.2 開源GUI測試框架的測試報告實現思路 78
3.8.3 全球化GUI測試報告的創新設計 80
3.9 真實的戰場:大型全球化專案中GUI自動化測試策略的設計 82
3.9.1 大型全球化電商網站的前端模組劃分 82
3.9.2 大型全球化電商網站的GUI自動化測試策略設計 82
3.9.3 大型全球化電商網站的GUI自動化測試腳本管理 85

第4章 移動應用測試技術 87
4.1 移動應用的種類和特點 88
4.1.1 Web應用 88
4.1.2 原生應用 89
4.1.3 混合應用 89
4.2 移動應用測試方法概論 89
4.2.1 Web應用的測試 90
4.2.2 原生應用的測試 90
4.2.3 混合應用的測試 90
4.2.4 移動應用的測試難點 91
4.3 移動應用的專項測試 92
4.3.1 安裝測試 92
4.3.2 卸載測試 94
4.3.3 特殊操作測試 95
4.3.4 交互測試 96
4.3.5 通知測試 96
4.3.6 交叉事件測試 96
4.3.7 相容性測試 97
4.3.8 流量測試 98
4.3.9 耗電量測試 98
4.3.10 弱網路測試 99
4.3.11 邊界測試 99
4.4 移動應用測試工具:Appium使用入門 100
4.4.1 移動應用的自動化測試需求 100
4.4.2 iOS開發環境的搭建 101
4.4.3 Android開發環境的搭建 102
4.4.4 Appium測試環境的搭建 103
4.4.5 Appium Inspector的使用 105
4.5 Appium實戰(iOS篇) 107
4.5.1 基於iOS開發第 一個原生應用的測試用例 107
4.5.2 基於iOS開發第 一個Web應用的測試用例 110
4.5.3 在iOS真機上執行Web應用測試 111
4.5.4 在iOS真機上執行原生應用測試 114
4.6 Appium實戰(Android平臺) 114
4.6.1 基於Android模擬器的Web應用測試 114
4.6.2 基於Android真機的Web應用測試 115
4.6.3 Web應用的測試:溫故而知新 115
4.6.4 底層自動化驅動引擎 116
4.6.5 基於Android模擬器的原生應用測試 116
4.6.6 基於Android真機的原生應用測試 118
4.6.7 原生應用的測試:溫故而知新 119
4.7 Appium的實現原理 120
4.7.1 Appium伺服器 120
4.7.2 Appium用戶端 121
4.8 企業級移動應用測試框架的設計思路與實踐 121
4.8.1 移動應用測試框架的設計思路 121
4.8.2 移動應用測試框架的實現與實踐 122
4.9 搭建企業級移動測試私有雲的實踐 123
4.9.1 基於Selenium Grid的移動測試私有雲 124
4.9.2 基於Open STF的移動測試私有雲 126
4.10 移動應用雲測試服務簡介 128
4.10.1 Sauce Labs 128
4.10.2 Testin 129
4.10.3 MTC 131

第5章 API自動化測試技術 132
5.1 從0到1:API測試初探 133
5.1.1 API測試的基本步驟 133
5.1.2 基於Spring Boot構建被測API 133
5.1.3 使用cURL 135
5.1.4 使用Postman 137
5.2 複雜場景的API測試 140
5.2.1 被測業務操作由多個API調用協作完成 141
5.2.2 API測試過程中的協力廠商依賴 141
5.2.3 非同步API的測試 141
5.3 API自動化測試框架的技術演進與創新 142
5.3.1 早期基於Postman的API測試 142
5.3.2 基於Postman和Newman的API測試 142
5.3.3 基於代碼的API測試 142
5.3.4 自動生成API測試代碼 144
5.3.5 當回應結果發生變化時的自動識別 145
5.4 微服務模式下的API測試 146
5.4.1 單體架構 146
5.4.2 微服務架構 147
5.4.3 微服務架構下的測試挑戰 148
5.4.4 基於消費者契約的API測試 150
5.4.5 微服務測試的依賴解耦和類比服務 151
5.4.6 代碼實例 152

第6章 代碼級軟體測試技術基礎與進階 153
6.1 代碼級測試的基本理念與方法 154
6.1.1 常見的代碼錯誤類型 154
6.1.2 代碼級測試常用方法 156
6.2 靜態測試方法 158
6.2.1 人工靜態方法 158
6.2.2 自動靜態方法 159
6.2.3 使用自動靜態方法的實例 160
6.3 動態測試方法 161
6.3.1 人工動態方法 161
6.3.2 自動動態方法 166
6.4 代碼靜態掃描工具Sonar的使用 167
6.4.1 基於Sonar的實例 167
6.4.2 SonarLint的使用 170
6.5 單元測試框架TestNG的使用 171
6.5.1 TestNG的基本用法 172
6.5.2 TestNG的高級用法 175
6.6 代碼覆蓋率工具JaCoCo的使用 177
6.6.1 JaCoCo簡介 177
6.6.2 JaCoCo的使用 178

第7章 性能測試基礎 180
7.1 不同視角下的軟體性能與性能指標 181
7.1.1 終端使用者眼中的軟體性能 181
7.1.2 系統運維人員眼中的軟體性能 182
7.1.3 軟體設計開發人員眼中的軟體性能 182
7.1.4 性能測試人員眼中的軟體性能 184
7.1.5 併發用戶數 184
7.1.6 回應時間 185
7.1.7 系統輸送量 186
7.1.8 併發使用者數、回應時間、系統輸送量之間的關係 187
7.2 常用的性能測試與應用領域 188
7.2.1 常用的7種性能測試 189
7.2.2 性能測試的四大應用領域 192
7.3 後端性能測試工具原理與行業常用工具簡介 193
7.3.1 後端性能測試和後端性能測試工具之間的關係 193
7.3.2 後端性能測試工具和GUI自動化測試工具的區別 194
7.3.3 後端性能測試工具的原理 194
7.3.4 後端性能測試場景設計和具體內容 196
7.3.5 業內主流的後端性能測試工具 197
7.4 前端性能測試工具原理 197
7.4.1 Performance TimingAPI 198
7.4.2 Profile工具 200
7.4.3 頁面埋點計時 200
7.4.4 資源載入時序圖 201

第8章 性能測試實戰 202
8.1 前端性能測試工具WebPagetest 203
8.1.1 WebPagetest功能簡介 203
8.1.2 使用WebPagetest測試某網站的首頁 203
8.1.3 前端性能評估結果評分分析 204
8.1.4 其他前端性能指標解讀 210
8.1.5 WebPagetest實際使用中需要解決的問題 212
8.2 後端性能測試主流商業工具LoadRunner 215
8.2.1 LoadRunner的基本原理 216
8.2.2 LoadRunner的主要模組 217
8.2.3 基於LoadRunner的性能測試實戰 218
8.3 後端性能測試主流開源工具JMeter 226
8.3.1 JMeter簡介 227
8.3.2 JMeter的主要概念 228
8.3.3 JMeter的使用 228
8.4 企業級實際性能測試案例與經驗 238
8.4.1 性能基準測試 238
8.4.2 穩定性測試 239
8.4.3 併發測試 240
8.4.4 容量規劃測試 240
8.5 大型互聯網產品的全鏈路壓測 241
8.5.1 全鏈路壓測的定義 241
8.5.2 單系統的獨立壓測 242
8.5.3 海量併發請求的發起 242
8.5.4 全鏈路壓測流量和資料的隔離 243
8.5.5 實際業務負載的類比 244
8.5.6 真實交易和支付的撤銷以及資料清理 244

第9章 準備測試資料 245
9.1 準備測試資料的基本方法 246
9.1.1 基於GUI操作生成測試資料 246
9.1.2 通過API調用生成測試資料 247
9.1.3 通過資料庫操作生成測試資料 248
9.1.4 綜合運用API和資料庫生成測試資料 248
9.2 創建測試資料的方法 249
9.2.1 即時創建方法 250
9.2.2 事先創建方法 251
9.2.3 綜合運用即時創建方法和事先創建方法 252
9.3 測試資料的“銀彈”——統一測試資料平臺 252
9.3.1 測試資料準備的1.0時代 253
9.3.2 測試資料準備的2.0時代 256
9.3.3 測試資料準備的3.0時代 258
9.3.4 測試資料準備的4.0時代 260
9.3.5 大資料技術在測試資料準備中的應用 261

第10章 自動化測試基礎架構的建設與實踐 262
10.1 從小作坊到工廠:Selenium Grid簡介 263
10.1.1 測試基礎架構的基本概念 263
10.1.2 早期測試執行環境的問題 263
10.1.3 Selenium Grid簡介 264
10.1.4 傳統Selenium Grid的搭建方法 265
10.1.5 基於Docker的SeleniumGrid的搭建方法 268
10.2 從小工到專家:測試執行環境架構設計基礎 268
10.2.1 測試執行環境概述 269
10.2.2 測試基礎架構的設計 270
10.2.3 早期的測試基礎架構 270
10.2.4 經典的測試基礎架構 271
10.3 從小工到專家:測試執行環境架構設計進階 272
10.3.1 基於Docker實現的Selenium Grid測試基礎架構 272
10.3.2 引入統一測試執行平臺的測試基礎架構 274
10.3.3 基於Jenkins集群的測試基礎架構 275
10.3.4 測試負載自我調整的測試基礎架構 276
10.3.5 測試基礎架構的選擇 277
10.4 實戰案例:大型全球化電商網站的測試基礎架構設計 277
10.4.1 統一測試執行服務 278
10.4.2 統一測試資料服務 279
10.4.3 測試執行環境準備服務 279
10.4.4 被測系統部署服務 279
10.4.5 測試報告服務 280
10.4.6 全域測試配置服務 280
10.4.7 大型全球化電商網站測試基礎架構的使用示例 282

第11章 軟體測試新技術 284
11.1 發揮人的潛能——探索式測試 285
11.1.1 軟體測試與招聘面試的類比 285
11.1.2 探索式測試的定義 285
11.1.3 探索式測試與即興測試的區別和聯繫 287
11.1.4 探索性測試的開展 287
11.2 測試先行——TDD 288
11.2.1 TDD的核心理念 288
11.2.2 TDD的優勢 289
11.2.3 TDD的實施過程 290
11.2.4 TDD進階 294
11.3 打蛇打七寸——精准測試 294
11.3.1 傳統軟體測試的主要短板 295
11.3.2 精准測試的核心思想 296
11.3.3 精准測試的具體方法 297
11.4 安全第 一——滲透測試 299
11.4.1 滲透測試的定義 299
11.4.2 滲透測試的常用方法 300
11.4.3 執行滲透測試的步驟 301
11.4.4 滲透測試的常用工具 302
11.4.5 滲透測試的收益 303
11.5 用機器設計測試用例——基於模型的測試 303
11.5.1 MBT的基本原理 304
11.5.2 常用模型簡介 305
11.5.3 常用MBT工具 305
11.5.4 MBT的優勢 306
11.5.5 MBT的劣勢 307
11.6 人工智慧在測試領域的應用 308
11.6.1 人工智慧概述 308
11.6.2 人工智慧在軟體測試領域的應用 309
11.6.3 基於人工智慧的測試工具 310

第12章 測試人員的互聯網架構核心知識 312
12.1 測試工程師掌握大型網站架構知識的必要性 313
12.1.1 基於訊息佇列的分散式系統測試設計 313
12.1.2 緩存的示例 314
12.1.3 架構知識的學習方法 314
12.2 大型網站架構介紹 315
12.2.1 最簡單的網站架構 315
12.2.2 應用和資料分離的網站架構 316
12.2.3 引入本地緩存和分散式緩存的網站架構 316
12.2.4 引入應用伺服器集群的網站架構 317
12.2.5 引入主從分離的資料庫 317
12.2.6 引入CDN伺服器和反向代理伺服器的網站架構 318
12.2.7 引入分散式檔案系統和分散式資料庫系統的網站架構 319
12.2.8 基於業務拆分和訊息佇列的網站架構 319
12.2.9 基於分散式服務的網站架構 321
12.2.10 微服務架構 321
12.2.11 下一代微服務架構——服務網格 322
12.3 網站高性能架構設計 322
12.3.1 前端的高性能架構 323
12.3.2 後端伺服器的高性能架構 323
12.4 網站高可用架構設計 325
12.4.1 造成網站不可用的主要原因 326
12.4.2 網站高可用架構設計 327
12.5 網站可伸縮性架構設計 328
12.5.1 可伸縮性和可擴展性的區別 329
12.5.2 分層的可伸縮性架構 329
12.5.3 應用伺服器的可伸縮性設計 330
12.5.4 緩存集群的可伸縮性設計 331
12.5.5 資料庫的可伸縮性設計 332
12.6 網站可擴展性架構設計 333
12.6.1 網站可擴展性架構設計的案例 333
12.6.2 事件驅動架構與訊息佇列 334
12.6.3 引入訊息佇列後的測試關注點 335


相關書籍