金字塔模型回顧
通過之前對金字塔結(jié)構(gòu)的學(xué)習(xí),大概了解到了金字塔模型想告訴我們的幾個道理:
1.越底層,越穩(wěn)定。
金字塔主要觀點認為單元測試的穩(wěn)定性高稚茅,需要多投入。
2.越底層平斩,越高效亚享。
程序的問題,最終還得落在具體的代碼上绘面,所以底層的測試更容易發(fā)現(xiàn)問題欺税。
3.越底層,越低成本揭璃。
越底層測試能越早發(fā)現(xiàn)問題晚凿,越早發(fā)現(xiàn)問題,修復(fù)的成本自然越低瘦馍。
4.越底層歼秽,越難實施。
越底層的實現(xiàn)對技術(shù)專業(yè)性要求越高情组,這點跟第三點有點矛盾燥筷,往往越專業(yè)的人才也意味著人力成本越高。
綜合下金字塔模型院崇,我們提出了橄欖模型(不倒翁模型)肆氓,拿接口測試和UI層測試以及單元測試做了比較,最終認定接口(API)測試可以獲得較高的投資回報底瓣。
接口測試
什么是接口(API)
API全稱Application Programming Interface谢揪,這里面我們其實不用去關(guān)注AP,只需要I上就可以捐凭。一個API就是一個Interface拨扶。我們無時不刻不在使用interfaces。我們乘坐電梯里面的按鈕是一個interface茁肠。我們開車一個踩油門它也是一個interface屈雄。我們計算機操作系統(tǒng)也是有很多的接口。(這是目前個人找到比較好理解的一段解釋)
接口就是一個位于復(fù)雜系統(tǒng)之上并且能簡化你的任務(wù)官套,它就像一個中間人讓你不需要了解詳細的所有細節(jié)。那我們今天要講的谷歌搜索系統(tǒng),它提供了搜索接口奶赔,簡化了你的搜索任務(wù)惋嚎。再像用戶登錄頁面,我們只需要調(diào)用我們的登錄接口站刑,我們就可以達到登錄系統(tǒng)的目的另伍。
現(xiàn)在市面上有非常多種風(fēng)格的Web API,目前最流行的是也容易訪問的一種風(fēng)格是REST或者叫RESTful 風(fēng)格的API绞旅。從現(xiàn)在開始摆尝,以下我提到的所有API都是指RESTful風(fēng)格的API。
什么是接口測試和為什么要做接口測試
接口測試是測試系統(tǒng)組件間接口的一種測試因悲。接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點堕汞。測試的重點是要檢查數(shù)據(jù)的交換,傳遞和控制管理過程晃琳,以及系統(tǒng)間的相互邏輯依賴關(guān)系等讯检。
現(xiàn)在很多系統(tǒng)前后端架構(gòu)是分離的,從安全層面來說卫旱,只依賴前端進行限制已經(jīng)完全不能滿足系統(tǒng)的安全要求(繞過前端太容易了)人灼, 需要后端同樣進行控制,在這種情況下就需要從接口層面進行驗證顾翼。
如今系統(tǒng)越來越復(fù)雜投放,傳統(tǒng)的靠前端測試已經(jīng)大大降低了效率,而且現(xiàn)在我們都推崇測試前移适贸,希望測試能更早的介入測試灸芳,那接口測試就是一種及早介入的方式。例如傳統(tǒng)測試取逾,你是不是得等前后端都完成你才能進行測試耗绿,才能進行自動化代碼編寫。 而如果是接口測試砾隅,只需要前后端定義好接口误阻,那這時自動化就可以介入編寫接口自動化測試代碼,手工測試只需要后端代碼完成就可以介入測試后端邏輯而不用等待前端工作完成晴埂。
接口測試的策略
接口測試也是屬于功能測試究反,所以跟我們以往的功能測試流程并沒有太大區(qū)別,測試流程依舊是:
1.測試接口文檔(需求文檔)
2.根據(jù)接口文檔編寫測試用例(用例編寫完全可以按照以往規(guī)則來編寫儒洛,例如等價類劃分精耐,邊界值等設(shè)計方法)
3. 執(zhí)行測試,查看不同的參數(shù)請求琅锻,接口的返回的數(shù)據(jù)是否達到預(yù)期卦停。
接口測試點
來個實例
假如我們現(xiàn)在拿到了如下的一個接口文檔(豆瓣圖書開源API:https://developers.douban.com/wiki/?title=book_v2
從文檔中我們可以大體知道這個接口的一些信息向胡,例如接口是GET請求,請求協(xié)議是https惊完,請求的接口服務(wù)器地址是api.douban.com僵芹,接口的路徑是/v2/book/search,接口可以帶有四個參數(shù)q(查詢的關(guān)鍵字)小槐,tag(查詢的tag)拇派,start(取結(jié)果的offset),count(取結(jié)果的條數(shù))凿跳,如果接口請求正常返回狀態(tài)200件豌,返回大體如下結(jié)果:
{
"start": 0,
"count": 10,
"total": 30,
"books" : [Book, ]
}
假設(shè)這個文檔是完善的(個人認為開發(fā)文檔還可以把參數(shù)類型寫上)這時我們根據(jù)這個文檔,我們設(shè)計了如下一個測試用例:
用q=自動化測試控嗜,start=0茧彤,count=1作為參數(shù)請求搜索圖書接口,那么接口請求的狀態(tài)碼應(yīng)該是200躬审,reponse應(yīng)該返回count=1,start=0等等棘街。
最后我們?nèi)?zhí)行測試用例,假設(shè)我現(xiàn)在沒有別的接口測試用例工具承边,我們就通過瀏覽器來測試這個GET請求的接口遭殉,那么我就可以在瀏覽器低質(zhì)欄輸入:https://api.douban.com/v2/book/search?q=自動化測試&start=0&count=1,并判斷返回信息是否有誤博助。
JSONView 引入
我們發(fā)現(xiàn)直接從Chrome打開我們的查詢圖書的接口請求险污,返回的 數(shù)據(jù)為JSON格式,但是瀏覽器顯示排版難以閱讀富岳,這時我們可以考慮安裝一些插件來便于我們閱讀蛔糯,例如JSONView插件:
https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc 。插件安裝完后我們再次請求搜索圖書接口窖式,我們看到格式化后的排版:
當(dāng)然類似的格式化JSON的插件工具非常多蚁飒,可以自己找個喜歡方便的便可。
Postman 引入
我們剛剛通過瀏覽器來測試我們的一個GET請求的接口的一個測試用例萝喘,但是平時我們的接口請求方法除了GET還有POST淮逻,PUT,DELETE等等阁簸,那么瀏覽器畢竟不是專業(yè)的接口測試軟件爬早,而且它也無法測試POST這類型的的接口,那么我們就需要找一個專業(yè)的接口測試軟件:Postman启妹。
Postman 的安裝
以前的Postman 除了mac版本都需要在Chrome的插件安裝筛严,但現(xiàn)在也推出Win和liunx的PC版,所以我們現(xiàn)在只需要到官方網(wǎng)站:https://www.getpostman.com/ 去根據(jù)自己的操作系統(tǒng)下載對應(yīng)的版本便可饶米。
首次使用
建議去注冊個賬號桨啃,登錄使用车胡,可以不同電腦上方便數(shù)據(jù)同步。
GET請求
POST 請求
POST 請求例子照瘾,通過Postman 配置好請求方法吨拍,地址,參數(shù)后發(fā)起請求网杆,最后如下:
也許你也有疑問,如果開發(fā)沒有完備的接口文檔伊滋,我如何知道他API的信息碳却?
這時我們就得通過一些抓包工具抓取這些API信息。
常見抓包工具
HTTP抓包工具:Fiddler笑旺、Charles昼浦、Firebug、開發(fā)者工具等等筒主。关噪。。
Chrome開發(fā)者工具簡單演示
1.打開Chrome 瀏覽器乌妙,按下F12快捷打開Chrome開發(fā)者工具
2.點擊Network 標(biāo)簽
3.勾選 Preserve log選項使兔,確保頁面刷新不會把已抓到的請求清空
4.打開網(wǎng)站首頁,輸入登錄名和密碼藤韵,點擊登錄
5.查看開發(fā)者工具虐沥,可以找到如下圖Login的請求接口
6.查看Login 請求的詳細信息
請求方法:POST
請求的URL:http://test.logwing.com/Home/Login
請求參數(shù)格式:Content-Type: application/x-www-form-urlencoded
請求參數(shù):UserName=XXX&Password=XXXX&CheckCode=&Remember=false&LoginCheckCode=7119
請求結(jié)果類型:Content-Type: application/json; charset=utf-8
請求結(jié)果:
更多關(guān)于Chrome開發(fā)者工具幫助中文幫助文檔可以參考:https://github.com/CN-Chrome-DevTools/CN-Chrome-DevTools
Fiddler
Chrome開發(fā)者工具依賴于Chrome瀏覽器,也只能抓取Chrome瀏覽器發(fā)起的請求泽艘,如果我們想獲取所有程序發(fā)起的請求欲险,我們就可以通過Fiddler來抓取。
簡介
Fiddler(中文名稱:小提琴)是一個HTTP的調(diào)試代理匹涮,以代理服務(wù)器的方式天试,監(jiān)聽系統(tǒng)的Http網(wǎng)絡(luò)數(shù)據(jù)流動,F(xiàn)iddler可以也可以讓你檢查所有的HTTP通訊然低,設(shè)置斷點喜每,以及Fiddle所有的“進出”的數(shù)據(jù)(我一般用來抓包),Fiddler還包含一個簡單卻功能強大的基于JScript .NET事件腳本子系統(tǒng),它可以支持眾多的HTTP調(diào)試任務(wù)脚翘。
工作原理
Fiddler是以代理WEB服務(wù)器的形式工作的,瀏覽器與服務(wù)器之間通過建立TCP連接以HTTP協(xié)議進行通信灼卢,瀏覽器默認通過自己發(fā)送HTTP請求到服務(wù)器,它使用代理地址:127.0.0.1, 端口:8888. 當(dāng)Fiddler開啟會自動設(shè)置代理来农, 退出的時候它會自動注銷代理鞋真,這樣就不會影響別的程序。不過如果Fiddler非正常退出沃于,這時候因為Fiddler沒有自動注銷涩咖,會造成網(wǎng)頁無法訪問海诲。解決的辦法是重新啟動下Fiddler。
簡單演示
抓取http請求
1.啟動Fiddler檩互。
2.點擊Fiddler主界面右下角的監(jiān)聽程序特幔,選擇ie瀏覽器則該系統(tǒng)上所有的瀏覽器發(fā)起的http請求都將被抓取。
3.打開chrome瀏覽器 闸昨,打開官網(wǎng)首頁蚯斯,輸入用戶名密碼登錄。
4.查看Fiddler主面板饵较,可以查看到Login請求拍嵌。
5.查看Login請求的信息
可以查看到跟Chrome插件查看到類似的信息。