這是《落葉》文集里第 263?片落葉,希望你能喜歡,不為別的,只為這份堅(jiān)持。
自己挖坑自己填,好記性不如爛筆頭,盡在《老兵愛(ài)學(xué)習(xí)》
【已學(xué)習(xí)】
第一節(jié)課 總體設(shè)計(jì)思想 / 第二節(jié)課 接口基礎(chǔ) / 第三節(jié)課 接口手工測(cè)試
1、什么是接口
接口其實(shí)就是由一段具備邏輯處理的程序代碼所組成的,可被其他方法、服務(wù)或應(yīng)用所使用。
調(diào)用接口的人,可以把接口看作一個(gè)黑匣子,只需要按接口文檔的約定傳入正確的參數(shù),再接收并處理返回的數(shù)據(jù),不需要知道黑匣子里的處理機(jī)制;
2、為什么要做接口測(cè)試,及接口自動(dòng)化
接口測(cè)試是測(cè)試系統(tǒng)組件間接口的一種測(cè)試。接口測(cè)試主要用于檢測(cè)外部組件與系統(tǒng)之間以及內(nèi)部各個(gè)子系統(tǒng)之間的交互。測(cè)試的重點(diǎn)是要檢查數(shù)據(jù)的交換,傳遞和控制管理過(guò)程,以及系統(tǒng)間的相互邏輯及依賴關(guān)系等。?
1、產(chǎn)品的系統(tǒng)復(fù)雜度越來(lái)越高,只靠手工的前端測(cè)試,很難確保很高的覆蓋度,但是通過(guò)接口測(cè)試,我們能模擬出各種類(lèi)型的入?yún)⒅担ㄒ恍那岸四M不了的入?yún)⒅担覀兡芨鶕?jù)接口文檔的定義,設(shè)計(jì)出相對(duì)完善的入?yún)⒅担?zhēng)在接口層先保證業(yè)務(wù)邏輯的正確,剩余的大多數(shù)問(wèn)題就只是 APP 自身的交互和數(shù)據(jù)展示問(wèn)題了。
2、接口測(cè)試相對(duì) UI/功能測(cè)試來(lái)說(shuō),自動(dòng)化的成本更低,性價(jià)比更高,特別是在產(chǎn)品進(jìn)入穩(wěn)定維護(hù)期之前,UI 和功能都不穩(wěn)定,變化較大,導(dǎo)致腳本返工甚至于廢棄重寫(xiě)的幾率都很大,而接口大多都是可以重用的。
3、現(xiàn)在很多系統(tǒng)前后端是分離的,從安全層面來(lái)說(shuō),只依賴于前端進(jìn)行 Input Validation 已經(jīng)完全不能滿足系統(tǒng)的安全要求,因?yàn)槔@過(guò)前端相對(duì)容易,所以就需要后端同樣進(jìn)行 Output Validation,這就需要用接口測(cè)試工具去驗(yàn)證;
3、Fiddler
a. 打開(kāi)Fiddler->Tools->Fiddler
Options在Connection面板里將Allow remote computers to connect勾選起來(lái),確定后,關(guān)閉Fiddler并重新打開(kāi)Fiddler
b. 在cmd里執(zhí)行netstat-anop tcp查看Fiddler進(jìn)程是否正常監(jiān)聽(tīng)8888端口,如果服務(wù)沒(méi)有正常開(kāi)啟,可以嘗試使用其他端口,端口修改的位置,如上圖位置
c. 從上圖我們看到,進(jìn)程ID為7724的Fiddler正在監(jiān)聽(tīng)8888端口,說(shuō)明代理已經(jīng)在工作了.
d. 在cmd里執(zhí)行ipconfig查看本機(jī)IP號(hào)
e. 設(shè)置手機(jī)端網(wǎng)絡(luò)代理
(1) 打開(kāi)你手機(jī)連接的無(wú)線,代理設(shè)置->手動(dòng)
(2) 主機(jī):192.168.0.153(你的運(yùn)行Fiddler的電腦IP)
(3) 端口:8888
(4) 確定,蘋(píng)果手機(jī)直接后退就可以了
f. 手機(jī)端操作app,檢查fiddler是否有數(shù)據(jù)記錄
g. 測(cè)試完成后,記得關(guān)閉代理,以免 Fiddler 關(guān)掉之后,手機(jī)上不了網(wǎng)
4、接口測(cè)試用例設(shè)計(jì)
聽(tīng)完了老師關(guān)于設(shè)計(jì)方法的講解,結(jié)合我自己的認(rèn)知,我對(duì)接口測(cè)試的用例設(shè)計(jì)做了下面一些思考和總結(jié)。
參數(shù)校驗(yàn):
a. 參數(shù)完整性
通常是用來(lái)做入?yún)?shù)必填項(xiàng)檢查的,因?yàn)榍岸送鶗?huì)做必填項(xiàng)保護(hù)和響應(yīng)提示信息,為了確保服務(wù)端也做了必填項(xiàng)保護(hù),我們需要將必填項(xiàng)對(duì)應(yīng)的入?yún)?shù)值置為空,看服務(wù)端是否會(huì)返回相應(yīng)的提示信息和響應(yīng)狀態(tài)碼。
b. 參數(shù)合法性
入?yún)?shù)值的合法性檢查一般也會(huì)在前端做保護(hù),但后端往往容易忽視或遺漏,為了確保服務(wù)端也做了入?yún)?shù)值的合法性檢查,我們除了設(shè)計(jì)合法的入?yún)⒅抵猓€需要設(shè)計(jì)一些非法的參數(shù)值,看服務(wù)端是否會(huì)拋出相應(yīng)的異常和響應(yīng)狀態(tài)碼。
邏輯校驗(yàn):
這里的邏輯性檢查,就是檢查服務(wù)端返回的 JSON 串里的參數(shù)值,是否與根據(jù)入?yún)⒌闹岛蜆I(yè)務(wù)邏輯推演出來(lái)的期望值一致,以此來(lái)測(cè)試該接口的業(yè)務(wù)邏輯處理是否正確。
關(guān)于這兩類(lèi)校驗(yàn)的自動(dòng)化實(shí)現(xiàn),我其實(shí)也一直在糾結(jié)它們的性價(jià)比。
前者是自動(dòng)化測(cè)試工具很容易實(shí)現(xiàn)的,應(yīng)用面也較廣,比如回歸測(cè)試、環(huán)境檢查、現(xiàn)網(wǎng)巡檢等場(chǎng)景,而且也易于復(fù)制,因?yàn)樗旧砗蜆I(yè)務(wù)邏輯耦合性不大,更多的只是檢查該接口的健康狀態(tài)。
后者因?yàn)樾枰r?yàn)邏輯正確與否,所以在做返回值比對(duì)時(shí),就不僅僅只是比較 JSON 串里的返回參數(shù)值和期望結(jié)果是否一致了,在某些場(chǎng)景下還需要對(duì)數(shù)據(jù)庫(kù)里的數(shù)據(jù)進(jìn)行實(shí)時(shí)比對(duì)或操作。這在設(shè)計(jì)工具時(shí),不可避免地會(huì)增加實(shí)現(xiàn)的難度,同時(shí)還縮小了可應(yīng)用范圍,至少這類(lèi)校驗(yàn)就不能在真實(shí)的客戶環(huán)境去執(zhí)行,會(huì)存在風(fēng)險(xiǎn)。
所以,比較期待在后續(xù)課程的學(xué)習(xí)過(guò)程中,能讓我關(guān)于接口邏輯校驗(yàn)自動(dòng)化工具的構(gòu)思變得清晰。
【待學(xué)習(xí)】
第四節(jié)課:Python 操作 MySQL(2017.08.11 周五晚 21:00)
作者簡(jiǎn)介:14 年測(cè)試 + 11 年項(xiàng)目管理 + 11 年團(tuán)隊(duì)管理 = 一個(gè)測(cè)試?yán)媳?/p>