結(jié)合工作實(shí)際和學(xué)習(xí),梳理一下
一、
對(duì)于接口測(cè)試來(lái)說(shuō),項(xiàng)目測(cè)試用例的重復(fù)運(yùn)行首先是表現(xiàn)在單個(gè)測(cè)試用例的獨(dú)立性方面的,也就是說(shuō),每一個(gè)測(cè)試用例的運(yùn)行除了依賴(lài)被測(cè)對(duì)象和對(duì)應(yīng)的數(shù)據(jù)庫(kù)環(huán)境外,是不依賴(lài)于其他任何測(cè)試用例的,并且這個(gè)測(cè)試用例執(zhí)行完畢后,對(duì)系統(tǒng)來(lái)說(shuō),也是沒(méi)有任何痕跡的,這樣就保證了每個(gè)測(cè)試用例運(yùn)行時(shí),都在一個(gè)干凈的環(huán)境中運(yùn)行。要實(shí)現(xiàn)測(cè)試用例的獨(dú)立性,就必須對(duì)被測(cè)系統(tǒng)的設(shè)計(jì)有詳細(xì)的了解,這樣,不會(huì)出現(xiàn)測(cè)試用例執(zhí)行后遺漏數(shù)據(jù),環(huán)境未改變,另外,還需要對(duì)測(cè)試用例進(jìn)行詳細(xì)的設(shè)計(jì)。另外,要保證測(cè)試用例的重復(fù)使用,還需要做到測(cè)試用例的及時(shí)更新,在這個(gè)方面,我們是做接口測(cè)試的人會(huì)維護(hù)對(duì)應(yīng)的系統(tǒng)的接口測(cè)試用例,要保證,代碼每次更新,測(cè)試用例都必須全部執(zhí)行通過(guò)。
接口測(cè)試用例的設(shè)計(jì)方法其實(shí)和功能測(cè)試用例的設(shè)計(jì)方法是類(lèi)似的,因?yàn)榻涌谑切枰獫M(mǎn)足需求的,而接口測(cè)試所依賴(lài)的也是需求說(shuō)明書(shū),但是,因?yàn)榻涌跍y(cè)試畢竟是通過(guò)代碼去測(cè)試代碼,所以,為了保證覆蓋率,可能會(huì)使用到單元測(cè)試的方法,具體的測(cè)試用例設(shè)計(jì),我考慮的如下,請(qǐng)參考,如果有錯(cuò)誤,一起討論。
輸入參數(shù)測(cè)試:針對(duì)輸入的參數(shù)進(jìn)行測(cè)試,也可以說(shuō)是假定接口參數(shù)的不正確性進(jìn)行的測(cè)試,確保接口對(duì)任意類(lèi)型的輸入都做了相應(yīng)的處理:輸入?yún)?shù)合法,輸入?yún)?shù)不合法,輸入?yún)?shù)為空,輸入?yún)?shù)為null,輸入?yún)?shù)超長(zhǎng)。
功能測(cè)試:接口是否滿(mǎn)足了所提供的功能,相當(dāng)于是正常情況測(cè)試,如果一個(gè)接口功能復(fù)雜時(shí)推薦對(duì)接口用例進(jìn)行結(jié)構(gòu)劃分,這樣子用例具有更好的可讀性和維護(hù)性。
邏輯測(cè)試:邏輯測(cè)試嚴(yán)格講應(yīng)為單元測(cè)試,單元測(cè)試應(yīng)保持內(nèi)部邏輯的正確性,可單元測(cè)試和接口測(cè)試界限并不是那么清楚,所以我們也可以從給出的設(shè)計(jì)文檔中考慮內(nèi)部邏輯錯(cuò)誤的分支情況和異常; 異常情況測(cè)試:接口實(shí)現(xiàn)是否對(duì)異常情況都進(jìn)行了處理,接口輸入?yún)?shù)雖然合法,但是在接口實(shí)現(xiàn)中,也會(huì)出現(xiàn)異常,因?yàn)閮?nèi)部的異常不一定是輸入的數(shù)據(jù)造成的,而有可能是其他邏輯造成的,程序需要對(duì)任何的異常都進(jìn)行處理。
二、
接口測(cè)試作為集成測(cè)試的一部分,通過(guò)直接調(diào)用被測(cè)試的接口來(lái)確定系統(tǒng)在功能性、可靠性、安全性和性能方面是否能達(dá)到預(yù)期,有些情況是功能測(cè)試無(wú)法覆蓋的,所以接口測(cè)試是非常必要的。
接口測(cè)試分為兩種,一種是webservice接口,走soap協(xié)議通過(guò)http傳輸,請(qǐng)求報(bào)文和返回報(bào)文都是xml格式的,測(cè)試時(shí)通過(guò)工具soapUI進(jìn)行測(cè)試。使用情況比較少;另一種http api接口,走h(yuǎn)ttp傳輸協(xié)議,通過(guò)路徑來(lái)區(qū)分調(diào)用的方法,最常用的是get和post請(qǐng)求。
上面說(shuō)過(guò),get和post請(qǐng)求是通過(guò)路徑來(lái)區(qū)分的,get請(qǐng)求的請(qǐng)求參數(shù)都是寫(xiě)在URL里的,格式為:http://url?param1¶m2。而post的請(qǐng)求一般都是寫(xiě)在body里的,可能是key-value格式,或者json串格式,也可能是上傳一個(gè)文件。。。那么問(wèn)題來(lái)了,get請(qǐng)求和post請(qǐng)求的區(qū)別在哪里呢?我們百度時(shí),大多數(shù)的答案是這樣的:
1、get請(qǐng)求可以在瀏覽器中請(qǐng)求到,post請(qǐng)求的測(cè)試需要借助工具
2、get請(qǐng)求使用url和cookie傳參,post的數(shù)據(jù)放在body中
3、post比get更安全,因?yàn)閭鬟f的參數(shù)在url上是看不到的
4、get請(qǐng)求的url會(huì)有限制,而post請(qǐng)求的數(shù)據(jù)可以非常大
5、一般get請(qǐng)求是來(lái)獲取數(shù)據(jù),post請(qǐng)求是傳遞數(shù)據(jù)的
其實(shí),對(duì)于現(xiàn)在飛速發(fā)展的互聯(lián)網(wǎng)來(lái)說(shuō),上面的說(shuō)法已經(jīng)不嚴(yán)謹(jǐn)了。首先,post請(qǐng)求的參數(shù)也可以寫(xiě)在url里,但是這種情況不多見(jiàn);其次表面上看起來(lái),post利用body傳參,比get的url傳參安全,但其實(shí)只要用抓包工具(fiddler,Charles等),post的參數(shù)也是一覽無(wú)余;再次,現(xiàn)在的瀏覽器非常強(qiáng)大,可以輸入支持很長(zhǎng)的URL,所以也不再有限制一說(shuō)了。這么說(shuō)來(lái),種種區(qū)別只有最后一條是最根本的了。
怎么來(lái)測(cè)試接口呢?根據(jù)什么來(lái)測(cè)呢?這就需要開(kāi)發(fā)提供的接口文檔了,接口文檔和功能測(cè)試的需求說(shuō)明書(shū)的功能是一樣的。包括:接口說(shuō)明、調(diào)用的url,請(qǐng)求方式(get or post),請(qǐng)求參數(shù)、參數(shù)類(lèi)型、請(qǐng)求參數(shù)說(shuō)明,返回結(jié)果說(shuō)明。有了接口文檔后,我們就可以設(shè)計(jì)用例了,一般接口測(cè)試的用例分為以下幾種:
1、通過(guò)性驗(yàn)證,說(shuō)白了就是傳遞正確的參數(shù),是否返回正常的結(jié)果
2、參數(shù)組合,因?yàn)閰?shù)有必傳和非必傳,參數(shù)的類(lèi)型和長(zhǎng)度,以及傳遞時(shí)可能業(yè)務(wù)上的一些限制,所以在設(shè)計(jì)用例時(shí),就要排列組合這些情況,保證所有情況都能覆蓋到
3、接口的安全性,這個(gè)又分為幾種情況:
1)繞過(guò)驗(yàn)證,比如提交訂單時(shí),在傳遞商品價(jià)格參數(shù)時(shí),修改商品價(jià)格,就要看后端有沒(méi)有驗(yàn)證了?;蛘呶抑Ц稌r(shí),抓個(gè)包將訂單金額一改,如果能以我改后的金額支付,那這個(gè)借口就有問(wèn)題了。
2)繞過(guò)身份驗(yàn)證,就是某個(gè)功能只有有特殊權(quán)限的用戶(hù)才能操作,那我傳遞一個(gè)普通的用戶(hù),是不是也能操作呢
3)參數(shù)是否加密,這個(gè)關(guān)系到一些賬戶(hù)的安全,比如我們?cè)诘卿浺恍┚W(wǎng)站時(shí),它要將我們的登錄信息進(jìn)行加密,如果不加密我們的信息就會(huì)暴露,危害性極大。
4) 密碼安全規(guī)則,設(shè)置密碼時(shí)復(fù)雜程度的校驗(yàn)。
4、根據(jù)業(yè)務(wù)邏輯來(lái)設(shè)計(jì)用例
用例設(shè)計(jì)完了,用什么來(lái)測(cè)試接口呢?我們可以借助一些工具,比如postman和jmeter。postman使用比較簡(jiǎn)單,可以在列表中選擇請(qǐng)求方式,在輸入框中輸入U(xiǎn)RL,如果是get請(qǐng)求,直接點(diǎn)擊send就可以看返回結(jié)果了。
三、
1、什么是接口測(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)間的相互邏輯依賴(lài)關(guān)系等
2、為什么要做接口測(cè)試a)互聯(lián)網(wǎng)的快速發(fā)展,公司內(nèi)部系統(tǒng)或與外部系統(tǒng)的關(guān)聯(lián)越來(lái)越多,一個(gè)業(yè)務(wù)流程關(guān)聯(lián)多個(gè)后端系統(tǒng),它們的關(guān)聯(lián)都是基于接口來(lái)實(shí)現(xiàn),接口測(cè)試可以將復(fù)雜的系統(tǒng)關(guān)聯(lián)進(jìn)行簡(jiǎn)化,只要做好每個(gè)接口的測(cè)試就能夠較好的保證系統(tǒng)質(zhì)量。b)單個(gè)系統(tǒng)的變更,是否會(huì)影響到關(guān)聯(lián)業(yè)務(wù)系統(tǒng),比較難用常規(guī)的測(cè)試方面來(lái)覆蓋相關(guān)的應(yīng)用系統(tǒng)(例如使用此接口的外部 系統(tǒng)有N個(gè),不可能每個(gè)做功能兼容性測(cè)試)。但可以通過(guò)對(duì)接口功能的覆蓋來(lái)驗(yàn)證是否影響它人對(duì)接口的調(diào)用。c)接口功能比較單一,能夠比較好的進(jìn)行測(cè)試覆蓋,也相對(duì)容易實(shí)現(xiàn)自動(dòng)化持續(xù)集成,,可以減少人工回歸成本與時(shí)間,縮短測(cè)試周期。d)接口相對(duì)于界面功能,會(huì)更底層一些,測(cè)試覆蓋會(huì)更容易(如業(yè)務(wù)在調(diào)用接口時(shí)做了判斷,當(dāng)不滿(mǎn)足條件時(shí)鏈接就不顯示,此時(shí)從界面無(wú)法測(cè)試相關(guān)功能是否做好判斷,通過(guò)接口就比較容易)
3、接口測(cè)試范圍a)業(yè)務(wù)功能(包括正常、異常場(chǎng)景是否實(shí)現(xiàn))b)業(yè)務(wù)規(guī)則(覆蓋度是否全面)c)參數(shù)驗(yàn)證(邊界、業(yè)務(wù)規(guī)則是否達(dá)到要求)d)異常場(chǎng)景(重復(fù)提交、并發(fā)提交、事務(wù)中斷、多機(jī)環(huán)境、大數(shù)據(jù)量測(cè)試)e)性能測(cè)試(響應(yīng)時(shí)間、吞吐量、并發(fā)數(shù)、資源要求)f)安全測(cè)試(權(quán)限驗(yàn)證、SQL注入等)
4、接口測(cè)試的重點(diǎn)1、檢查接口返回的數(shù)據(jù)是否與預(yù)期結(jié)果一致。2、檢查接口的容錯(cuò)性,假如傳遞數(shù)據(jù)的類(lèi)型錯(cuò)誤時(shí)是否可以處理。3、接口參數(shù)的邊界值。例如,傳遞的參數(shù)足夠大或?yàn)樨?fù)數(shù)時(shí),接口是否可以正常處理。4、接口的性能,http請(qǐng)求接口大多與后端執(zhí)行的SQL語(yǔ)句性能、算法等比較相關(guān)。5、接口的安全性,外部調(diào)用的接口尤為重要。
做好接口測(cè)試的前提
1、系統(tǒng)化的接口文檔傳統(tǒng)的接口文檔,一般采用word或wiki等系統(tǒng)來(lái)記錄,從單次使用上似乎比較簡(jiǎn)單,因?yàn)榇蠹視?huì)更習(xí)慣這樣的操作,但這種形式存在比較大的問(wèn)題:a、接口文檔非標(biāo)準(zhǔn)化,無(wú)法直接與接口測(cè)試工具接口使用b、接口維護(hù)困難,接口有變化時(shí)比較難標(biāo)識(shí)清楚,溝通成本很高系統(tǒng)化接口文檔,例如rap(淘寶分源的一個(gè)系統(tǒng)),具備接口維護(hù)標(biāo)準(zhǔn)化、版本化管理、MOCK測(cè)試等功能;對(duì)標(biāo)準(zhǔn)化的接口內(nèi)容做二次開(kāi)發(fā),可以直接導(dǎo)出Soapui等工具使用的格式,直接導(dǎo)入工具中使用,有以下好處:A、接口測(cè)試時(shí)不再需要手工輸入相關(guān)字段,節(jié)省時(shí)間成本B、版本化管理,能夠清晰的知道哪些接口有變化Rap參考 http://rapapi.org/org/index.do
2、標(biāo)準(zhǔn)化的接口規(guī)范接口管理是做好接口測(cè)試很重要的前提,如果一個(gè)系統(tǒng)有哪些接口都不太清楚,測(cè)試就很難覆蓋到,接口管理建議采用以下方式:A、按接口提供方為單位進(jìn)行首次劃分,按接口使用方進(jìn)行二次劃分,再按業(yè)務(wù)模塊進(jìn)行細(xì)分,分類(lèi)原則根據(jù)內(nèi)容多少進(jìn)行優(yōu)化,不需要固定,如本身接口較少就沒(méi)有必要分得過(guò)細(xì),較多時(shí)就需要多劃分模塊。如:系統(tǒng)A,提供有 1、2、3、4、5、6、7、8、9 這9個(gè)接口,接口分別給B系統(tǒng)、C系統(tǒng)使用,其中1、2為公用接口,3、4、5為B專(zhuān)用,6、7、8、9為C系統(tǒng)專(zhuān)用。B、按接口鏈接URL做為唯一,不同的接口參數(shù)做為接口變量,接口有參數(shù)變更時(shí)在原來(lái)接口上進(jìn)行維護(hù),而不是新增加接口C、為接口增加版本號(hào),方便清楚哪些接口本次有變更,易于維護(hù)用例