https://www.cnblogs.com/feng0815/p/7509541.html
首先,什么是接口呢场绿?
接口一般來(lái)說(shuō)有兩種剖效,一種是程序內(nèi)部的接口,一種是系統(tǒng)對(duì)外的接口。
系統(tǒng)對(duì)外的接口:比如你要從別的網(wǎng)站或服務(wù)器上獲取資源或信息璧尸,別人肯定不會(huì)把數(shù)據(jù)庫(kù)共享給你咒林,他只能給你提供一個(gè)他們寫(xiě)好的方法來(lái)獲取數(shù)據(jù),你引用他提供的接口就能使用他寫(xiě)好的方法爷光,從而達(dá)到數(shù)據(jù)共享的目的垫竞,比如說(shuō)咱們用的app、網(wǎng)址這些它在進(jìn)行數(shù)據(jù)處理的時(shí)候都是通過(guò)接口來(lái)進(jìn)行調(diào)用的蛀序。
程序內(nèi)部的接口:方法與方法之間欢瞪,模塊與模塊之間的交互,程序內(nèi)部拋出的接口徐裸,比如bbs系統(tǒng)遣鼓,有登錄模塊、發(fā)帖模塊等等倦逐,那你要發(fā)帖就必須先登錄譬正,要發(fā)帖就得登錄,那么這兩個(gè)模塊就得有交互,它就會(huì)拋出一個(gè)接口,供內(nèi)部系統(tǒng)進(jìn)行調(diào)用扇商。
一凡涩、常見(jiàn)接口:
1、webService接口:是走soap協(xié)議通過(guò)http傳輸,請(qǐng)求報(bào)文和返回報(bào)文都是xml格式的,我們?cè)跍y(cè)試的時(shí)候都用通過(guò)工具才能進(jìn)行調(diào)用,測(cè)試蛉谜。可以使用的工具有SoapUI崇堵、jmeter型诚、loadrunner等;
2鸳劳、http api接口:是走h(yuǎn)ttp協(xié)議狰贯,通過(guò)路徑來(lái)區(qū)分調(diào)用的方法,請(qǐng)求報(bào)文都是key-value形式的赏廓,返回報(bào)文一般都是json串涵紊,有g(shù)et和post等方法,這也是最常用的兩種請(qǐng)求方式幔摸∶可以使用的工具有postman、RESTClient既忆、jmeter驱负、loadrunner等嗦玖;
二、前端和后端:
在說(shuō)接口測(cè)試之前电媳,我們先來(lái)搞清楚這兩個(gè)概念踏揣,前端和后端庆亡。
前端是什么呢匾乓,對(duì)于web端來(lái)說(shuō),咱們使用的網(wǎng)頁(yè)又谋,打開(kāi)的網(wǎng)站拼缝,這都是前端,這些都是html彰亥、css寫(xiě)的咧七;對(duì)于app端來(lái)說(shuō)呢,它就是咱們用的app任斋,android或者object-C(開(kāi)發(fā)ios上的app)開(kāi)發(fā)的继阻,它的作用就是顯示頁(yè)面,讓我們看到漂亮的頁(yè)面废酷,以及做一些簡(jiǎn)單的校驗(yàn)瘟檩,比如說(shuō)非空校驗(yàn),咱們?cè)陧?yè)面上操作的時(shí)候澈蟆,這些業(yè)務(wù)邏輯墨辛、功能,比如說(shuō)你購(gòu)物趴俘,發(fā)微博這些功能是由后端來(lái)實(shí)現(xiàn)的睹簇,后端去控制你購(gòu)物的時(shí)候扣你的余額,發(fā)微博發(fā)到哪個(gè)賬號(hào)下面寥闪,那前端和后端是怎么交互的呢太惠,就是通過(guò)接口。
前面說(shuō)的你可能不好理解疲憋,你只需記自湓ā:前端負(fù)責(zé)貌美如花,后端負(fù)責(zé)掙錢(qián)養(yǎng)家柜某。
三嗽元、什么是接口測(cè)試:
接口測(cè)試是測(cè)試系統(tǒng)組件間接口的一種測(cè)試。接口測(cè)試主要用于檢測(cè)外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)子系統(tǒng)之間的交互點(diǎn)喂击。測(cè)試的重點(diǎn)是要檢查數(shù)據(jù)的交換剂癌,傳遞和控制管理過(guò)程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等翰绊。
OK佩谷,上面是百度百科上說(shuō)的旁壮,下面才是我說(shuō)的
其實(shí)我覺(jué)得接口測(cè)試很簡(jiǎn)單,比一般的功能測(cè)試還簡(jiǎn)單(這話我先這樣說(shuō)谐檀,以后可能會(huì)刪O(∩_∩)O哈B招场),現(xiàn)在找工作好多公司都要求有接口測(cè)試經(jīng)驗(yàn)桐猬,也有好多人問(wèn)我(也就兩三個(gè)人)什么是接口測(cè)試麦撵,本著不懂也要裝懂的態(tài)度,我會(huì)說(shuō):所謂接口測(cè)試就是通過(guò)測(cè)試不同情況下的入?yún)⑴c之相應(yīng)的出參信息來(lái)判斷接口是否符合或滿足相應(yīng)的功能性溃肪、安全性要求免胃。
我為啥說(shuō)接口測(cè)試比功能測(cè)試簡(jiǎn)單呢,因?yàn)楣δ軠y(cè)試是從頁(yè)面輸入值惫撰,然后通過(guò)點(diǎn)擊按鈕或鏈接等傳值給后端羔沙,而且功能測(cè)試還要測(cè)UI、前端交互等功能厨钻,但接口測(cè)試沒(méi)有頁(yè)面扼雏,它是通過(guò)接口規(guī)范文檔上的調(diào)用地址、請(qǐng)求參數(shù)夯膀,拼接報(bào)文诗充,然后發(fā)送請(qǐng)求,檢查返回結(jié)果棍郎,所以它只需測(cè)入?yún)⒑统鰠⒕托辛似湔希鄬?duì)來(lái)說(shuō)簡(jiǎn)單了不少。
四涂佃、接口組成
接口都有那些部分組成呢励翼?
首先,接口文檔應(yīng)該包含以下內(nèi)容:
1辜荠、接口說(shuō)明
2汽抚、調(diào)用url
3、請(qǐng)求方法(get\post)
4伯病、請(qǐng)求參數(shù)造烁、參數(shù)類(lèi)型、請(qǐng)求參數(shù)說(shuō)明
5午笛、返回參數(shù)說(shuō)明
由接口文檔可知惭蟋,接口至少應(yīng)有請(qǐng)求地址、請(qǐng)求方法药磺、請(qǐng)求參數(shù)(入?yún)⒑统鰠ⅲ┙M成告组,部分接口有請(qǐng)求頭header。
標(biāo)頭 (header):是服務(wù)器以HTTP協(xié)議傳HTML資料到瀏覽器前所送出的字串癌佩,在標(biāo)頭與 HTML 文件之間尚需空一行分隔木缝,一般存放cookie便锨、token等信息
有同學(xué)問(wèn)我header和入?yún)⒂惺裁搓P(guān)系?它們不都是發(fā)送到服務(wù)器的參數(shù)嗎我碟?
OK放案,首先,它們確實(shí)都是發(fā)送到服務(wù)器里的參數(shù)矫俺,但它們是有區(qū)別的吱殉,header里存放的參數(shù)一般存放的是一些校驗(yàn)信息,比如cookie恳守,它是為了校驗(yàn)這個(gè)請(qǐng)求是否有權(quán)限請(qǐng)求服務(wù)器考婴,如果有贩虾,它才能請(qǐng)求服務(wù)器催烘,然后把請(qǐng)求地址連同入?yún)⒁黄鸢l(fā)送到服務(wù)器,然后服務(wù)器會(huì)根據(jù)地址和入?yún)?lái)返回出參缎罢。也就是說(shuō)伊群,服務(wù)器是先接受header信息進(jìn)行判斷該請(qǐng)求是否有權(quán)限請(qǐng)求,判斷有權(quán)限后策精,才會(huì)接受請(qǐng)求地址和入?yún)⒌摹?br>
五舰始、為什么要做接口測(cè)試:
大家都知道,接口其實(shí)就是前端頁(yè)面或APP等調(diào)用與后端做交互用的咽袜,所以好多人都會(huì)問(wèn)丸卷,我功能測(cè)試都測(cè)好了,為什么還要測(cè)接口呢询刹?OK谜嫉,在回答這個(gè)問(wèn)題之前,先舉個(gè)栗子:
比如測(cè)試用戶注冊(cè)功能凹联,規(guī)定用戶名為6~18個(gè)字符沐兰,包含字母(區(qū)分大小寫(xiě))、數(shù)字蔽挠、下劃線住闯。首先功能測(cè)試時(shí)肯定會(huì)對(duì)用戶名規(guī)則進(jìn)行測(cè)試時(shí),比如輸入20個(gè)字符澳淑、輸入特殊字符等比原,但這些可能只是在前端做了校驗(yàn),后端可能沒(méi)做校驗(yàn)杠巡,如果有人通過(guò)抓包繞過(guò)前端校驗(yàn)直接發(fā)送到后端怎么辦呢量窘?試想一下,如果用戶名和密碼未在后端做校驗(yàn)忽孽,而有人又繞過(guò)前端校驗(yàn)的話绑改,那用戶名和密碼不就可以隨便輸了嗎谢床?如果是登錄可能會(huì)通過(guò)SQL注入等手段來(lái)隨意登錄,甚至可以獲取管理員權(quán)限厘线,那這樣不是很恐怖识腿?
所以,接口測(cè)試的必要性就體現(xiàn)出來(lái)了:
①造壮、可以發(fā)現(xiàn)很多在頁(yè)面上操作發(fā)現(xiàn)不了的bug
②渡讼、檢查系統(tǒng)的異常處理能力
③、檢查系統(tǒng)的安全性耳璧、穩(wěn)定性
④成箫、前端隨便變,接口測(cè)好了旨枯,后端不用變
六蹬昌、接口測(cè)試怎么測(cè):
在進(jìn)行接口測(cè)試前,還需要了解:
1)攀隔、GET和POST請(qǐng)求:
如果是get請(qǐng)求的話皂贩,直接在瀏覽器里輸入就行了,只要在瀏覽器里面直接能請(qǐng)求到的昆汹,都是get請(qǐng)求明刷,如果是post的請(qǐng)求的話,就不行了满粗,就得借助工具來(lái)發(fā)送辈末。
GET請(qǐng)求和POST請(qǐng)求的區(qū)別:
1、GET使用URL或Cookie傳參映皆。而POST將數(shù)據(jù)放在BODY中挤聘。
2、GET的URL會(huì)有長(zhǎng)度上的限制劫扒,則POST的數(shù)據(jù)則可以非常大檬洞。
3、POST比GET安全沟饥,因?yàn)閿?shù)據(jù)在地址欄上不可見(jiàn)添怔。
4、一般get請(qǐng)求用來(lái)獲取數(shù)據(jù)贤旷,post請(qǐng)求用來(lái)發(fā)送數(shù)據(jù)广料。
其實(shí)上面這幾點(diǎn),只有最后一點(diǎn)說(shuō)的是比較靠譜的幼驶,第一點(diǎn)post請(qǐng)求也可以把數(shù)據(jù)放到url里面艾杏,get請(qǐng)求其實(shí)也沒(méi)長(zhǎng)度限制,post請(qǐng)求看起來(lái)參數(shù)是隱式的盅藻,稍微安全那么一些些购桑,但是那只是對(duì)于小白用戶來(lái)說(shuō)的畅铭,就算post請(qǐng)求,你通過(guò)抓包也是可以抓到參數(shù)的勃蜘。所以上面這些面試的時(shí)候你說(shuō)出來(lái)就行了硕噩。
2)、http狀態(tài)碼
每發(fā)出一個(gè)http請(qǐng)求之后缭贡,都會(huì)有一個(gè)響應(yīng)炉擅,http本身會(huì)有一個(gè)狀態(tài)碼,來(lái)標(biāo)示這個(gè)請(qǐng)求是否成功阳惹,常見(jiàn)的狀態(tài)碼有以下幾種:
1谍失、200 2開(kāi)頭的都表示這個(gè)請(qǐng)求發(fā)送成功,最常見(jiàn)的就是200莹汤,就代表這個(gè)請(qǐng)求是ok的快鱼,服務(wù)器也返回了。
2体啰、300 3開(kāi)頭的代表重定向攒巍,最常見(jiàn)的是302,把這個(gè)請(qǐng)求重定向到別的地方了荒勇,
3、400 400代表客戶端發(fā)送的請(qǐng)求有語(yǔ)法錯(cuò)誤闻坚,401代表訪問(wèn)的頁(yè)面沒(méi)有授權(quán)沽翔,403表示沒(méi)有權(quán)限訪問(wèn)這個(gè)頁(yè)面,404代表沒(méi)有這個(gè)頁(yè)面
4窿凤、500 5開(kāi)頭的代表服務(wù)器有異常仅偎,500代表服務(wù)器內(nèi)部異常,504代表服務(wù)器端超時(shí)雳殊,沒(méi)返回結(jié)果
3)cookie與session的區(qū)別:
1橘沥、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上夯秃。
2座咆、cookie不是很安全,別人可以分析存放在本地的cookie并進(jìn)行cookie欺騙考慮到安全應(yīng)當(dāng)使用session仓洼。
3介陶、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問(wèn)增多色建,會(huì)比較占用你服務(wù)器的性能考慮到減輕服務(wù)器性能方面哺呜,應(yīng)當(dāng)使用cookie。
4箕戳、單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K某残,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie国撵。
5、所以個(gè)人建議:
將登錄信息等重要信息存放為session
其他信息如果需要保留玻墅,可以放在cookie中
接下來(lái)再說(shuō)接口測(cè)試怎么測(cè):
1)卸留、通用接口用例設(shè)計(jì)
①、通過(guò)性驗(yàn)證:首先肯定要保證這個(gè)接口功能是好使的椭豫,也就是正常的通過(guò)性測(cè)試耻瑟,按照接口文檔上的參數(shù),正常傳入赏酥,是否可以返回正確的結(jié)果喳整。
②、參數(shù)組合:現(xiàn)在有一個(gè)操作商品的接口裸扶,有個(gè)字段type框都,傳1的時(shí)候代表修改商品,商品id呵晨、商品名稱(chēng)魏保、價(jià)格有一個(gè)是必傳的,type傳2的時(shí)候是刪除商品摸屠,商品id 是必傳的谓罗,這樣的,就要測(cè)參數(shù)組合了季二,type傳1的時(shí)候檩咱,只傳商品名稱(chēng)能不能修改成功,id胯舷、名稱(chēng)刻蚯、價(jià)格都傳的時(shí)候能不能修改成功。
③桑嘶、接口安全:
1炊汹、繞過(guò)驗(yàn)證,比如說(shuō)購(gòu)買(mǎi)了一個(gè)商品逃顶,它的價(jià)格是300元讨便,那我在提交訂單時(shí)候,我把這個(gè)商品的價(jià)格改成3元口蝠,后端有沒(méi)有做驗(yàn)證器钟,更狠點(diǎn),我把錢(qián)改成-3妙蔗,是不是我的余額還要增加傲霸?
2、繞過(guò)身份授權(quán),比如說(shuō)修改商品信息接口昙啄,那必須得是賣(mài)家才能修改穆役,那我傳一個(gè)普通用戶,能不能修改成功梳凛,我傳一個(gè)其他的賣(mài)家能不能修改成功
3耿币、參數(shù)是否加密,比如說(shuō)我登陸的接口韧拒,用戶名和密碼是不是加密淹接,如果不加密的話,別人攔截到你的請(qǐng)求叛溢,就能獲取到你的信息了塑悼,加密規(guī)則是否容易破解。
4楷掉、密碼安全規(guī)則厢蒜,密碼的復(fù)雜程度校驗(yàn)
④、異常驗(yàn)證:
所謂異常驗(yàn)證烹植,也就是我不按照你接口文檔上的要求輸入?yún)?shù)斑鸦,來(lái)驗(yàn)證接口對(duì)異常情況的校驗(yàn)。比如說(shuō)必填的參數(shù)不填草雕,輸入整數(shù)類(lèi)型的巷屿,傳入字符串類(lèi)型,長(zhǎng)度是10的促绵,傳11攒庵,總之就是你說(shuō)怎么來(lái),我就不怎么來(lái)败晴,其實(shí)也就這三種,必傳非必傳栽渴、參數(shù)類(lèi)型尖坤、入?yún)㈤L(zhǎng)度。
2)闲擦、根據(jù)業(yè)務(wù)邏輯來(lái)設(shè)計(jì)用例
根據(jù)業(yè)務(wù)邏輯來(lái)設(shè)計(jì)的話慢味,就是根據(jù)自己系統(tǒng)的業(yè)務(wù)來(lái)設(shè)計(jì)用例,這個(gè)每個(gè)公司的業(yè)務(wù)不一樣墅冷,就得具體的看自己公司的業(yè)務(wù)了纯路,其實(shí)這也和功能測(cè)試設(shè)計(jì)用例是一樣的。
舉個(gè)例子寞忿,拿bbs來(lái)說(shuō)驰唬,bbs的需求是這樣的:
1、登錄失敗5次,就需要等待15分鐘之后再登錄
2叫编、新注冊(cè)的用戶需要過(guò)了實(shí)習(xí)期才能發(fā)帖
3辖佣、刪除帖子扣除積分
4、......
像這樣的你就要把這些測(cè)試點(diǎn)列出來(lái)搓逾,然后再去造數(shù)據(jù)測(cè)試對(duì)應(yīng)的測(cè)試點(diǎn)卷谈。
七、用什么工具測(cè)
接口測(cè)試的工具很多霞篡,比如 postman世蔗、RESTClient、jmeter朗兵、loadrunner污淋、SoapUI等,本人首推的測(cè)試工具是postman和jmeter矛市,接下來(lái)就簡(jiǎn)單介紹下如何使用這兩款工具進(jìn)行接口測(cè)試芙沥,其他工具本次暫不介紹。
1)浊吏、Postman是谷歌的一款接口測(cè)試插件而昨,它使用簡(jiǎn)單,支持用例管理找田,支持get歌憨、post、文件上傳墩衙、響應(yīng)驗(yàn)證务嫡、變量管理、環(huán)境參數(shù)管理等功能漆改,可以批量運(yùn)行心铃,并支持用例導(dǎo)出、導(dǎo)入挫剑。
jmeter是一款100%純Java編寫(xiě)的免費(fèi)開(kāi)源的工具去扣,它主要用來(lái)做性能測(cè)試,相比loadrunner來(lái)說(shuō)樊破,它內(nèi)存占用小愉棱,免費(fèi)開(kāi)源,輕巧方便哲戚、無(wú)需安裝奔滑,越來(lái)越被大眾所喜愛(ài)。
注:以下用例中所用地址皆為本人在本地所搭的環(huán)境顺少,外網(wǎng)無(wú)法訪問(wèn)朋其,見(jiàn)諒王浴。