最近總在思考一個問題: 在這些年所從事的軟件技術(shù)相關(guān)的工作中,沉淀了些什么可以作為經(jīng)驗(yàn)講述給后來者?荀子在《勸學(xué)》中給出的答案是傳道、授業(yè)、解惑。團(tuán)隊(duì)中每年都會有新人進(jìn)來,在對新入職員工培訓(xùn)時,通常會告訴他們快速融入團(tuán)隊(duì)需要掌握哪些知識和解答他們在工作中遇到的問題,F(xiàn)在看來,這算是授業(yè)和解惑了。
勝任一份接口自動化測試工作,首先需要熟悉的就是協(xié)議。這就相當(dāng)于接口測試的心法,再配合被測軟件使用場景具體的業(yè)務(wù)知識,基本就可以做接口測試了。本書重點(diǎn)介紹了HTTP相關(guān)的基礎(chǔ)知識,對WebService、WebSocket、gRPC也有所涉及。接口測試工具在這個過程中所充當(dāng)?shù)木褪枪ぞ叩谋玖x。就像框架的存在是為了提升工作效率。從這個角度理解,本書中所涉及的幾款接口測試工具,其實(shí)就是工具化的接口測試框架。
作為一名IT從業(yè)者,筆者的職業(yè)生涯里接觸了很多編程語言、工具、框架,其中的一個或者幾個在一段特定的時間里會成為工作中的主要內(nèi)容。隨著時間的推移,有些技術(shù)會更迭,有些工具會升級(或者被新的工具所取代),有時甚至因?yàn)楣ぷ鞯木壒誓承┨囟ǖ募夹g(shù)和工具被束之高閣。面對新的技術(shù)和工具,需要具有快速學(xué)習(xí)和上手的能力。這也是技術(shù)崗在招聘時很在意學(xué)習(xí)能力的原因吧,因此在本書的寫作過程中,筆者有意識地將自己學(xué)習(xí)技術(shù)和工具的方法融入具體技術(shù)的講解中,希望這種學(xué)習(xí)方法能夠幫助更多后來者。
筆者現(xiàn)在主要是帶團(tuán)隊(duì)做CNAS、CMA軟件相關(guān)的第三方評測工作,同時樂于將自己工作中所沉淀下來的技術(shù)分享出來。本書是筆者的第2本技術(shù)類作品,不足之處請多包涵。如果在學(xué)習(xí)接口自動化測試技術(shù)時,從本書中得到了一些幫助,則是筆者的榮幸。
本書目標(biāo)讀者
本書未涉及Python基礎(chǔ)的講解,因此在學(xué)習(xí)本書前需要有一些Python基礎(chǔ)知識。書中內(nèi)容適合大多數(shù)有意學(xué)習(xí)或提升接口自動化測試技能的讀者。目標(biāo)讀者可以概括為以下幾類。
(1) 對軟件接口自動化測試技術(shù)感興趣的初學(xué)者,跟著書中的順序?qū)W習(xí)即可。
(2) 接口測試工程師,通過本書系統(tǒng)化自己所掌握的自動化測試技術(shù)。
(3) 性能測試工程師,通過本書的學(xué)習(xí)可以手工編寫和優(yōu)化性能測試腳本。
(4) 高等院校測試專業(yè)或測試培訓(xùn)班的學(xué)生,提升自己的崗位競爭力。
(5) 有意愿提升自己接口測試技術(shù)的從業(yè)者或準(zhǔn)從業(yè)者,學(xué)習(xí)永遠(yuǎn)不晚。
本書的特色
本書是一本適合自學(xué)的接口自動化測試技術(shù)參考書,主要有以下幾個特色。
(1) 涵蓋Postman、JMeter、Apifox等主流接口測試工具。
(2) 以實(shí)例代碼驅(qū)動接口測試知識點(diǎn)的講解。
(3) 基于Requests unittest Python架構(gòu)的接口測試框架講解。
本書主要內(nèi)容
基礎(chǔ)篇(第1~5章): 本篇主要介紹接口自動化測試行業(yè)現(xiàn)狀,基礎(chǔ)環(huán)境的搭建與配置,主流接口測試工具的介紹及下載并安裝; HTTP基礎(chǔ)知識; Fiddler抓包工具的使用,常用命令,基于手機(jī)端App抓包及實(shí)用技巧; 第三方接口工具包Requests的初級使用。
工具篇(第6~8章): 本篇主要介紹Postman的基本使用方法及Newman的使用; Apifox接口測試及接口文檔的管理,HTTP、WebSocket、WebService和gRPC接口實(shí)例; JMeter接口測試流程、斷言、輸出和案例。
框架篇(第9~14章): 本篇主要介紹數(shù)據(jù)驅(qū)動在測試框架中的應(yīng)用; 基于數(shù)據(jù)驅(qū)動模式的自動化框架實(shí)現(xiàn)及框架實(shí)戰(zhàn)案例; 持續(xù)集成的部署與運(yùn)行。
掃描封底的文泉云盤防盜碼,再掃描目錄上方的二維碼可下載本書源代碼。
致謝
首先要感謝清華大學(xué)出版社趙佳霓編輯,你的寬容和責(zé)任心讓本書得以順利出版。還要感謝我的恩師趙慎龍老師和鄧祖華老師對我的幫助。最后要感謝我的妻子在本書寫作期間給予我的支持。感謝一路走來所有關(guān)心和幫助過我的人。
胡勝強(qiáng)2024年10月
本書源碼
基礎(chǔ)篇
第1章接口自動化測試概述
1.1接口自動化測試的現(xiàn)狀
1.1.1接口測試與手工測試
1.1.2接口測試的流程
1.1.3接口自動化測試與UI自動化測試
1.2接口自動化測試的優(yōu)勢
1.2.1接口測試與測試開發(fā)
1.2.2適合做接口自動化測試的項(xiàng)目
1.2.3適合做接口自動化測試的團(tuán)隊(duì)
1.3主流接口自動化測試工具
1.3.1Postman
1.3.2Robot Framework
1.3.3Apifox
1.3.4Apache JMeter
1.3.5Requests
1.4接口自動化測試的發(fā)展趨勢
1.4.1接口用例平臺化
1.4.2協(xié)議及服務(wù)的多樣性
第2章HTTP基礎(chǔ)
2.1HTTP介紹
2.1.1HTTP的發(fā)展歷程
2.1.2HTTP的工作原理
2.1.3URL的組成
2.1.4資源、事務(wù)、報(bào)文
2.1.5HTTPS介紹
2.2HTTP請求與響應(yīng)
2.2.1HTTP常用請求方法
2.2.2響應(yīng)返回類型
2.3常見HTTP狀態(tài)碼
2.3.1狀態(tài)碼的作用
2.3.2常見正常返回狀態(tài)碼
2.3.3常見異常返回狀態(tài)碼
2.4Cookie和Session機(jī)制
2.4.1Cookie的原理
2.4.2Session的原理
第3章抓包利器: Fiddler
3.1Fiddler的安裝與配置
3.1.1Fiddler介紹
3.1.2Fiddler下載與安裝
3.1.3Fiddler配置
3.2Fiddler捕獲與內(nèi)容解析
3.2.1工作區(qū)介紹
3.2.2Fiddler捕獲數(shù)據(jù)
3.2.3Fiddler抓包數(shù)據(jù)解析
3.3使用Fiddler做接口驗(yàn)證
3.3.1驗(yàn)證GET接口請求
3.3.2驗(yàn)證POST接口請求
3.3.3驗(yàn)證帶附件接口請求
3.4使用Fiddler捕獲App請求
3.4.1Fiddler參數(shù)設(shè)置
3.4.2App端證書安裝及代理設(shè)置
3.4.3捕獲App端接口數(shù)據(jù)
3.5Fiddler使用技巧
3.5.1捕獲內(nèi)容的過濾
3.5.2常用Fiddler命令及快捷鍵
3.5.3接口響應(yīng)擋板設(shè)置
第4章接口測試環(huán)境的準(zhǔn)備
4.1Postman安裝與配置
4.1.1軟件下載
4.1.2Postman的安裝
4.1.3軟件運(yùn)行調(diào)試
4.2Python的安裝與配置
4.3Apifox安裝與配置
4.3.1軟件下載
4.3.2Apifox的安裝
4.3.3軟件運(yùn)行調(diào)試
4.4Apache JMeter安裝與配置
4.4.1JDK的安裝與配置
4.4.2Apache JMeter的安裝
4.4.3軟件運(yùn)行調(diào)試
4.5Requests安裝與配置
4.5.1PyCharm的安裝與配置
4.5.2Requests的安裝
4.5.3軟件運(yùn)行調(diào)試
第5章Requests初級使用
5.1Requests介紹
5.1.1GET方法的使用
5.1.2POST方法的使用
5.1.3PUT方法的使用
5.1.4HEAD方法的使用
5.1.5PATCH方法的使用
5.2基于GET方法的接口測試
5.2.1GET方法參數(shù)解析
5.2.2基于GET方法的請求類型
5.2.3常見Requests響應(yīng)參數(shù)
5.3基于POST方法的接口測試
5.3.1POST方法參數(shù)解析
5.3.2消息主體: Data類型實(shí)例
5.3.3消息主體: JSON類型實(shí)例
5.3.4消息主體: XML類型實(shí)例
5.3.5消息主體: File類型實(shí)例
5.4接口測試常用方法
5.4.1Cookies的傳遞
5.4.2身份認(rèn)證
5.4.3生成測試執(zhí)行報(bào)告
工具篇
第6章接口測試工具: Postman
6.1Postman介紹
6.1.1Postman界面
6.1.2Postman使用流程
6.2使用Postman做接口測試
6.2.1基于GET方法的接口請求
6.2.2基于POST方法的接口請求
6.3Postman的斷言
6.3.1Postman內(nèi)置斷言
6.3.2使用JavaScript自定義斷言
6.3.3斷言使用實(shí)例
6.4Postman的參數(shù)處理
6.4.1參數(shù)化請求數(shù)據(jù)
6.4.2前置參數(shù)處理
6.4.3Cookie的處理
6.5Newman的應(yīng)用
6.5.1Newman的配置
6.5.2Newman的使用
第7章接口測試工具: Apifox
7.1Apifox介紹
7.1.1Apifox的特點(diǎn)
7.1.2Apifox使用流程
7.2接口文檔的定義與管理
7.2.1設(shè)計(jì)接口文檔
7.2.2接口管理
7.3使用Apifox發(fā)送接口請求
7.3.1HTTP接口實(shí)例
7.3.2WebSocket 接口實(shí)例
7.3.3WebService 接口實(shí)例
7.3.4gRPC接口實(shí)例
第8章接口測試工具: JMeter
8.1JMeter介紹
8.1.1JMeter的優(yōu)勢
8.1.2JMeter主要組成
8.1.3JMeter接口測試流程
8.1.4使用Fiddler錄制接口腳本
8.2JMeter接口請求的發(fā)送
8.2.1GET請求發(fā)送實(shí)例
8.2.2POST請求發(fā)送實(shí)例
8.2.3FTP請求發(fā)送實(shí)例
8.3JMeter的斷言與參數(shù)化
8.3.1JMeter斷言
8.3.2JMeter的參數(shù)化
8.4JMeter結(jié)果輸出
8.4.1JMeter內(nèi)置結(jié)果輸出
8.4.2與Ant配合輸出測試報(bào)告
8.5基于JMeter的接口測試實(shí)例
8.5.1測試思路
8.5.2腳本設(shè)計(jì)
8.5.3結(jié)果輸出
框架篇
第9章unittest的使用
9.1unittest介紹
9.1.1unittest框架的構(gòu)成
9.1.2第1個unittest接口示例
9.2TestCase與TestFixture的應(yīng)用
9.2.1TestCase的執(zhí)行順序
9.2.2TestFixture的使用
9.3TestSuite的應(yīng)用
9.3.1測試套件的創(chuàng)建
9.3.2discover執(zhí)行更多用例
9.3.3批量執(zhí)行用例
9.4TestRunner的應(yīng)用
9.4.1斷言的使用
9.4.2裝飾器的使用
9.4.3生成測試報(bào)告
9.5Requests與unittest框架整合應(yīng)用
9.5.1框架設(shè)計(jì)思路
9.5.2case模塊用例
9.5.3data模塊數(shù)據(jù)
9.5.4config模塊
9.5.5utils模塊
9.5.6bin運(yùn)行模塊
9.5.7report輸出模塊
第10章pytest的使用
10.1pytest介紹
10.1.1框架構(gòu)成
10.1.2軟件安裝
10.1.3運(yùn)行規(guī)則
10.1.4測試用例
10.2Fixture與參數(shù)化
10.2.1Fixture的優(yōu)勢
10.2.2用例運(yùn)行的級別
10.2.3conftest.py配置文件
10.2.4測試數(shù)據(jù)的參數(shù)化
10.3裝飾器與斷言
10.3.1裝飾器的使用
10.3.2斷言的使用
10.3.3用例執(zhí)行的順序
10.3.4執(zhí)行異常的用例處理
10.3.5用例執(zhí)行后的輸出
10.4Requests與pytest的整合實(shí)例
10.4.1框架整體設(shè)計(jì)思路
10.4.2Case模塊的實(shí)現(xiàn)
10.4.3配置模塊的實(shí)現(xiàn)
10.4.4結(jié)果輸出模塊的實(shí)現(xiàn)
第11章數(shù)據(jù)驅(qū)動測試應(yīng)用
11.1數(shù)據(jù)驅(qū)動在接口測試中的重要性
11.1.1從文件中讀取測試數(shù)據(jù)
11.1.2將測試結(jié)果寫入數(shù)據(jù)文件
11.2基于ddt數(shù)據(jù)驅(qū)動的實(shí)現(xiàn)
11.2.1ddt介紹及安裝
11.2.2ddt讀取測試數(shù)據(jù)
11.2.3ddt對不同數(shù)據(jù)源的管理
11.3基于Excel方式的數(shù)據(jù)管理
11.3.1Excel管理數(shù)據(jù)的介紹及安裝
11.3.2Excel表數(shù)據(jù)的讀取
11.3.3Excel表數(shù)據(jù)的寫入
11.3.4模塊化Excel數(shù)據(jù)操作
11.4基于JSON方式的數(shù)據(jù)管理
11.4.1JSON管理數(shù)據(jù)介紹
11.4.2JSON數(shù)據(jù)的讀取
11.4.3JSON數(shù)據(jù)的寫入
11.4.4模塊化JSON數(shù)據(jù)操作
第12章Requests使用進(jìn)階
12.1接口請求中的實(shí)用方法
12.1.1Cookies傳遞的處理
12.1.2請求超時及安全證書處理
12.1.3文件上傳實(shí)例
12.1.4文件下載實(shí)例
12.1.5HTML返回結(jié)果參數(shù)提取實(shí)例
12.2基于Token和Sessions處理
12.2.1請求中Token參數(shù)的處理
12.2.2請求中Sessions的處理
12.3接口傳輸加密解密
12.3.1參數(shù)傳遞前的加密處理
12.3.2獲得響應(yīng)結(jié)果后的解密處理
第13章基于Web的接口測試框架案例
13.1框架設(shè)計(jì)思路
13.2case模塊的實(shí)現(xiàn)
13.3數(shù)據(jù)文件的處理
13.3.1config數(shù)據(jù)
13.3.2data數(shù)據(jù)
13.4utils模塊的實(shí)現(xiàn)
13.4.1獲取配置文件信息
13.4.2獲取Excel文件測試數(shù)據(jù)
13.4.3將測試結(jié)果寫入Excel文件
13.4.4測試用例執(zhí)行前的初始化
13.4.5發(fā)送測試結(jié)果郵件
13.5運(yùn)行模塊的實(shí)現(xiàn)
13.6結(jié)果文件的展示
13.6.1HTML運(yùn)行結(jié)果報(bào)告展示
13.6.2Excel運(yùn)行結(jié)果報(bào)告展示
第14章基于Jenkins持續(xù)集成的實(shí)現(xiàn)
14.1什么是持續(xù)集成
14.2Jenkins的安裝配置
14.2.1軟件的下載
14.2.2JDK的安裝和配置
14.2.3Tomcat的安裝和配置
14.2.4Jenkins的安裝和配置
14.3構(gòu)建定時任務(wù)
14.3.1構(gòu)建Project的基本流程
14.3.2構(gòu)建基于Python接口腳本的項(xiàng)目