當前位置:
首頁 > 最新 > 介面測試用例設計

介面測試用例設計

導語

隨著測試分析和分層測試的深化,「介面測試」出現在我們視野的頻次越來越高。那麼介面測的用例設計常用哪些方法呢?本文將詳細描述。

1 介面測試

1.1 介面測試

介面:主要是子模塊或者子系統間交互並相互作用的部分。

這裡說的介面是廣義的,客戶端與後台服務間的協議;插件間通信的介面;模塊間的介面;再小到一個類提供的方法;都可以理解為介面。

介面測試:是指針對模塊或系統間介面進行的測試。

1.2 介面測試發現的典型問題

介面測試經常遇到的bug和問題,如下:

(1)傳入參數處理不當,導致程序crash;

(2)類型溢出,導致數據讀出和寫入不一致;

(3)因對象許可權未進行校驗,可以訪問其他用戶敏感信息;

(4)狀態處理不當,導致邏輯出現錯亂;

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

2 介面測試用例設計

上圖為一個典型的介面。一個介面通常是有輸入輸出的,輸入就是我們常見的入參,輸出有時有,有時沒有。調用相關介面,介面會執行相關處理邏輯。

介面測試的用例設計,主要從輸入和介面處理兩方面考慮:

1)針對輸入,可按照參數類型進行設計;

2)針對介面處理,可按照邏輯進行用例設計;

3)針對輸出,可根據結果進行分析設計。

2.1 針對輸入設計

對於介面來說,輸入就是入參。常見參數類型有:

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

(2)字元串類型

(3)數組或鏈表

(4)結構體

結構體(struct)是一些元素的結合,元素實際也是數值型,字元串型,數組或鏈表。

下面詳細說明數值型、字元串型、數組或鏈表三種參數類型用例設計。

2.1.1 數值型

數值型的參數主要考慮以下幾個方面設計:

如果參數規定了值的範圍,則需要考慮等價類取值範圍內、取值範圍外,取值的邊界,如有需要,可能會遍歷取值範圍內的各個值。

例如檢查許可權的介面:TaskChecker.checkTask(int taskID) taskID的取值範圍是1-35,那麼設計時考慮:

常見問題和風險:

2.1.2 字元串型

字元串型的參數,主要考慮字元串的長度和內容:

例如介面轉換設置鬧鐘的介面DateUtil.getDayOfDDHH(String ddhh),用例可以考慮:

可能出現的問題和風險:

2.1.3 數組或鏈表類型

參數類型為數組或鏈表時,用例可以考慮:

例如批量提交任務的介面submitTask(int[] taskID),參數用例設計考慮:

可能存在的問題和風險:

2.2 針對邏輯設計

介面需要進行一些邏輯處理的,那麼按邏輯設計用例可以從以下幾個角度分析。

2.2.1 約束條件分析

(1)數值限制:分數限制、金幣限制、等級限制等等。

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

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

例如:同步用戶信息需要先登錄賬號。

(3)關係限制:綁定的關係,好友關係等。

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

(4)許可權限制:管理員等。

約束條件的測試在功能測試中經常遇到,在介面測試中更為重要。它的意義在於:用戶進行操作時,在該操作的前端可以已經進行了約束條件的限制,故用戶無法直接觸發請求該介面。但是實際上,如果有其他手段:例如UI有bug或者通過技術手段直接調用介面,那麼介面是否針對這些條件進行了限制就尤為重要。

例如常見的例子:要兌換5Q幣需要200積分,但是我積分不足,所以兌換按鈕是灰色無法點擊的狀態:

正常用戶是無法操作的,但是兌換其實是調後台的一個介面,如果繞過頁面按鈕的限制,直接調用後台介面兌換呢?是否可以兌換?預期當然是不能兌換的。因此積分這個數值限制就需要針對介面進行測試,並且非常重要。

其他約束條件類似:

常見的問題和風險:

2.2.2 操作對象分析

操作通常是針對對象的,例如用戶綁定電話號碼,電話號碼就是操作對象,而這個電話號碼的話費、流量也是對象。

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

後台的邏輯處理,如果一個電話已經被綁定過,從後台的角度是可以查詢到該電話的話費和流量的。但是在用戶側,應該是A綁定了的電話,才能讓A查詢到該電話的話費。故類似對象的測試也必不可少。

常見的問題和風險:

2.2.3 狀態轉換分析

被測邏輯可以抽象成狀態機,各個狀態之間根據功能邏輯從一個狀態切換到另一個狀態。如果我們打亂了這個次序,從一個狀態切換到另一個不在它下一狀態集中的狀態,那麼邏輯將會打亂,就會出現邏輯問題。

如上圖所示,從某狀態改變到新的狀態,依賴於轉換介面。而對於某轉換介面,其輸入狀態是確定的,比如Fun23, 這個函數只能把狀態2轉換為狀態3,而不能把狀態1轉換為狀態3。那麼測試點就可以是:

(1)狀態為狀態2,調用介面Fun23(),狀態切換到狀態23;

(2) 狀態為1,3等,調用介面Fun23(),狀態不能切換。

例如在做任務的時候,任務有三種狀態:未領取,已領取未提交,已完成三種狀態。

那麼可以這樣設計:

(1)正常的狀態切換:未領取狀態,領取任務後變為已領取狀態;已領取滿足任務條件提交後,變成已完成狀態;完成後可以再次領取任務。

(2) 非正常的狀態切換:未領取任務滿足任務條件直接提交任務;已領取時再次領取任務等等。

常見的問題和風險:

可通過特殊手段達到原本不能的狀態,從而謀取利益。

2.2.4 時序分析

在一些複雜的活動中,一個活動是由一系列動作按照指定順序進行的,這些動作形成一個動作流,只有按照這個順序依次執行,才能得到預期結果。

在正常的流程里,這些動作是根據程序調用依次進行的,並不會打亂,在介面測試時,需要考慮如果不安裝時序執行,是否會出現問題。

例如,客戶端數據同步是由客戶端觸發進行的,期間的同步用戶無法干預。功能測試的時候可見的就是是否能正常進行同步,而進一步分析,同步流程實際涉及了一組動作:

從時序圖可以看出,後台有3個介面:登陸獲取用戶ID,上報本地數據,上報本地衝突。三個介面需要依次調用執行,才能完成同步。那麼在介面測試就可以考慮打亂上述介面的執行順序去執行,會有怎樣的結果,是否會出現異常。例如:獲取用戶ID後不上報本地數據而直接上報本地衝突。

常見的問題和風險:

2.3 針對輸出設計

針對輸出設計其實是針對介面返回的結果進行分析。

2.3.1 針對輸出結果

介面處理正確的結果可能只有一個,但是錯誤異常返回結果有很多情況很多值。如果知道返回結果有很多種,就可以針對不同結果設計用例。例如提交積分任務的時候我們通常能想到的是返回正確和錯誤,錯誤可能想到:無效任務,無效登錄態,但是不一定能否完全覆蓋所有錯誤碼,而介面返回定義的返回碼可以設計更多用例:

覆蓋返回碼也是用例設計的一種思路。

常見問題和風險:

(1)錯誤前端處理不足,導致前端異常;

(2)錯誤提示處理不當,導致用戶看到晦澀的錯誤碼;

(3)錯誤提示不當,導致用戶不知道哪裡出了問題,如何解決。

2.3.2 介面超時

介面正常情況下是有返回的,那麼如果介面不返回呢?也就是說介面超時後的處理也是測試需要考慮的部分。如果超時處理不當,可能會引起以下問題:

(1)未進行超時處理,導致整個流程阻塞

(2)超時後又收到介面返回,導致邏輯出現錯亂

2.4 其他測試設計

2.4.1 已廢棄介面測試

已廢棄協議,是指之前有定義,但是因為需求變更或其他原因,目前版本不用。這些介面雖然不再使用,但有可能代碼並沒有及時刪除。如果利用技術手段調用這些介面,可能獲取額外利益。

例如,任務之前有個清理任務,在一個版本需求里將清理任務替換為下載任務。在新版本客戶端已不再調用完成清理任務的介面;但是如果該介面未關閉,用戶就可以繼續請求submitTask(int taskID)介面完成清理任務獲得積分。

因此新版本在考慮兼容舊版本的同時,還應做好相關廢棄介面的檢查,避免用戶獲得額外利益。

2.4.2 介面設計合理性分析

介面定義是否合理可以從以下幾個方面分析:

(1)介面欄位是否冗餘;

(2)介面是否冗餘;

(3)介面是否返回了調用方期望得到的信息;

(4)介面定義是否可滿足所有調用需求;

(5)介面定義調用是否方便。

2.5 一個完整的例子

下面舉一個完整例子,通過上述方法來分析如何對介面進行用例設計。

某模塊提供了一個介面給其他模塊,用戶請求任務,介面定義如下:

2.5.1 針對輸入設計

dialogDetailText(dialogButtonText類似)

長度

1)正常:請安裝提示進行操作;

2)邊界:一個字:請;長度非常長:無懸浮窗許可權,可能影響XX功能無法使用,請開始懸浮窗許可權,以便獲得更好的用戶體驗;甚至更長;

3)特殊:空字元串。

內容

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

2)特殊字元:/n/r/t ,.>

3)敏感字元:非用戶設置,不涉及。

taskID(requestType類似)

等價類

取值範圍內:1,5,10等;

取值範圍外:0,99。

邊界法

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

特殊值:0,-1等。

遍曆法:1,2,3,4,5…38,39對應每種不同ID。

2.5.2 針對邏輯設計

(1)約束條件分析

去引導某功能需要:未完成過任務,任務有任務數據。

那麼用例可以是:以下情況下調requestTask:

1)未使用過有任務數據時;

2)未使用無任務數據時;

3)使用過有任務數據時;

4)使用過無任務數據時。

如果有其他約束條件類似設計。

(2)操作對象分析

調用請求介面後,會顯根據任務數據,引導對應的任務。任務數據,任務操作方式,任務功能都可以是對象。

1)任務數據

2)操作方式

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

3)任務功能

功能:用戶操作了該功能,未正常操作該功能;什麼都不操作;完成一個任務功能;完成多個任務功能;任務功能使用順序等等。

對象:還需要關注,會不會操作到不合法的對象,例如任務數據和功能不對應等問題。

(3)狀態轉換分析

功能是有4個狀態的:完成,未完成,未知。狀態圖如下:這裡是產品里涉及的狀態轉換:

針對該狀態:

1)正常狀態轉換:未完成狀態請求並完成任務後是否可變成完成狀態;未完成狀態請求但不完成,還是未完成狀態。

2)走不到的狀態路徑:未知和完成狀態請求任務,不能進行進行該任務。

2.4 時序分析

從時序的角度分析,調用請求介面前需要以下2步動作:

1)拉取任務數據;

2)判斷任務狀態。

從時序得到的用例有:

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

2.5.3 針對輸出分析

請求任務介面返回的數據是任務完成結果,即返回完成,未完成兩種狀態(未知都作為完成返回)。

從結果可以考慮遍歷:

1)未完成

2)完成

3)完成-未知

從介面處理時間分析,考慮:請求後快速返回,很長時間才返回,甚至不返回結果的情況。

3 小結

介面用例設計方法中,針對輸入、輸出的設計是通用的,介面設計時都可用到。對於介面邏輯的設計可能會應用比較適合的一種或幾種方法,在介面用例設計時,需要選取最合適的方法去覆蓋被測邏輯。

介面測試和傳統功能測試區別和聯繫是怎樣?歡迎說說你的想法。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 騰訊移動品質中心TMQ 的精彩文章:

TAG:騰訊移動品質中心TMQ |