【為什么要寫這本書】
隨著敏捷開發(fā)、微服務(wù)架構(gòu)、DevOps逐漸深入人心,頻繁迭代、持續(xù)交付已然成為軟件開發(fā)的基本要求。企業(yè)對自動化測試、持續(xù)測試的需求也越來越多,這導(dǎo)致市場上需要大量具備測試開發(fā)技能的專業(yè)人才。遺憾的是,這樣的人才十分稀有。一方面,技術(shù)更新快,企業(yè)對軟件測試工程師的技術(shù)要求越來越高;另一方面,大量測試工程師不了解測試框架的原理,不具備獨立開發(fā)測試框架的能力,找工作越來越困難。
當(dāng)前軟件行業(yè)存在這樣一種現(xiàn)象:軟件開發(fā)職能越分越細(xì),軟件質(zhì)量要求越來越高,軟件發(fā)布越來越頻繁,而測試開發(fā)比卻越來越低。在這個背景下,作為軟件測試工程師,不但需要對被測軟件有充分的認(rèn)知,還要能夠全局思考,能多維度、系統(tǒng)性地將軟件測試體系納入公司已有的技術(shù)架構(gòu)下。一個測試工程師就是一個測試團(tuán)隊成為眾多互聯(lián)網(wǎng)公司的需求。作為技術(shù)能力的直接體現(xiàn),自研自動化測試框架就變成了軟件測試工程師的剛需技能。
然而,現(xiàn)實情況是,除了少數(shù)公司外,大部分公司的軟件測試工程師執(zhí)行手工測試和自動化測試的時間比例仍為6:4、7:3甚至9:1。他們既無法勝任有更高技術(shù)要求的測試工作,又無法在工作中提升自己。用自研框架將測試流水線融入公司的技術(shù)體系,就變成了一句空談。
基于此,筆者在拉勾教育開設(shè)了《測試開發(fā)入門與實戰(zhàn)》專欄,指導(dǎo)測試工程師從功能測試向測試開發(fā)轉(zhuǎn)型。在專欄開設(shè)后的短短幾個月內(nèi),訂閱學(xué)習(xí)的軟件測試工程師就超過了1.22萬人。通過打牢基礎(chǔ)、項目實戰(zhàn)、能力修煉、深入原理幾個模塊的練習(xí),很多測試工程師走上了測試開發(fā)的崗位。與此同時,在讀者粉絲群、微信公眾號iTesting里,筆者也收到了大量咨詢和討論,其中典型的幾個問題如下。
自研測試框架的模塊和實例,您是怎么總結(jié)出來的?
為什么我想不到這么設(shè)計,能否分享一下您的設(shè)計思路?
能否從0到1地帶我們搭建一個完全自研的測試框架?
在讀者的熱情留言的鼓舞下,筆者充分調(diào)研了市面上的自動化測試、測試開發(fā)類圖書,決定以自研自動化測試框架本身為側(cè)重點,寫一本詳細(xì)講解自動化測試框架搭建、原理、設(shè)計原則和具體實現(xiàn)的書。
【讀者對象】
本書適合以下讀者:
希望搭建企業(yè)級測試框架的軟件測試人員。
希望深入了解測試框架設(shè)計思路、工作原理、實現(xiàn)邏輯的中級測試工程師。
希望轉(zhuǎn)型測試開發(fā)的初級自動化測試工程師、手工測試人員。
希望提升團(tuán)隊自動化測試技術(shù)水平的測試管理者。
對自動化測試、測試開發(fā)技術(shù)有實際需求的軟件測試人員。
高等院校軟件專業(yè)的學(xué)生。
【本書特色】
本書由淺入深地介紹了自動化測試框架的實現(xiàn)原理、架構(gòu)設(shè)計、工程實踐,通過先簡述框架模型,再介紹開發(fā)測試框架涉及的知識點,后帶領(lǐng)讀者編碼實現(xiàn)自動化測試框架功能模塊的方式,將開發(fā)測試框架涉及的重要功能點一一自研實現(xiàn),這些功能點包括測試環(huán)境切換、數(shù)據(jù)驅(qū)動、自動化測試用例組織、在運行中挑選測試用例、并發(fā)執(zhí)行測試用例、錯誤處理、日志系統(tǒng)搭建、測試報告、API測試和UI測試融合以及集成測試框架到CI/CD系統(tǒng)等。通過閱讀本書并跟隨練習(xí),讀者可以體驗從寫下行代碼開始,到創(chuàng)建一個完整的、結(jié)合持續(xù)集成和持續(xù)測試的自動化測試框架的全部過程,并通過這個過程掌握自動化測試框架開發(fā)方法。
【如何閱讀本書】
第1、2章全面介紹自動化測試框架的概念、原理、類型及通用模塊,論述自動化測試框架的設(shè)計原則,并根據(jù)分層自動化測試的特點,結(jié)合當(dāng)下流行的微服務(wù)架構(gòu)下的測試,詳細(xì)講解如何將分層自動化的測試?yán)砟顟?yīng)用到自動化測試框架的設(shè)計中,以及微服務(wù)測試下自動化測試框架應(yīng)該如何規(guī)劃和組織。
第3~5章著重介紹Python語言體系下的兩個經(jīng)典開源框架unittest和pytest的特點、使用方法、實踐等,并講解部分源碼的實現(xiàn)原理。學(xué)完本部分內(nèi)容,讀者可以直接使用unittest和pytest搭建一套開源的測試框架。
第6~14章是本書的重點,介紹測試框架的重點功能,從測試框架的入口交互式命令出發(fā),到完善自動化測試框架,手把手帶領(lǐng)讀者開發(fā)測試框架。學(xué)完本部分內(nèi)容,讀者即可自主開發(fā)自動化測試框架。
第15章介紹持續(xù)集成的核心原理、用到的工具,并從項目實際需求的角度出發(fā),結(jié)合GitHub、Jenkins Blue Ocean、Docker將自動化測試框架集成到自動化測試流水線中,從而實現(xiàn)持續(xù)測試。
第16章介紹如何將自動化測試框架發(fā)布至Python官方倉庫供他人下載使用。
通過閱讀本書,讀者既能了解設(shè)計原理,又能學(xué)會設(shè)計要點,還可以跟隨具體介紹詳細(xì)了解源碼構(gòu)建,真正實現(xiàn)從行代碼開始,從0到1完整搭建自研自動化測試框架,并將其嵌入公司的技術(shù)架構(gòu)。相信這個過程和體驗是那些只告訴你怎么用,不告訴你為什么這么用的開源測試框架不能比擬的。
希望讀者通過閱讀本書完全掌握自動化測試框架開發(fā)方法,也希望讀者不吝分享,將本書推薦給同事和朋友,更希望讀者能以本書所介紹的框架為基礎(chǔ),早日開發(fā)出符合自身需求、功能強大的自研測試框架。
第1章 自動化測試框架基礎(chǔ) 1
1.1 自動化測試框架概述 1
1.1.1 自動化測試框架的定義 1
1.1.2 為什么需要自動化測試框架 2
1.1.3 自動化測試框架的演化 2
1.2 自動化測試框架的通用原理 4
1.3 自動化測試框架的通用模塊 5
1.3.1 基礎(chǔ)模塊 5
1.3.2 管理模塊 6
1.3.3 運行模塊 6
1.3.4 統(tǒng)計模塊 6
1.4 自動化測試框架的類型 7
1.4.1 簡單測試框架 7
1.4.2 X-Driven測試框架 7
1.4.3 混合型測試框架 8
1.4.4 不同類型測試框架的對比 8
1.5 自動化測試框架的設(shè)計原則 9
1.6 本章小結(jié) 10
第2章 分層自動化測試與測試框架 11
2.1 分層自動化測試概述 11
2.1.1 什么是分層自動化測試 11
2.1.2 分層自動化測試的模型 13
2.2 分層自動化測試的誤區(qū) 16
2.2.1 測試一定是按順序進(jìn)行的 16
2.2.2 分層自動化測試跨層執(zhí)行是反模式 17
2.2.3 分層后單元測試越多越好 17
2.3 分層自動化測試的實踐 17
2.3.1 測試盡量下沉 17
2.3.2 不要重復(fù)測試 18
2.3.3 合理選擇分層模型 19
2.3.4 考慮用戶場景 19
2.4 微服務(wù)下的自動化測試分層 20
2.4.1 微服務(wù)精要 20
2.4.2 微服務(wù)實施帶來的挑戰(zhàn)及解決之道 22
2.5 測試框架與分層自動化 24
2.6 本章小結(jié) 27
第3章 自動化測試框架初體驗 28
3.1 他山之石unittest測試框架核心原理 28
3.1.1 unittest框架概述 28
3.1.2 unittest框架運行原理 29
3.2 融會貫通深入使用unittest測試框架 32
3.2.1 測試夾具的使用 32
3.2.2 運行指定文件夾下的測試用例 33
3.2.3 動態(tài)查找測試用例并執(zhí)行 37
3.2.4 按需組裝測試用例并執(zhí)行 38
3.2.5 自定義測試用例查找原則 39
3.2.6 執(zhí)行時忽略某些測試用例 40
3.3 unittest自動化測試框架搭建實踐 41
3.3.1 搭建UI自動化測試框架 41
3.3.2 擴(kuò)展unittest的測試報告 44
3.3.3 使用unittest三步生成自動化測試框架 48
3.4 擴(kuò)展功能unittest測試框架集成接口測試 49
3.4.1 Requests核心講解 49
3.4.2 unittest測試框架集成接口測試示例 53
3.5 本章小結(jié) 56
第4章 玩轉(zhuǎn)自動化測試框架 57
4.1 向經(jīng)典致敬測試框架pytest核心講解 57
4.1.1 pytest基礎(chǔ)用法 58
4.1.2 零代價遷移unittest測試框架 60
4.1.3 pytest核心概念 62
4.2 深入探索pytest集成API測試 63
4.3 游刃有余pytest核心用法 65
4.3.1 自定義測試用例查找原則 65
4.3.2 前置操作和后置操作的用法 66
4.3.3 靜態(tài)挑選測試用例 68
4.3.4 動態(tài)挑選測試用例 70
4.3.5 忽略測試用例 71
4.3.6 失敗測試用例自動重試 73
4.3.7 并發(fā)運行測試用例 74
4.4 深入實現(xiàn)pytest數(shù)據(jù)驅(qū)動核心用法 75
4.4.1 pytest實現(xiàn)數(shù)據(jù)驅(qū)動 75
4.4.2 pytest數(shù)據(jù)驅(qū)動示例 77
4.5 如虎添翼測試報告集成實踐 85
4.5.1 pytest-html測試報告集成詳解 85
4.5.2 Allure測試報告集成詳解 86
4.6 本章小結(jié) 98
第5章 自動化測試框架實踐 99
5.1 元素定位策略實踐 99
5.1.1 多種元素定位模型 99
5.1.2 元素定位實踐 101
5.2 PageObject模型實踐 106
5.2.1 PageObject模型的核心 106
5.2.2 PageObject模型應(yīng)用 107
5.3 UI自動化測試和接口自動化測試的融合 109
5.3.1 融合原理 110
5.3.2 融合實踐 111
5.4 測試數(shù)據(jù)應(yīng)用實踐 114
5.4.1 測試數(shù)據(jù)核心講解 114
5.4.2 數(shù)據(jù)驅(qū)動模型 117
5.4.3 數(shù)據(jù)驅(qū)動實踐 118
5.5 Web Service接口實踐 124
5.5.1 Web Service接口調(diào)用原理 124
5.5.2 Web Service接口測試實踐 125
5.6 本章小結(jié) 130
第6章 自動化測試框架與交互式命令 131
6.1 交互式命令精要 131
6.1.1 什么是交互式命令 131
6.1.2 交互式命令在測試框架中的作用 132
6.2 交互式命令在pytest中的使用 133
6.3 自主實現(xiàn)交互式命令 135
6.3.1 Python標(biāo)準(zhǔn)庫argparse詳解 135
6.3.2 交互式命令代碼實踐 138
6.4 測試框架集成交互式命令 139
6.5 本章小結(jié) 141
第7章 自動化測試框架與數(shù)據(jù)驅(qū)動 142
7.1 數(shù)據(jù)驅(qū)動原理概述 142
7.2 深入數(shù)據(jù)驅(qū)動原理 143
7.2.1 數(shù)據(jù)驅(qū)動DDT概述 144
7.2.2 數(shù)據(jù)驅(qū)動DDT源碼解析 149
7.3 自主實現(xiàn)數(shù)據(jù)驅(qū)動 153
7.4 本章小結(jié) 157
第8章 自動化測試框架與測試環(huán)境 158
8.1 測試環(huán)境給自動化測試框架帶來的挑戰(zhàn) 158
8.1.1 測試環(huán)境的普遍問題 158
8.1.2 自動化測試框架如何應(yīng)對測試環(huán)境變化 159
8.2 測試環(huán)境切換原理 160
8.2.1 測試環(huán)境切換原理概述 160
8.2.2 測試環(huán)境切換核心代碼實踐 161
8.3 測試框架集成測試環(huán)境動態(tài)切換 165
8.4 本章小結(jié) 170
第9章 自動化測試框架與測試用例 171
9.1 自動化測試用例詳解 171
9.2 測試用例在測試框架中的組織形式 172
9.2.1 從功能出發(fā)進(jìn)行模塊化組織 172
9.2.2 從用戶角色出發(fā)進(jìn)行模塊化組織 173
9.3 自主實現(xiàn)按需執(zhí)行測試用例 174
9.3.1 測試用例挑選的場景 175
9.3.2 挑選測試用例的原理 175
9.4 測試用例挑選與測試框架的集成 180
9.4.1 測試框架文件結(jié)構(gòu) 181
9.4.2 測試框架源碼解析 182
9.4.3 執(zhí)行測試 192
9.5 本章小結(jié) 194
第10章 自動化測試框架與并發(fā)運行 195
10.1 并發(fā)與全局解釋器鎖 195
10.2 自主實現(xiàn)并發(fā) 197
10.2.1 多線程并發(fā) 197
10.2.2 多進(jìn)程并發(fā) 201
10.2.3 多進(jìn)程下線程池并發(fā) 204
10.3 自主實現(xiàn)分布式并發(fā) 206
10.3.1 利用Selenium Grid實現(xiàn)分布式并發(fā) 206
10.3.2 分布式并發(fā)代碼實踐 207
10.4 測試框架集成實踐 208
10.4.1 集成PageObject模型 209
10.4.2 集成并發(fā)運行 213
10.5 本章小結(jié) 217
第11章 自動化測試框架與錯誤處理 218
11.1 錯誤處理核心原理 218
11.1.1 常見的錯誤處理類型 218
11.1.2 錯誤處理機制核心講解 220
11.2 自主實現(xiàn)錯誤處理模塊 222
11.2.1 自定義錯誤處理 222
11.2.2 錯誤處理模塊代碼實踐 223
11.3 測試框架集成錯誤處理 225
11.4 本章小結(jié) 230
第12章 自動化測試框架與日志系統(tǒng) 231
12.1 Logging精要講解 231
12.1.1 Logging工作流 232
12.1.2 Logging核心組成 234
12.2 自主實現(xiàn)日志系統(tǒng) 235
12.2.1 簡單的日志系統(tǒng) 235
12.2.2 多線程Logging精要 238
12.2.3 多進(jìn)程Logging精要 239
12.3 測試框架集成日志系統(tǒng) 242
12.4 本章小結(jié) 249
第13章 自動化測試框架與測試報告 250
13.1 測試報告詳解 250
13.1.1 測試報告核心模塊 250
13.1.2 測試報告設(shè)計 251
13.2 自主實現(xiàn)測試報告 253
13.2.1 測試報告模板開發(fā) 253
13.2.2 測試報告數(shù)據(jù)收集代碼實踐 258
13.3 測試框架集成測試報告 262
13.4 本章小結(jié) 268
第14章 完善自動化測試框架 269
14.1 自主實現(xiàn)前置準(zhǔn)備和后置清理 269
14.1.1 前置準(zhǔn)備和后置清理的工作流程 269
14.1.2 自主代碼實踐 271
14.2 融合API和UI進(jìn)行自動化測試 273
14.2.1 使用API或者UI進(jìn)行測試 274
14.2.2 同時運行API和UI自動化測試 275
14.3 一些遺留問題 277
14.4 本章小結(jié) 278
第15章 自動化測試框架與持續(xù)集成/持續(xù)部署 279
15.1 持續(xù)集成/持續(xù)部署核心原理講解 279
15.1.1 什么是持續(xù)集成/持續(xù)部署 279
15.1.2 持續(xù)集成/持續(xù)部署核心工作流 280
15.2 持續(xù)集成/持續(xù)部署工具詳解 281
15.2.1 Jenkins流水線 282
15.2.2 Docker核心知識 283
15.2.3 GitHub WebHook要點 286
15.3 持續(xù)集成項目實戰(zhàn) 286
15.3.1 創(chuàng)建GitHub項目 286
15.3.2 編寫Jenkinsfile文件 287
15.3.3 Jenkins Blue Ocean流水線搭建 288
15.4 本章小結(jié) 300
第16章 測試框架發(fā)布 301
16.1 測試框架打包、發(fā)布精要 301
16.1.1 詳解pip和PyPI 302
16.1.2 打包測試框架 303
16.1.3 發(fā)布到PyPI 304
16.2 測試框架發(fā)布實戰(zhàn) 304
16.3 本章小結(jié) 313