接口測(cè)試用例設(shè)計(jì)(轉(zhuǎn)載)

導(dǎo)語(yǔ)

隨著測(cè)試分析和分層測(cè)試的深化,“接口測(cè)試”出現(xiàn)在我們視野的頻次越來(lái)越高。那么接口測(cè)的用例設(shè)計(jì)常用哪些方法呢?本文將詳細(xì)描述。

1 接口測(cè)試

1.1 接口測(cè)試

接口:主要是子模塊或者子系統(tǒng)間交互并相互作用的部分。

這里說(shuō)的接口是廣義的,客戶端與后臺(tái)服務(wù)間的協(xié)議;插件間通信的接口;模塊間的接口;再小到一個(gè)類提供的方法;都可以理解為接口。

接口測(cè)試:是指針對(duì)模塊或系統(tǒng)間接口進(jìn)行的測(cè)試。

1.2 接口測(cè)試發(fā)現(xiàn)的典型問(wèn)題

接口測(cè)試經(jīng)常遇到的bug和問(wèn)題,如下:

(1)傳入?yún)?shù)處理不當(dāng),導(dǎo)致程序崩潰;

(2)類型溢出,導(dǎo)致數(shù)據(jù)讀出和寫入不一致;

(3)因?qū)ο髾?quán)限未進(jìn)行校驗(yàn),可以訪問(wèn)其他用戶敏感信息;

(4)狀態(tài)處理不當(dāng),導(dǎo)致邏輯出現(xiàn)錯(cuò)亂;

(5)邏輯校驗(yàn)不完善,可利用漏洞獲取非正當(dāng)利益等。

2 接口測(cè)試用例設(shè)計(jì)

上圖為一個(gè)典型的接口。一個(gè)接口通常是有輸入輸出的,輸入就是我們常見的入?yún)?,輸出有時(shí)有,有時(shí)沒(méi)有。調(diào)用相關(guān)接口,接口會(huì)執(zhí)行相關(guān)處理邏輯。

接口測(cè)試的用例設(shè)計(jì),主要從輸入和接口處理兩方面考慮:

1)針對(duì)輸入,可按照參數(shù)類型進(jìn)行設(shè)計(jì);

2)針對(duì)接口處理,可按照邏輯進(jìn)行用例設(shè)計(jì);

3)針對(duì)輸出,可根據(jù)結(jié)果進(jìn)行分析設(shè)計(jì)。

2.1 針對(duì)輸入設(shè)計(jì)

對(duì)于接口來(lái)說(shuō),輸入就是入?yún)?。常見參?shù)類型有:

(1)數(shù)值型(int,long,float,double等)

(2)字符串類型

(3)數(shù)組或鏈表

(4)結(jié)構(gòu)體

結(jié)構(gòu)體(struct)是一些元素的結(jié)合,元素實(shí)際也是數(shù)值型,字符串型,數(shù)組或鏈表。

下面詳細(xì)說(shuō)明數(shù)值型、字符串型、數(shù)組或鏈表三種參數(shù)類型用例設(shè)計(jì)。

2.1.1 數(shù)值型

數(shù)值型的參數(shù)主要考慮以下幾個(gè)方面設(shè)計(jì):

如果參數(shù)規(guī)定了值的范圍,則需要考慮等價(jià)類取值范圍內(nèi)、取值范圍外,取值的邊界,如有需要,可能會(huì)遍歷取值范圍內(nèi)的各個(gè)值。

例如檢查權(quán)限的接口:TaskChecker.checkTask(int taskID) taskID的取值范圍是1-35,那么設(shè)計(jì)時(shí)考慮:

1-35范圍內(nèi)和范圍外的值;

1-35的邊界:0,1,35,36;

類型的特殊值:-1,0

數(shù)據(jù)類型的邊界值:int的最小值最大值;

因?yàn)?-35代碼的權(quán)限ID不同,可能需要遍歷1-35的每個(gè)值。

常見問(wèn)題和風(fēng)險(xiǎn):

特殊值處理不當(dāng)導(dǎo)致程序異常退出;

類型邊界溢出

取值范圍外值未返回正確的錯(cuò)誤信息等

2.1.2 字符串型

字符串型的參數(shù),主要考慮字符串的長(zhǎng)度和內(nèi)容:

例如接口轉(zhuǎn)換設(shè)置鬧鐘的接口DateUtil.getDayOfDDHH(String ddhh),用例可以考慮:

長(zhǎng)度為4位,比4位少,比4位多;

邊界值:String的最大長(zhǎng)度;

特殊值:空字符;

字符串內(nèi)容可考慮類型:數(shù)字,非數(shù)字;

特殊字符。

如果是輸入用戶輸入且其他用戶可見的內(nèi)容,則還需要考慮敏感字是否被正常過(guò)濾。

可能出現(xiàn)的問(wèn)題和風(fēng)險(xiǎn):

傳入非特定類型程序異常退出

超長(zhǎng)字符未進(jìn)行處理,導(dǎo)致存儲(chǔ)、顯示等異常

其他用戶可見設(shè)置的敏感字

2.1.3 數(shù)組或鏈表類型

參數(shù)類型為數(shù)組或鏈表時(shí),用例可以考慮:

例如批量提交任務(wù)的接口submitTask(int[] taskID),參數(shù)用例設(shè)計(jì)考慮:

正常取值:1-5個(gè)權(quán)限,范圍外:6個(gè)權(quán)限;

邊界值:1-35的邊界值,請(qǐng)求允許最大最小值;

特殊值:0個(gè);

合法ID和不合法的;

重復(fù)的ID等。

可能存在的問(wèn)題和風(fēng)險(xiǎn):

0個(gè)item時(shí)程序異常退出;

重復(fù)的item處理時(shí)未去重導(dǎo)致結(jié)果異常等。

2.2 針對(duì)邏輯設(shè)計(jì)

接口需要進(jìn)行一些邏輯處理的,那么按邏輯設(shè)計(jì)用例可以從以下幾個(gè)角度分析。

2.2.1 約束條件分析

(1)數(shù)值限制:分?jǐn)?shù)限制、金幣限制、等級(jí)限制等等。

例如:兌換Q幣活動(dòng)要求積分>50才可參與。

(2)狀態(tài)限制:登錄狀態(tài)等。

例如:同步用戶信息需要先登錄賬號(hào)。

(3)關(guān)系限制:綁定的關(guān)系,好友關(guān)系等。

例如:幫家人防騙功能只能查詢綁定家人的來(lái)電信息。

(4)權(quán)限限制:管理員等。

約束條件的測(cè)試在功能測(cè)試中經(jīng)常遇到,在接口測(cè)試中更為重要。它的意義在于:用戶進(jìn)行操作時(shí),在該操作的前端可以已經(jīng)進(jìn)行了約束條件的限制,故用戶無(wú)法直接觸發(fā)請(qǐng)求該接口。但是實(shí)際上,如果有其他手段:例如UI有bug或者通過(guò)技術(shù)手段直接調(diào)用接口,那么接口是否針對(duì)這些條件進(jìn)行了限制就尤為重要。

例如常見的例子:要兌換5Q幣需要200積分,但是我積分不足,所以兌換按鈕是灰色無(wú)法點(diǎn)擊的狀態(tài):

正常用戶是無(wú)法操作的,但是兌換其實(shí)是調(diào)后臺(tái)的一個(gè)接口,如果繞過(guò)頁(yè)面按鈕的限制,直接調(diào)用后臺(tái)接口兌換呢?是否可以兌換?預(yù)期當(dāng)然是不能兌換的。因此積分這個(gè)數(shù)值限制就需要針對(duì)接口進(jìn)行測(cè)試,并且非常重要。

其他約束條件類似:

時(shí)間約束:22:00之前;

數(shù)值約束:積分200;限量5個(gè);

狀態(tài)約束:登錄手機(jī)管家;

等等約束條件類似。

常見的問(wèn)題和風(fēng)險(xiǎn):

約束條件判斷不足,導(dǎo)致用戶可通過(guò)特殊手段獲取利益

2.2.2 操作對(duì)象分析

操作通常是針對(duì)對(duì)象的,例如用戶綁定電話號(hào)碼,電話號(hào)碼就是操作對(duì)象,而這個(gè)電話號(hào)碼的話費(fèi)、流量也是對(duì)象。

對(duì)象分析主要是針對(duì)合法和不合法對(duì)象進(jìn)行操作。例如下述用例子:

用戶A查詢電話P1話費(fèi):

用戶A查詢電話P1流量;

用戶A查詢電話P2話費(fèi);

用戶A查詢電話P2流量。

后臺(tái)的邏輯處理,如果一個(gè)電話已經(jīng)被綁定過(guò),從后臺(tái)的角度是可以查詢到該電話的話費(fèi)和流量的。但是在用戶側(cè),應(yīng)該是A綁定了的電話,才能讓A查詢到該電話的話費(fèi)。故類似對(duì)象的測(cè)試也必不可少。

常見的問(wèn)題和風(fēng)險(xiǎn):

用戶可訪問(wèn)非權(quán)限內(nèi)的其他用戶信息、敏感信息,從而利用這些信息謀取利益。

2.2.3 狀態(tài)轉(zhuǎn)換分析

被測(cè)邏輯可以抽象成狀態(tài)機(jī),各個(gè)狀態(tài)之間根據(jù)功能邏輯從一個(gè)狀態(tài)切換到另一個(gè)狀態(tài)。如果我們打亂了這個(gè)次序,從一個(gè)狀態(tài)切換到另一個(gè)不在它下一狀態(tài)集中的狀態(tài),那么邏輯將會(huì)打亂,就會(huì)出現(xiàn)邏輯問(wèn)題。

如上圖所示,從某狀態(tài)改變到新的狀態(tài),依賴于轉(zhuǎn)換接口。而對(duì)于某轉(zhuǎn)換接口,其輸入狀態(tài)是確定的,比如Fun23, 這個(gè)函數(shù)只能把狀態(tài)2轉(zhuǎn)換為狀態(tài)3,而不能把狀態(tài)1轉(zhuǎn)換為狀態(tài)3。那么測(cè)試點(diǎn)就可以是:

(1)狀態(tài)為狀態(tài)2,調(diào)用接口Fun23(),狀態(tài)切換到狀態(tài)23;

(2) 狀態(tài)為1,3等,調(diào)用接口Fun23(),狀態(tài)不能切換。

例如在做任務(wù)的時(shí)候,任務(wù)有三種狀態(tài):未領(lǐng)取,已領(lǐng)取未提交,已完成三種狀態(tài)。

那么可以這樣設(shè)計(jì):

(1)正常的狀態(tài)切換:未領(lǐng)取狀態(tài),領(lǐng)取任務(wù)后變?yōu)橐杨I(lǐng)取狀態(tài);已領(lǐng)取滿足任務(wù)條件提交后,變成已完成狀態(tài);完成后可以再次領(lǐng)取任務(wù)。

(2) 非正常的狀態(tài)切換:未領(lǐng)取任務(wù)滿足任務(wù)條件直接提交任務(wù);已領(lǐng)取時(shí)再次領(lǐng)取任務(wù)等等。

常見的問(wèn)題和風(fēng)險(xiǎn):

可通過(guò)特殊手段達(dá)到原本不能的狀態(tài),從而謀取利益。

2.2.4 時(shí)序分析

在一些復(fù)雜的活動(dòng)中,一個(gè)活動(dòng)是由一系列動(dòng)作按照指定順序進(jìn)行的,這些動(dòng)作形成一個(gè)動(dòng)作流,只有按照這個(gè)順序依次執(zhí)行,才能得到預(yù)期結(jié)果。

在正常的流程里,這些動(dòng)作是根據(jù)程序調(diào)用依次進(jìn)行的,并不會(huì)打亂,在接口測(cè)試時(shí),需要考慮如果不安裝時(shí)序執(zhí)行,是否會(huì)出現(xiàn)問(wèn)題。

例如,客戶端數(shù)據(jù)同步是由客戶端觸發(fā)進(jìn)行的,期間的同步用戶無(wú)法干預(yù)。功能測(cè)試的時(shí)候可見的就是是否能正常進(jìn)行同步,而進(jìn)一步分析,同步流程實(shí)際涉及了一組動(dòng)作:

從時(shí)序圖可以看出,后臺(tái)有3個(gè)接口:登陸獲取用戶ID,上報(bào)本地?cái)?shù)據(jù),上報(bào)本地沖突。三個(gè)接口需要依次調(diào)用執(zhí)行,才能完成同步。那么在接口測(cè)試就可以考慮打亂上述接口的執(zhí)行順序去執(zhí)行,會(huì)有怎樣的結(jié)果,是否會(huì)出現(xiàn)異常。例如:獲取用戶ID后不上報(bào)本地?cái)?shù)據(jù)而直接上報(bào)本地沖突。

常見的問(wèn)題和風(fēng)險(xiǎn):

非順序執(zhí)行后,數(shù)據(jù)出現(xiàn)異常,可能還會(huì)出現(xiàn)程序其他異常

通過(guò)打亂順序獲取利益

2.3 針對(duì)輸出設(shè)計(jì)

針對(duì)輸出設(shè)計(jì)其實(shí)是針對(duì)接口返回的結(jié)果進(jìn)行分析。

2.3.1 針對(duì)輸出結(jié)果

接口處理正確的結(jié)果可能只有一個(gè),但是錯(cuò)誤異常返回結(jié)果有很多情況很多值。如果知道返回結(jié)果有很多種,就可以針對(duì)不同結(jié)果設(shè)計(jì)用例。例如提交積分任務(wù)的時(shí)候我們通常能想到的是返回正確和錯(cuò)誤,錯(cuò)誤可能想到:無(wú)效任務(wù),無(wú)效登錄態(tài),但是不一定能否完全覆蓋所有錯(cuò)誤碼,而接口返回定義的返回碼可以設(shè)計(jì)更多用例:

覆蓋返回碼也是用例設(shè)計(jì)的一種思路。

常見問(wèn)題和風(fēng)險(xiǎn):

(1)錯(cuò)誤前端處理不足,導(dǎo)致前端異常;

(2)錯(cuò)誤提示處理不當(dāng),導(dǎo)致用戶看到晦澀的錯(cuò)誤碼;

(3)錯(cuò)誤提示不當(dāng),導(dǎo)致用戶不知道哪里出了問(wèn)題,如何解決。

2.3.2 接口超時(shí)

接口正常情況下是有返回的,那么如果接口不返回呢?也就是說(shuō)接口超時(shí)后的處理也是測(cè)試需要考慮的部分。如果超時(shí)處理不當(dāng),可能會(huì)引起以下問(wèn)題:

(1)未進(jìn)行超時(shí)處理,導(dǎo)致整個(gè)流程阻塞

(2)超時(shí)后又收到接口返回,導(dǎo)致邏輯出現(xiàn)錯(cuò)亂

2.4 其他測(cè)試設(shè)計(jì)

2.4.1 已廢棄接口測(cè)試

已廢棄協(xié)議,是指之前有定義,但是因?yàn)樾枨笞兏蚱渌颍壳鞍姹静挥?。這些接口雖然不再使用,但有可能代碼并沒(méi)有及時(shí)刪除。如果利用技術(shù)手段調(diào)用這些接口,可能獲取額外利益。

例如,任務(wù)之前有個(gè)清理任務(wù),在一個(gè)版本需求里將清理任務(wù)替換為下載任務(wù)。在新版本客戶端已不再調(diào)用完成清理任務(wù)的接口;但是如果該接口未關(guān)閉,用戶就可以繼續(xù)請(qǐng)求submitTask(int taskID)接口完成清理任務(wù)獲得積分。

因此新版本在考慮兼容舊版本的同時(shí),還應(yīng)做好相關(guān)廢棄接口的檢查,避免用戶獲得額外利益。

2.4.2 接口設(shè)計(jì)合理性分析

接口定義是否合理可以從以下幾個(gè)方面分析:

(1)接口字段是否冗余;

(2)接口是否冗余;

(3)接口是否返回了調(diào)用方期望得到的信息;

(4)接口定義是否可滿足所有調(diào)用需求;

(5)接口定義調(diào)用是否方便。

2.5 一個(gè)完整的例子

下面舉一個(gè)完整例子,通過(guò)上述方法來(lái)分析如何對(duì)接口進(jìn)行用例設(shè)計(jì)。

某模塊提供了一個(gè)接口給其他模塊,用戶請(qǐng)求任務(wù),接口定義如下:

2.5.1 針對(duì)輸入設(shè)計(jì)

dialogDetailText(dialogButtonText類似)

長(zhǎng)度

1)正常:請(qǐng)按照提示進(jìn)行操作;

2)邊界:int的最小值最大值;String的最大長(zhǎng)度;請(qǐng)求允許的最大最小。

3)特殊:空字符串。

內(nèi)容

1)特定類型:中文,英文,數(shù)字等;

2)特殊字符:/n/r/t ,.><?*$&^%~"??℡?€?等;

3)敏感字符:非用戶設(shè)置,不涉及。

taskID(requestType類似)

等價(jià)類

取值范圍內(nèi):1,5,10等;

取值范圍外:0,99。

邊界法

取值范圍邊界:0,1,38,39,40

數(shù)據(jù)類型邊界:-2147483648 ,2147483648

特殊值:0,-1等。

遍歷法:1,2,3,4,5…38,39對(duì)應(yīng)每種不同ID。

2.5.2 針對(duì)邏輯設(shè)計(jì)

(1)約束條件分析

去引導(dǎo)某功能需要:未完成過(guò)任務(wù),任務(wù)有任務(wù)數(shù)據(jù)。

那么用例可以是:以下情況下調(diào)requestTask:

1)未使用過(guò)有任務(wù)數(shù)據(jù)時(shí);

2)未使用無(wú)任務(wù)數(shù)據(jù)時(shí);

3)使用過(guò)有任務(wù)數(shù)據(jù)時(shí);

4)使用過(guò)無(wú)任務(wù)數(shù)據(jù)時(shí)。

如果有其他約束條件類似設(shè)計(jì)。

(2)操作對(duì)象分析

調(diào)用請(qǐng)求接口后,會(huì)顯根據(jù)任務(wù)數(shù)據(jù),引導(dǎo)對(duì)應(yīng)的任務(wù)。任務(wù)數(shù)據(jù),任務(wù)操作方式,任務(wù)功能都可以是對(duì)象。

1)任務(wù)數(shù)據(jù)

數(shù)據(jù)類型:本地,云端 等

數(shù)據(jù)有效性:正確數(shù)據(jù),錯(cuò)誤數(shù)據(jù)

2)操作方式

方式:安裝,下載,打開等等 。

3)任務(wù)功能

功能:用戶操作了該功能,未正常操作該功能;什么都不操作;完成一個(gè)任務(wù)功能;完成多個(gè)任務(wù)功能;任務(wù)功能使用順序等等。

對(duì)象:還需要關(guān)注,會(huì)不會(huì)操作到不合法的對(duì)象,例如任務(wù)數(shù)據(jù)和功能不對(duì)應(yīng)等問(wèn)題。

(3)狀態(tài)轉(zhuǎn)換分析

功能是有4個(gè)狀態(tài)的:完成,未完成,未知。狀態(tài)圖如下:這里是產(chǎn)品里涉及的狀態(tài)轉(zhuǎn)換:

針對(duì)該狀態(tài):

1)正常狀態(tài)轉(zhuǎn)換:未完成狀態(tài)請(qǐng)求并完成任務(wù)后是否可變成完成狀態(tài);未完成狀態(tài)請(qǐng)求但不完成,還是未完成狀態(tài)。

2)走不到的狀態(tài)路徑:未知和完成狀態(tài)請(qǐng)求任務(wù),不能進(jìn)行進(jìn)行該任務(wù)。

(4)時(shí)序分析

從時(shí)序的角度分析,調(diào)用請(qǐng)求接口前需要以下2步動(dòng)作:

1)拉取任務(wù)數(shù)據(jù);

2)判斷任務(wù)狀態(tài)。

從時(shí)序得到的用例有:

正常時(shí)序:按照正常時(shí)序請(qǐng)求1 2 3;

缺失的時(shí)序

缺少動(dòng)作1調(diào)2 3;缺少動(dòng)作2調(diào)1 3;缺少動(dòng)作1和2直接調(diào)。

打亂的時(shí)序

打亂的時(shí)序:2 1 3,還可以有1 3 2,2 3 1,3 1 2,3 2 1。

針對(duì)處理邏輯的設(shè)計(jì)中,可能使用某一種或某幾種方式就可以將用例覆蓋前,故實(shí)際使用中,可能不會(huì)全部使用,只要找到最合適的方式覆蓋用例即可。

2.5.3 針對(duì)輸出分析

請(qǐng)求任務(wù)接口返回的數(shù)據(jù)是任務(wù)完成結(jié)果,即返回完成,未完成兩種狀態(tài)(未知都作為完成返回)。

從結(jié)果可以考慮遍歷:

1)未完成

2)完成

3)完成-未知

從接口處理時(shí)間分析,考慮:請(qǐng)求后快速返回,很長(zhǎng)時(shí)間才返回,甚至不返回結(jié)果的情況。

3 小結(jié)

接口用例設(shè)計(jì)方法中,針對(duì)輸入、輸出的設(shè)計(jì)是通用的,接口設(shè)計(jì)時(shí)都可用到。對(duì)于接口邏輯的設(shè)計(jì)可能會(huì)應(yīng)用比較適合的一種或幾種方法,在接口用例設(shè)計(jì)時(shí),需要選取最合適的方法去覆蓋被測(cè)邏輯。

轉(zhuǎn)自:接口測(cè)試用例到底應(yīng)該怎么寫 · TesterHome

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容