編輯推薦
聯想集團董事長兼CEO楊元慶、ZUK CEO常程鼎力推薦,資深測試專傢多年經驗總結
以漫畫和對話風格對Android平颱的各種自動化測試工具、框架的原理、使用技巧和二次開發進行瞭詳細的講解。
內容簡介
聯想集團董事長兼CEO楊元慶、ZUKCEO常程鼎力推薦,資深測試專傢多年經驗總結。本書以漫畫和對話風格對Android平颱的各種自動化測試工具、框架的原理、使用技巧和二次開發進行瞭詳細的講解。
《深入理解Android自動化測試》分為四篇,共21章:
基礎篇(第1~7章),簡單介紹Android常用自動化測試工具和框架的基本使用技巧與相關理論,幫助讀者直接上手操作這些工具或使用框架撰寫自動化腳本。
原理篇(第8~13章),通過對Android常用自動化測試工具和框架的源碼剖析,讓大傢更直觀地瞭解工具的運行原理。讓讀者不但可以更靈活地運用這些工具和框架,清楚地知道應用這些工具和框架的局限性,還可以基於這些源碼更深入地對工具和框架進行二次開發。
實戰篇(第14~18章),通過項目中的各種需求和實際問題來分析工具的不足,從而開發一些小工具或對框架進行二次封裝,循著這條綫索開發齣更多、更實用的工具,或對框架進行更深入的封裝。
反思篇(第19~21章),結閤實際工作中領導們提齣的各種問題,對工具、測試本身以及人深入進行討論和反思,深入思考Android自動化測試以及軟件自動化測試從業人員都在麵臨的問題。
作者簡介
許奔,聯想集團研發主管工程師,資深自動化測試工程師,從事自動化測試工作8年以上,曾帶領聯想手機單元測試團隊、聯想手機自動化測試團隊為公司開發齣多款實用的Android自動化測試工具,並對Android官方自動化測試框架Instrumentation、UIAutomator、CTS等進行持續封裝,不斷提升腳本的穩定性、可移植性和可讀性,有效地保證瞭多個項目的自動化測試順利運行。同時,他還是聯想集團年度發明人,MBG專利大師,至今提交智能設備相關專利提案1542件,其中186件發明與實用新型專利通過聯想集團專利評審遞交國傢專利局,被譽為“專利達人”和“創新狂人”。
目錄
本書贊譽
前 言
第一部分 基礎篇
第1章 Android自動化測試基礎 3
1.1 Android自動化分析 3
1.2 什麼樣的兵器*稱手 4
1.3 如何耍好你手上的兵器 6
1.4 你瞭解你的兵器嗎 8
1.5 如何改造你的兵器 9
第2章 穩定性測試利器monkey使用詳解 10
2.1 monkey概述 10
2.2 第一個Impossible Mission 10
2.3 monkey的基本使用 11
2.4 monkey的命令及其使用 14
2.4.1 monkey的常規類命令 14
2.4.2 monkey的事件類命令 15
2.4.3 monkey的約束類命令 19
2.4.4 monkey的調試類命令 20
2.4.5 monkey命令小結 22
2.5 第二個Impossible Mission 23
2.6 monkey腳本編寫 24
2.6.1 monkey API詳解 24
2.6.2 monkey腳本編寫 27
2.6.3 從getevent和input keyevent說起 33
2.7 monkey工具總結 37
第3章 monkey之子monkeyrunner使用詳解 38
3.1 monkeyrunner概述 38
3.2 monkeyrunner API詳解 38
3.2.1 monkeyrunner基本API:手勢、輸入和點擊 44
3.2.2 monkeyrunner必備API:啓動應用、等待 49
3.2.3 monkeyrunner強大API:鍵值事件 58
3.2.4 monkeyrunner與PC交互API:輸入、選項列錶框、警告框 61
3.2.5 monkeyrunner應用操作API:等待設備連接、安裝/卸載應用 65
3.2.6 monkeyrunner設置控製API:重啓、喚醒、獲取設備屬性 69
3.2.7 monkeyrunner基本圖像處理API:截屏、圖像保存 75
3.2.8 monkeyrunner必備圖像處理API:圖像截取、對比 78
3.2.9 monkeyrunner強大圖像處理API:轉換格式、獲取像素元組/像素值 82
3.2.10 monkeyrunner超級API:廣播、用例及命令 86
3.2.11 monkeyrunner幫助文檔 91
3.3 monkeyrunner腳本編寫 96
3.3.1 bugben示例腳本剖析 96
3.3.2 monkeyrunner腳本運行注意事項 98
3.4 第三個Impossible Mission 99
3.5 monkeyrunner的錄製迴放 99
3.5.1 等待功能Wait 100
3.5.2 按鍵功能Press a Button 102
3.5.3 輸入功能Type Something 103
3.5.4 拖拽功能Fling 105
3.5.5 錄製腳本導齣功能Export Actions 107
3.5.6 錄製bugben腳本示例 107
3.5.7 迴放bugben腳本 110
3.6 monkeyrunner工具總結 112
第4章 單元測試框架Instrumentation使用詳解 114
4.1 Instrumentation概述 114
4.2 Instrumentation基礎 115
4.2.1 自動化測試基礎 116
4.2.2 Android測試框架 117
4.3 第四個Impossible Mission 120
4.4 Instrumentation的前世:單元測試基礎框架JUnit 124
4.5 第五個Impossible Mission 133
4.6 Instrumentation的今生:對Android係統的高度控製 138
4.7 Instrumentation前世今生分析 143
4.8 第六個Impossible Mission 149
4.9 Instrumentation自動化腳本開發 149
4.9.1 Instrumentation自動化條件 150
4.9.2 捕獲*初項目控件 157
4.9.3 對*初項目的自動化測試 161
4.10 Instrumentation工具總結 167
第5章 終極自動化框架UIAutomator使用詳解 171
5.1 UIAutomator概述 171
5.2 第七個Impossible Mission 173
5.3 更清晰的控件捕獲 173
5.4 更直觀的測試項目創建 175
5.5 UIAutomator API詳解 177
5.5.1 與monkeyrunner對照之:給力的手勢 178
5.5.2 與monkeyrunner對照之:輸入、點擊和長按 180
5.5.3 與monkeyrunner對照之:等待和截屏 182
5.5.4 與monkeyrunner對照之:鎖屏/喚醒、獲取設備屬性 184
5.5.5 與monkeyrunner對照之:鍵值事件 186
5.5.6 人無我有之:屏幕鏇轉、布局文件 187
5.5.7 人無我有之:獲取包名、應用名和通知欄 189
5.5.8 人無我有之:獲取對象屬性 189
5.5.9 強大的控件篩選器:UiSelector 192
5.5.10 “給力”的控件定位器:UiCollection 194
5.5.11 無敵的滾動:UiScrollable 195
5.5.12 瘋狂的監聽器:UiWatcher 200
5.5.13 UIAutomator API綜述 202
5.6 更簡潔的腳本撰寫 202
5.6.1 UIAutomator界麵捕獲 202
5.6.2 UIAutomator應用啓動 205
5.6.3 UIAutomator控件捕獲 206
5.6.4 UIAutomator控件操作 211
5.6.5 Bugben完整測試項目 213
5.7 更便捷地編譯運行 216
5.8 UIAutomator工具總結 223
第6章 兼容性測試框架CTS使用詳解 226
6.1 CTS概述 226
6.2 CTS測試須知 228
6.3 CTS的命令及運行 231
6.4 CTS測試報告 237
6.5 CTS Verif?ier 240
6.6 CTS注意事項 243
6.7 CTS工具總結 245
第7章 Android自動化工具使用總結 247
第二部分 原理篇
第8章 monkey原理分析 252
8.1 monkey源碼結構 252
8.2 monkey架構分析 254
8.2.1 旅程開始 254
8.2.2 從run()啓程 254
8.2.3 monkey參數詳解 257
8.2.4 如何細分參數? 262
8.2.5 導入package列錶 264
8.2.6 monkey的係統日誌 266
8.2.7 檢查內部配置 268
8.2.8 構建三大能力 268
8.2.9 獲取閤法package列錶 271
8.2.10 monkey運行模式匯總 272
8.2.11 monkey運行核心 281
8.2.12 旅程結束 286
8.3 monkey的原理總結 288
第9章 monkeyrunner原理分析 289
9.1 monkeyrunner源碼結構 289
9.2 monkeyrunner架構分析 289
9.2.1 設備連接 291
9.2.2 應用安裝 311
9.2.3 應用啓動 319
9.2.4 按鍵發送 321
9.2.5 截屏 326
9.2.6 文件存儲 331
9.3 monkeyrunner的原理總結 334
第10章 Instrumentation原理分析 336
10.1 Instrumentation源碼結構 336
10.2 Instrumentation架構分析 338
10.2.1 從InstrumentationTestRunner說開來 339
10.2.2 Instrumentation測試運行 342
10.2.3 啓動被測應用 345
10.2.4 startActivity()方法 348
10.2.5 startActivity()方法後遺癥 351
10.2.6 連接ViewServer 356
10.2.7 獲取設備應用信息 357
10.2.8 獲取應用控件樹 359
10.2.9 繪製控件樹視圖 362
10.3 Instrumentation的原理總結 364
第11章 UIAutomator原理分析 370
11.1 UIAutomator源碼結構 370
11.2 UIAutomator架構分析 371
11.2.1 控件捕獲 371
11.2.2 創建UiObject對象 372
11.2.3 驗證控件是否存在 374
11.2.4 驗證控件是否可用 381
11.2.5 點擊並等待界麵跳轉 381
11.2.6 獲取屏幕截圖 386
11.2.7 發送返迴事件 388
11.3 UIAutomator的原理總結 390
第12章 CTS原理分析 392
12.1 CTS源碼結構 392
12.2 CTS架構分析 392
12.2.1 CTS案例MediaPlayer分析 393
12.2.2 測試資源預置及環境清理 396
12.2.3 空文件及音視頻播放測試 398
12.2.4 切換下一首歌測試 401
12.2.5 頻譜測試 406
12.2.6 無縫播放測試 407
12.2.7 視頻界麵重置測試 410
12.2.8 錄製視頻播放角度測試 412
12.2.9 不同格式視頻文件測試 415
12.2.10 字幕選擇/取消選擇測試 423
12.2.11 字幕切換測試 427
12.2.12 播放器迴調測試 429
12.2.13 視頻錄製播放測試 432
12.3 CTS的原理總結 435
第13章 Android自動化工具源碼總結 436
第三部分 實踐篇
第14章 從monkey到傳參或錄製工具開發 443
14.1 從monkey原理說開來 443
14.2 monkey傳參小工具 444
14.2.1 monkey傳參小工具之常規類命令 444
14.2.2 monkey傳參小工具之事件類命令 445
14.2.3 monkey傳參小工具之約束類命令 447
14.2.4 monkey傳參小工具之調試類命令 448
14.3 monkey腳本錄製工具開發 449
14.3.1 monkey腳本錄製工具需求 450
14.3.2 monkey腳本錄製工具設計 450
14.3.3 monkey腳本錄製工具原理 453
14.4 monkey工具總結 458
第15章 從Instrumentation到穩定自動化工具開發 459
15.1 為何要做二次封裝? 459
15.2 如何做Instrumentation的二次封裝 461
15.2.1 場景1:源碼問題 461
15.2.2 場景2:控件問題 462
15.2.3 場景3:用例結構問題 463
15.2.4 場景4:運行日誌問題 465
15.2.5 場景5:窗口監測問題 465
15.2.6 場景6:控件ID重復或缺失問題 466
15.2.7 場景7:齣錯截屏問題 468
15.3 二次封裝改進項總結 469
第16章 從UIAutomatorViewer到PC端腳本錄製工具開發 470
16.1 從UIAutomatorViewer原理說開來 470
16.2 基於UIAutomatorViewer的PC端腳本錄製工具 472
16.2.1 PC端腳本錄製工具:基本設計 472
16.2.2 PC端腳本錄製工具:詳細設計 474
16.2.3 PC端腳本錄製工具:原理剖析 477
16.2.4 PC端腳本錄製工具:界麵設計 483
16.3 UIAutomatorViewer錄製工具總結 487
第17章 從CTS到定製化單元測試 489
17.1 從CTS原理說開來 489
17.2 用CTS運行定製單元測試腳本 491
17.2.1 項目需求分析 491
17.2.2 研究官方CTS用例集 492
17.2.3 自定義CTS用例集 500
17.2.4 運行自定義CTS用例集 504
17.3 定製單元測試腳本總結 505
第18章 Android自動化實踐之路 507
第四部分 反思篇
第19章 關於工具的反思 512
19.1 關於錄製/迴放工具的幻想 512
19.2 要門檻還是要適配 513
19.3 什麼樣的自動化框架纔是強大的框架 515
19.4 將第七個饅頭扔齣窗外 516
第20章 關於測試的反思 519
20.1 自動化是一種短綫投資嗎 519
20.2 難道自動化是為瞭替代黑盒測試 520
20.3 衡量自動化效果的標準是Bug數嗎 521
第21章 關於人的反思 522
21.1 測試腳本編寫者態度問題 522
21.2 什麼人適閤做自動化 523
21.3 自動化與組織架構有沒有關係 525
附錄A monkey常用鍵值參照錶 526
附錄B getProperty()和getSystemProperty() 532
前言/序言
為什麼要寫這本書2006年大學畢業後,我誤打誤撞進入軟件測試行業。當時公司沒有多餘的人手,每個測試員需要負責至少一個大型項目的完整測試任務。為瞭*大限度減輕工作量,提高工作效率,我開始嘗試通過QTP和LR進行項目的自動化測試和壓力測試,這也是自己人生中第一次接觸自動化工具。
2009年,在自動化測試領域摸爬滾打三個年頭後,我通過閱讀相關書籍、自身實踐和論壇交流,對QTP和LR工作原理有瞭較為深入的瞭解。在看過《微軟的軟件測試之道》後,進入到微軟嵌入式團隊,開始藉助更為強大的WTT、Xacc等自動化工具在嵌入式平颱進行更深入的腳本和工具開發。
2011年,被第一代聯想樂Phone智能手機深深震撼後,我投身到聯想智能事業部,開始從Windows平颱轉戰到Android平颱,繼續研究自動化測試和單元測試。這些年伴隨著Android的發展,一路風塵,其中酸甜苦辣,隻有同路人能體會。
從事自動化測試這十年,一直堅持做實踐筆記,將Android平颱各自動化測試工具和框架的使用經驗、源碼閱讀的心得,以及對框架二次封裝及相關工具開發的總結和討論,全部記錄瞭下來,以備日後查閱。不知不覺已經記錄瞭厚厚一本,這本筆記不僅在遇到問題時給我莫大幫助,也促使我立足於這些知識和經驗進行更深入的探索。
現在將這本筆記集結成書,不僅僅是為瞭讓大傢快速入門,少走彎路,更是為瞭讓大傢在實踐中發現書中更多的缺漏和問題,藉助這本筆記一起嚮更深的未知世界探索。讓我們打開探照燈,拿起洛陽鏟,開工吧!
讀者對象其實沒必要如此細分,隻要你想讀,讀就是瞭!
如果非要我分,那大緻這些朋友可以讀。
對軟件測試感興趣的人。
對軟件自動化測試感興趣的人。
對Android自動化測試感興趣的人。
如何閱讀本書本書分為4大部分。
第一部分為基礎篇(第1~7章),簡單介紹Android常用自動化測試工具和框架的基本使用技巧與相關理論,幫助讀者直接上手操作這些工具或使用框架撰寫自動化腳本。
第二部分為原理篇(第8~13章),通過對Android常用自動化測試工具和框架的源碼剖析,讓大傢更直觀地瞭解工具的運行原理。瞭解原理有兩大好處:第一,可以更靈活地運用這些工具和框架,並清楚地知道應用這些工具和框架的局限性;第二,可以基於這些源碼更深入地對工具和框架進行二次開發。
第三部分為實踐篇(第14~18章),通過項目中的各種需求和實際問題來分析工具的不足,從而開發一些小工具或對框架進行二次封裝,加以補充。這裏隻是拋磚引玉,希望大傢循著這條綫索開發齣更多、更實用的工具,或對框架進行更深入的封裝。
第四部分為反思篇(第19~21章),結閤實際工作中領導們提齣的各種問題進行深入討論和反思,這不僅僅是Android自動化測試的問題,還是所有軟件自動化測試從業人員都在麵臨的問題。
附錄A為moneky常用鍵值參照錶,方便大傢使用monkey開發時查閱。
附錄B為getProperty()和getSystemProperty()的說明,方便大傢對兩者進行對比分析。
勘誤和支持由於筆者的水平有限,加之編寫時間倉促,書中難免會齣現一些錯誤或者不準確的地方,懇請讀者批評指正。為此,特意申請微信公眾號:巴哥奔(請直接掃描下麵的微信二維碼添加)。如果你有
深入理解Android自動化測試 下載 mobi epub pdf txt 電子書