接口測試系列文章之接口測試的核心概念
開發口中的接口是什么?
我相信絕大多數測試同學聽聞“接口”二字都源于開發同學。書本中的標準接口定義叫Interface,在JAVA編程語言中接口是一個抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過implements關鍵字實現接口,從而來重寫接口中的抽象方法。
例如:
- interface Animal {
- public void eat();
- public void travel();
- }
- class Cat implements Animal {
- public void eat() {
- // TODO Auto-generated method stub
- }
- public void travel(){
- // TODO Auto-generated method stub
- }
- }
而實際工作中開發同學常常掛在嘴邊的接口并不是理論上的接口interface,通常通過以下面兩種方式體現:
1.就是一個http請求
例如:http://host:port/getAllPeople
這個請求就是一個接口,當你發送這個url后,會從服務器端收到請求。服務端的核心代碼是,有一個方法來判斷url是什么,如果匹配到getAllPeople,則調用相關的方法,例如getAllPeople(){//具體實現代碼}
2.就是不通過http請求,直接調用方法getAllPeople(){//具體實現代碼}
而對于我們測試人員最為關注的是第一種方式,即通過http請求調用后端服務代碼,因為測試同學代碼相對薄弱,直接通過代碼調用的方式進行接口測試難度較高,另外好多公司的研發代碼是絕對保密的,研發團隊以外的人很難獲取代碼。
為什么近年接口測試這么火爆呢?
傳統的開發模式轉變,從過去的瀑布到如今的敏捷;
移動互聯網的普及,用戶頁面需求變更頻繁,但是服務端接口相對穩定;
微服務的興起,好多服務根本沒有供測試人員的UI可點,我們只能對服務端進行接口測試。
常見的接口類型
- HTTP接口,
- RPC接口,
- Web Service接口,
- Dubble接口,
- RESTful接口,
其中RESTful接口是基于HTTP接口的,Web Service及Dubble屬于RPC接口。目前HTTP接口是最核心也是應用最廣泛的接口!
接口測試的核心測試點
校驗接口參數是否達到要求(邊界、業務規則)
校驗接口返回數據的正確性與格式
校驗接口覆蓋率是否達到要求(一般要求核心接口要達到100%的測試率,非核心接口根據)
性能指標是否滿足要求(接口的響應時間、處理能力)
安全指標是否滿足要求(一般接口都不會暴露在網上任意被調用,需要做一些限制,比如鑒權或認證。)
接口測試較UI測試的優勢
1.接口測試相對容易實現自動化持續集成,且相對UI自動化也比較穩定
2.測試可以更早的介入(具體的時間點應該是在后臺接口開發基本完畢之后,需要模塊間進行接口聯調的時候)
3.可以發現功能測試覆蓋不到的服務端問題
接口測試開展的四個步驟
1.確認接口文檔的準確性,這是接口測試通過與否的標準
2.準備接口測試數據
3.構建接口
代碼選擇java的httpclient jar包或者python的requests模塊
工具選擇postman、jmeter等
4.校驗接口請求,在成功調用接口后,獲取接口的響應數據,根據接口文檔來判斷接口測試的通過與否
做好接口測試必備的知識點
了解OSI網絡模型,TCP/UDP協議,掌握HTTP/HTTPS協議,了解RPC, Web Service及REST,理解Session和Cookie;
掌握常用的接口測試工具Postman,Jmeter,SoupUI等;
掌握基本的抓包工具如Chrome開發者工具,Fiddler,Wireshark等;
掌握一門編程語言Python或Java;
了解Nginx, Apache, Tomcat等服務器中間件;
掌握數據庫基本查詢命令,及Redis操作,用于檢查響應結果;
掌握基本的Linux日志查詢和篩選命令。
總結
其實接口測試開展的順利與否,技術并不占主要因素(核心技術就是我講的這么多,你會了就可以從事接口測試了)。個人覺得溝通才是接口測試成敗的核心,因為接口測試的開展以及接口文檔的編寫需要開發人員大量的配合,這是極其需要溝通技巧的!(溝通問題不是本文的討論范圍)