主要內容:
1、什么是接口測試
2、接口都有哪些類型?
3、接口的本質是什么?
4、什么是接口測試?
5、為什么要做接口測試?
6、怎樣做接口測試?
7、接口測試點是什么?
8、接口測試都要掌握哪些知識?
9、其他相關知識?
一、什么是接口?
接口測試主要用於外部系統與系統之間以及內部各個子系統之間的交互點,定義特定的交互點,然后通過這些交互點來,通過一些特殊的規則也就是協議,來進行數據之間的交互
二、接口都有哪些類型?
接口一般分為兩種:
1、程序內部的接口
2、程序對外的接口
系統對外的接口:比如你要從別的網站或服務器上獲取資源或信息,別人肯定不會把數據庫共享給你,他只能給你提供一個他們寫好的方法來獲取數據,你引用他們提供的接口就能使用他寫好的方法,從而達到數據共享的目的
系統內部的接口:方法與方法之間,模塊與模塊之間的交互,程序內部拋出的接口,比如bbs系統,有登錄模塊、發帖模塊等等,那你要發帖就必須先登錄,那么這兩個模塊就得有交互,它就會拋出一個接口,供內部系統進行調用
接口的分類:
1、webservice接口
2、http api接口
webService接口是走soap協議通過http傳輸,請求報文和返回報文都是xml格式的,我們在測試的時候都用通過工具才能進行調用,測試
http api接口是走http協議,通過路徑來區分調用的方法,請求報文都是key-value形式的,返回報文一般都是json串,有get和post等方法,這也是最常用的兩種請求方式
json是一種通用的數據類型,所有的語言都認識它。(json的本質是字符串,他與其他語言無關,只是可以經過稍微加工可以轉換成其他語言的數據類型,比如可以轉換成python中的字典,key-value的形式,可以轉換成JavaScript中的原生對象,可以轉換成java中的類對象等)
三、接口的本質及其工作原理是什么?
接口可以簡單的理解是URL,工作原理是URL通過get或者post請求像服務器發送一些東西,然后得到一些相應的返回值,本質就是數據的傳輸與接收
四、什么是接口測試?
接口測試是測試系統組件間接口的一種測試。接口測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的交互點,測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關系等
通過URL像服務器或者其他模塊等,傳輸我們想傳輸的數據,然后看看他們返回的是不是我們預期想要的
五、為什么要做接口測試?
- 越底層發現bug,它的修復成本越低
- 前端隨便變,接口測好了,后端不用變,前后端是兩撥人開發的
- 檢查系統的安全性、穩定性,前端傳參不可信,比如京東購物,前端價格不可能傳入-1元, 但是通過接口可以傳入-1元
- 如今的系統復雜度不斷上升,傳統的測試方法成本急劇增加且測試效率大幅下降,接口測試可以提供這種情況下的解決方案
- 接口測試相對容易實現自動化持續集成,且相對UI自動化也比較穩定,可以減少人工回歸測試人力成本與時間,縮短測試周期,支持后端快速發版需求,接口持續集成是為什么能低成本高收益的根源
- 現在很多系統前后端架構是分離的,從安全層面來說:
(1)只依賴前端進行限制已經完全不能滿足系統的安全要求(繞過前面實在太容易),需要后端同樣進行控制,在這種情況下就需要從接口層面進行驗證
(2)前后端傳輸、日志打印等信息是否加密傳輸也是需要驗證的,特別是涉及到用戶的隱私信息,如身份證,銀行卡等
六、怎樣做接口測試?
由於項目前后端調用主要基於http協議的接口,所以測試接口時主要是通過工具或代碼模擬http請求的發送與接收。工具:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。也可以用接口自動化來實現,就是用代碼實現,框架和UI自動化差不多,發送請求用斷言來判斷
七、接口測試點是什么?
目的:測試接口的正確性和穩定性
原理:模擬客戶端向服務器發送請求報文,服務器接收請求報文后對相應的報文處理並向客戶端返回應答,客戶端接收應答的過程
重點:檢查數據的交換,傳遞和控制管理過程,還包括處理的次數
核心:持續集成是接口測試的核心
優點:為高復雜性的平台帶來高效的缺陷監測和質量監督能力,平台越復雜,系統越龐大,接口測試的效果越明顯(提高測試效率,提升用戶體驗,降低研發成本)
用例設計重點:通常情況下主要測試最外層的兩類接口:數據進入系統接口(調用外部系統的參數為本系統使用)和數據流出系統接口(驗證系統處理后的數據是否正常)
PS:設計用例時還需要注意外部接口提供給使用這些接口的外部用戶什么功能,外部用戶真正需要什么功能
問題1、后端接口都測試什么?
問題2、后端接口測試一遍,前端也測試一遍,是不是重復測試了?
從上面這兩張圖對比可以看出,兩個測試活動中相同的部分有功能測試、邊界分析測試和性能測試,其它部分由於各自特性或關注點不同需要進行特殊的測試,在此不做討論,接下來我們針對以上三部分相同的內容再進行分析:
1、基本功能測試:
針對基本業務功能進行測試,所以這部分是兩種測試重合度最高的一塊
2、邊界分析測試:
在基本功能測試的基礎上考慮輸入輸出的邊界條件,這部分內容也會有重復的部分(比如業務規則的邊界)。但是,前端的輸入輸出很多時候都是提供固守的值讓用戶選擇(如下拉框),在這種情況下測試的邊界范圍就非常有限,但接口測試就不存在這方面的限制,相對來說接口可以覆蓋的范圍更廣,同樣的,接口出現問題的概率也更高
3、性能測試:
App端性能主要關注與手機相關的特性,如手機cpu、內存、流量、fps等。接口性能主要關注接口響應時間、並發、服務端資源的使用情況等。兩種測試的策略和方法都有很大區別,所以這部分內容是需要分開單獨進行測試的
綜論:
1、接口測試和app測試的活動有部分重復的內容,主要集中在業務功能測試方面。除此之外,針對各自特性的測試都不一樣,需要分別進行有針對性的測試,才能確保整個產品的質量
2、接口測試可以關注於服務器邏輯驗證,而UI測試可以關注於頁面展示邏輯界面前端與服務器集成驗證
3、接口測試持續集成:
對於接口測試而言,持續集成自動化是核心內容,通過持自動化的手段我們才能做到低成本高效益
- 流程方面:在回歸階段加強接口異常場景的覆蓋率,並逐步向系統測試,冒煙測試階段延伸,最終達到全流程自動化
- 結果展示:更加豐富的結果展示、趨勢分析,質量統計和分析等
- 問題定位:報錯信息、日志更精准,方便問題復現與定位
- 結果校驗:加強自動化校驗能力,如數據庫信息校驗
- 代碼覆蓋率:不斷嘗試由目前的黑盒向白盒下探,提高代碼覆蓋率
- 性能需求:完善性能測試體系,通過自動化的手段監控接口性能指標是否正常
4、接口測試質量評估標准:
- 業務功能覆蓋是否完整
- 業務規則覆蓋是否完整
- 參數驗證是否達到要求(邊界、業務規則)
- 接口異常場景覆蓋是否完整
- 接口覆蓋率是否達到要求
- 代碼覆蓋率是否達到要求
- 性能指標是否滿足要求
- 安全指標是否滿足要求
八、接口測試都要掌握哪些知識?
- 了解系統及內部各個組件之間的業務邏輯交互
- 了解接口的I/O(input/output:輸入輸出)
- 了解協議的基本內容,包括:通信原理、三次握手、常用的協議類型、報文構成、數據傳輸方式、常見的狀態碼、URL構成等
- 常用的接口測試工具,比如:jmeter、loadrunner、postman、soapUI等
- 數據庫基礎操作命令(檢查數據入庫、提取測試數據等)
- 常見的字符類型,比如:char、varchar、text、int、float、datatime、string等
接口文檔八要素:
封面:封面最好是本公司規定的封面,有logo,內容標題,版本號,公司名稱,文檔產生日期
修訂歷史:表格形式較好些,包括:版本、修訂說明、修訂日期、修訂人、審核時間審核人等
接口信息:接口調用方式,常用的GET/POST方式,接口地址
功能描述:簡潔清晰的描述接口功能,比如:接口獲取的信息不包括哪些
接口參數說明:每個參數都要和實際中調用的一樣,包括大小寫;參數的含義言簡意賅的說明,格式,是string還是int還是long等格式
說明部分,說明參數值是需要哪里提供,並詳細說明參數怎么生成的,例如時間戳,是哪個時間段的,參數是否必填,一些參數是必須要有的,有些是可選參數等
返回值說明:
- 最好有一個模板返回值,並說明每個返回參數的意義
- 提供一個真實的調用接口,真實的返回值
調用限制、安全方面:加密方式,特殊加密過程雙方采用一致的加密算法就可以調用接口,保證了接口調用的安全性,比如常見的md5
文檔維護:文檔在維護的時候,如有修改一定要寫上修改日期,修改人,對大的修改要有版本號變更
九、其他相關知識?
get請求,post請求的區別:
- GET使用URL或Cookie傳參,而POST將數據放在BODY中
- GET的URL會有長度上的限制,則POST的數據則可以非常大
- POST比GET安全,因為數據在地址欄上不可見
- 一般get請求用來獲取數據,post請求用來發送數據
其實上面這幾點,只有最后一點說的是比較靠譜的,第一點post請求也可以把數據放到url里面,get請求其實也沒長度限制,post請求看起來參數是隱 式的,稍微安全那么一些些,但是那只是對於小白用戶來說的,就算post請求,你通過抓包也是可以抓到參數的。(唯一區別就是這一點,上面3點區別都是不 准確的)
http狀態碼:
- 200 2開頭的都表示這個請求發送成功,最常見的就是200,就代表這個請求是ok的,服務器也返回了
- 300 3開頭的代表重定向,最常見的是302,把這個請求重定向到別的地方了
- 400 400代表客戶端發送的請求有語法錯誤,401代表訪問的頁面沒有授權,403表示沒有權限訪問這個頁面,404代表沒有這個頁面
- 500 5開頭的代表服務器有異常,500代表服務器內部異常,504代表服務器端超時,沒返回結果