前 言
“接口測試”一個讓人覺得非常高端的名詞银室,特別是對于剛?cè)腴T的測試同學(xué)而言。隨著測試技術(shù)不斷的深化,“接口測試”出現(xiàn)在我們視野中的頻次越來越高蜈敢。那么接口測試到底是如何做的辜荠?接口測試的優(yōu)勢又體現(xiàn)在哪些方面?
目錄
接口
一煤伟、什么是接口癌佩?
接口:外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點
-----百度百科
接口一般分為兩種:程序內(nèi)部接口、系統(tǒng)對外接口便锨。
1围辙、系統(tǒng)對外接口:例如最常見的系統(tǒng)對外接口—支付寶支付接口,很多app的支付功能都是調(diào)用支付寶的支付接口來進行支付放案,而該接口是支付寶系統(tǒng)提供給外部系統(tǒng)進行調(diào)用的
2姚建、程序內(nèi)部接口:模塊與模塊之間的交互,比如淘寶商城要購買商品吱殉,下訂單前必須要先登錄桥胞,那么下訂單與登錄之間就是一個交互,這個交互就是一個接口考婴,讓程序內(nèi)部的其他模塊進行調(diào)用的贩虾。
另外程序內(nèi)部方法直接的接口調(diào)用。比如電商平臺的前臺和后臺之間接口調(diào)用沥阱,前臺開發(fā)人員用HTML或CSS或JS等技術(shù)缎罢,后臺開發(fā)人員用JAVA,PYTHON等語言,若用戶從前臺輸入數(shù)據(jù)考杉,怎樣將數(shù)據(jù)傳到后臺呢策精?主要是通過http協(xié)議的get或post請求來實現(xiàn)前后端的數(shù)據(jù)傳遞,這些都是接口測試的一部分崇棠。
二咽袜、接口的常見類型
webService接口:走soap協(xié)議通過http傳輸,請求報文和返回報文都是xml格式的枕稀。測試時需要通過工具才能進行調(diào)用询刹、測試谜嫉。少數(shù)公司還在使用這種接口,如醫(yī)院等行業(yè)凹联。
http api接口:走http協(xié)議沐兰,通過路徑來區(qū)分調(diào)用的方法,請求和報文都是key-value形式的蔽挠,返回報文一般都是json串住闯,有g(shù)et和post等方法。目前來講澳淑,是最常用的比原。如RESTful基于http協(xié)議的接口。
dubbo接口:?走rpc協(xié)議杠巡,使用rpc協(xié)議進行遠程調(diào)用量窘,直接使用socket通信。傳輸效率高忽孽,并且可以統(tǒng)計出系統(tǒng)之間的調(diào)用關(guān)系绑改、調(diào)用次數(shù)谢床。使用Java語言開發(fā)兄一,只能用于Java語言開發(fā)的項目間的通信,不具備跨語言识腿,跨平臺的特點出革!
硬件接口:USB 、充電接口(此處不做討論)
三渡讼、前后端區(qū)別
做接口測試前骂束,需要對兩個概念有所了解,前端和后端
前端:通常為Web前端和app前端成箫,前端的作用是為了展示數(shù)據(jù)內(nèi)容展箱,做簡單的數(shù)據(jù)校驗,比如我們看到的淘寶商城蹬昌,那些商品信息混驰,圖片展示等等。
后端:進行復(fù)雜計算的業(yè)務(wù)邏輯皂贩,功能實現(xiàn)栖榨,例如我們購買商品后的價格計算,優(yōu)惠活動的使用明刷,最終的支付婴栽,都是通過后端實現(xiàn)的,而前后端就是通過接口來進行交互的辈末。
接口調(diào)用示意圖:
說明:輸入條件也就是入?yún)笪挠拚?jīng)過接口程序處理之后映皆,得到結(jié)果輸出,也就是出參報文准脂。
接口測試
一劫扒、什么是接口測試
系統(tǒng)組件間接口測試。主要是檢測外部系統(tǒng)與系統(tǒng)之間狸膏,以及內(nèi)部各個子系統(tǒng)之間的交互點沟饥,檢查數(shù)據(jù)的交換,傳遞湾戳,和控制管理過程贤旷,以及系統(tǒng)間的相互邏輯依賴關(guān)系,適用于為其他系統(tǒng)提供服務(wù)的底層框架系統(tǒng)和中心服務(wù)系統(tǒng)砾脑,主要測試這些系統(tǒng)對外部系統(tǒng)提供的接口幼驶,驗證其正確性與穩(wěn)定性。
-----百度百科
關(guān)于接口測試的說法:
1韧衣、接口測試即功能測試盅藻,是通過測試不同輸入條件下,接口返回的結(jié)果是否與預(yù)期結(jié)果一致畅铭。
2氏淑、接口是用來連接客戶端和服務(wù)端的,一般接口返回的數(shù)據(jù)都是json格式硕噩。
3假残、接口測試實質(zhì)是數(shù)據(jù)測試,對數(shù)據(jù)庫的各種操作(增炉擅,刪辉懒,改,查)谍失。
4眶俩、接口測試其實是一個非常簡單的過程,將接口的業(yè)務(wù)邏輯處理看成黑盒測試中的黑盒子快鱼,我們只需要考慮各種輸入條件下颠印,會產(chǎn)生相應(yīng)的什么結(jié)果。
接口測試是黑盒測試攒巍,但黑盒測試不一定只是接口測試嗽仪。
我們知道黑盒測試又稱功能測試,那么接口測試與功能測試是不是一回事呢柒莉?答案是否定的闻坚,為什么呢?
功能測試還包含了程序的UI層兢孝,包含了按鈕窿凤,UI交互等功能仅偎,而接口測試是沒有頁面操作的,只能通過調(diào)用接口來進行測試雳殊,只需要給接口傳遞相應(yīng)的輸入條件橘沥,再檢查接口輸出的結(jié)果是否符合預(yù)期即可。某種程度講夯秃,接口測試比功能測試還要更簡單一些座咆。
二、接口的組成
接口說明文檔
接口url
請求方法:post或get
請求參數(shù)仓洼、參數(shù)類型介陶、請求參數(shù)說明
返回參數(shù)說明
由接口文檔可知,接口至少應(yīng)有請求地址色建、請求方法哺呜、請求參數(shù)(入?yún)⒑统鰠ⅲ┙M成,部分接口有請求頭header箕戳,cookie某残。
標(biāo)頭 (header):是服務(wù)器以HTTP協(xié)議傳HTML資料到瀏覽器前所送出的字串,在標(biāo)頭與 HTML 文件之間尚需空一行分隔陵吸,一般存放cookie玻墅、token等信息
那么,header和入?yún)⒂惺裁搓P(guān)系走越?它們不都是發(fā)送到服務(wù)器的參數(shù)嗎椭豫?
首先耻瑟,它們確實都是發(fā)送到服務(wù)器里的參數(shù)旨指,但它們是有區(qū)別的,header里存放的參數(shù)一般存放的是一些校驗信息喳整,比如cookie谆构,它是為了校驗這個請求是否有權(quán)限請求服務(wù)器,如果有框都,它才能請求服務(wù)器搬素,然后把請求地址連同入?yún)⒁黄鸢l(fā)送到服務(wù)器,然后服務(wù)器會根據(jù)地址和入?yún)矸祷爻鰠⑽罕!R簿褪钦f熬尺,服務(wù)器是先接受header信息進行判斷該請求是否有權(quán)限請求,判斷有權(quán)限后谓罗,才會接受請求地址和入?yún)⒌摹?/p>
三粱哼、為什么要做接口測試
通過圖我們知道,程序的前端(UI層)是用來展示數(shù)據(jù)以及簡單的數(shù)據(jù)檢驗的檩咱,而真正的業(yè)務(wù)邏輯核心是后端揭措。
在傳統(tǒng)的功能測試中胯舷,如果前端工程師還沒有將前端工作做完,我們測試是無法展開測試工作的绊含,另一方面桑嘶,既然前端有校驗功能,那后端就有可能會遺漏該功能的數(shù)據(jù)校驗躬充,如果用戶通過抓包繞過前端逃顶,直接進行后端操作,我們的程序就可能出現(xiàn)重大問題充甚。
所以進行接口測試主要是因為:
盡早的測試介入口蝠,越早介入測試,發(fā)現(xiàn)的問題解決起來的成本是最低的津坑。很多時候開發(fā)沒有將完整產(chǎn)品提交給測試時妙蔗,測試時無法工作的,就會有大部分時間處于等待狀態(tài)疆瑰,而接口測試可以在沒有前端界面下進行測試
后端的功能校驗在前端很難進行測試眉反,因為前端已經(jīng)有初步校驗控制,所以接口測試可以發(fā)現(xiàn)很多在前端無法發(fā)現(xiàn)的問題
提升測試效率穆役,降低人工回歸測試的人力成本與時間成本寸五,縮短測試周期
四、接口測試與UI測試優(yōu)劣對比
接口測試的介入時間更早耿币,越早介入價值越高梳杏。
接口測試的穩(wěn)定性更高,變動少淹接。接口測試通過十性,前端即時出現(xiàn)問題,解決起來也會非乘艿浚快
接口測試發(fā)現(xiàn)缺陷后采记,解決的成本更低探入。越底層的缺陷,影響的面就越廣,一個底層缺陷可能引起N個表面的缺陷耽梅,那時候解決起來就會非常麻煩橡羞,而且還不一定能找到源頭缺陷
定位問題更加準(zhǔn)確和快速刻帚。當(dāng)我們接口測試通過后砖顷,在功能測試中出現(xiàn)問題,我們就可以更快速和準(zhǔn)確的定位問題巷屿,因為已經(jīng)排除掉接口層的干擾了固以。
五、接口測試流程
接口測試的原理跟功能測試是一樣的攒庵,那么它的流程跟功能測試流程其實也是基本一致的嘴纺。
接口測試?不等于?接口測試工具使用
很多人認為會使用接口測試工具就是會接口測試败晴。其實接口測試遠遠不止是工具的使用,SoapUI也好栽渴,Jmeter也好尖坤,這些工具都是我們在進行接口測試過程中能夠更方便的進行測試,而工具僅僅是工具闲擦,真正核心部分還是接口測試用例設(shè)計以及測試思維慢味。那么當(dāng)我們做接口測試時,到底需要做哪些方面的工作呢墅冷?
接口測試流程:
獲取需求文檔和接口文檔
通過對需求文檔分析出接口的業(yè)務(wù)邏輯要求以及業(yè)務(wù)邊界
通過對接口文檔分析出接口的技術(shù)指標(biāo)(接口地址纯路、請求方式、入?yún)⒛蕖⒊鰠ⅲ?/p>
接口測試用例設(shè)計(著重于接口測試數(shù)據(jù)準(zhǔn)備)
使用接口測試工具進行接口測試
接口缺陷管理與跟蹤
接口自動化持續(xù)集成
接口測試常用工具:
接口測試的工具很多驰唬,比如 postman、jmeter腔彰、loadrunner叫编、SoapUI等,比較常見的是postman和jmeter霹抛。
簡介下postman和jmeter:
1搓逾、Postman是谷歌的一款接口測試插件,它使用簡單杯拐,支持用例管理霞篡,支持get/post、文件上傳端逼、響應(yīng)驗證朗兵、變量管理、環(huán)境參數(shù)管理等功能裳食,可以批量運行矛市,并支持用例導(dǎo)出芙沥、導(dǎo)入诲祸。
2、jmeter是一款100%純Java編寫的免費開源的工具而昨,它主要用來做性能測試救氯,相比loadrunner來說,它內(nèi)存占用小歌憨,免費開源着憨,輕巧方便、無需安裝务嫡,越來越被大眾所喜愛甲抖。
接口測試怎么做:
通用接口用例設(shè)計
1漆改、通過性驗證:
首先肯定要保證這個接口功能是好使的,也就是正常的通過性測試准谚,按照接口文檔上的參數(shù)挫剑,正常傳入,是否可以返回正確的結(jié)果柱衔。
2樊破、參數(shù)組合:
現(xiàn)在有一個操作商品的接口,有個字段type唆铐,傳1的時候代表修改商品哲戚,商品id、商品名稱艾岂、價格有一個是必傳的顺少,type傳2的時候是刪除商品,商品id 是必傳的王浴,這樣的祈纯,就要測參數(shù)組合了,type傳1的時候叼耙,只傳商品名稱能不能修改成功腕窥,id、名稱筛婉、價格都傳的時候能不能修改成功簇爆。
3、接口安全:
繞過驗證爽撒,比如說購買了一個商品入蛆,它的價格是300元,那我在提交訂單時候硕勿,我把這個商品的價格改成3元哨毁,后端有沒有做驗證,更狠點源武,我把錢改成-3扼褪,是不是我的余額還要增加?
繞過身份授權(quán)粱栖,比如說修改商品信息接口话浇,那必須得是賣家才能修改,那我傳一個普通用戶闹究,能不能修改成功幔崖,我傳一個其他的賣家能不能修改成功
參數(shù)是否加密,比如說我登陸的接口,用戶名和密碼是不是加密赏寇,如果不加密的話吉嫩,別人攔截到你的請求,就能獲取到你的信息了嗅定,加密規(guī)則是否容易破解率挣。
密碼安全規(guī)則,密碼的復(fù)雜程度校驗
4露戒、異常驗證:
所謂異常驗證椒功,也就是我不按照你接口文檔上的要求輸入?yún)?shù),來驗證接口對異常情況的校驗智什。比如說必填的參數(shù)不填动漾,輸入整數(shù)類型的,傳入字符串類型荠锭,長度是10的旱眯,傳11,總之就是你說怎么來证九,我就不怎么來删豺,其實也就這三種,必傳非必傳愧怜、參數(shù)類型呀页、入?yún)㈤L度。
根據(jù)業(yè)務(wù)邏輯來設(shè)計用例
根據(jù)業(yè)務(wù)邏輯來設(shè)計的話拥坛,就是根據(jù)自己系統(tǒng)的業(yè)務(wù)來設(shè)計用例蓬蝶,這個每個公司的業(yè)務(wù)不一樣,就得具體的看自己公司的業(yè)務(wù)了猜惋,其實這也和功能測試設(shè)計用例是一樣的丸氛。
舉個例子,拿bbs來說著摔,bbs的需求是這樣的:
1缓窜、登錄失敗5次,就需要等待15分鐘之后再登錄
2谍咆、新注冊的用戶需要過了實習(xí)期才能發(fā)帖
3禾锤、刪除帖子扣除積分
4、......
像這樣的你就要把這些測試點列出來卧波,然后再去造數(shù)據(jù)測試對應(yīng)的測試點时肿。
請求狀態(tài)碼說明:
200 :2開頭的都表示這個請求發(fā)送成功,最常見的就是200港粱,就代表這個請求是ok的,服務(wù)器也返回了。
300 :3開頭的代表重定向查坪,最常見的是302寸宏,把這個請求重定向到別的地方了,
400 :400代表客戶端發(fā)送的請求有語法錯誤偿曙,401代表訪問的頁面沒有授權(quán)氮凝,403表示沒有權(quán)限訪問這個頁面,404代表沒有這個頁面
500 :5開頭的代表服務(wù)器有異常望忆,500代表服務(wù)器內(nèi)部異常罩阵,504代表服務(wù)器端超時,沒返回結(jié)果
自動化測試資源分享
最后感謝每一個認真閱讀我文章的人启摄,看著粉絲一路的上漲和關(guān)注稿壁,禮尚往來總是要有的,雖然不是什么很值錢的東西歉备,如果你用得到的話可以直接拿走
這些資料傅是,對于進階【自動化測試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉庫,這個倉庫也陪伴我走過了最艱難的路程蕾羊,希望也能幫助到你喧笔!凡事要趁早,特別是技術(shù)行業(yè)龟再,一定要提升技術(shù)功底书闸。希望對大家有所幫助…….
關(guān)注我的微信公眾號:【程序員小濠】即可獲取這份資料了!
如果你不想再體驗一次自學(xué)時找不到資料利凑,沒人解答問題梗劫,堅持幾天便放棄的感受的話,可以加入我們的群:779450660 大家一起討論交流截碴,里面也有各種軟件測試資料和技術(shù)交流梳侨。
如果對你有幫助的話,點個贊收個藏日丹,給作者一個鼓勵走哺。也方便你下次能夠快速查找。