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