這就需要開發(fā)提供的接口文檔了,接口文檔和功能測試的需求說明書的功能是一樣的。包括:接口說明、調(diào)用的url,請求方式(get or post),請求參數(shù)、參數(shù)類型、請求參數(shù)說明,返回結(jié)果說明。有了接口文檔后,我們就可以設(shè)計用例了,一般接口測試的用例分為以下幾種:
1、通過性驗(yàn)證,說白了就是傳遞正確的參數(shù),是否返回正常的結(jié)果
2、參數(shù)組合,因?yàn)閰?shù)有必傳和非必傳,參數(shù)的類型和長度,以及傳遞時可能業(yè)務(wù)上的一些限制,所以在設(shè)計用例時,就要排列組合這些情況,保證所有情況都能覆蓋到
3、接口的安全性,這個又分為幾種情況:
1)繞過驗(yàn)證,比如提交訂單時,在傳遞商品價格參數(shù)時,修改商品價格,就要看后端有沒有驗(yàn)證了?;蛘呶抑Ц稌r,抓個包將訂單金額一改,如果能以我改后的金額支付,那這個借口就有問題了。
2)繞過身份驗(yàn)證,就是某個功能只有有特殊權(quán)限的用戶才能操作,那我傳遞一個普通的用戶,是不是也能操作呢
3)參數(shù)是否加密,這個關(guān)系到一些賬戶的安全,比如我們在登錄一些網(wǎng)站時,它要將我們的登錄信息進(jìn)行加密,如果不加密我們的信息就會暴露,危害性極大。
4) 密碼安全規(guī)則,設(shè)置密碼時復(fù)雜程度的校驗(yàn)。
4、根據(jù)業(yè)務(wù)邏輯來設(shè)計用例
接口測試是測試系統(tǒng)組件間接口的一種測試。接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點(diǎn)。測試的重點(diǎn)是要檢查數(shù)據(jù)的交換,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。接口測試大體分為兩類:模塊接口測試和web接口測試。
WEB接口測試
web接口測試又可分為兩類:服務(wù)器接口測試和外部接口測試。
服務(wù)器接口測試:是測試瀏覽器與服務(wù)器的接口。用戶輸入的數(shù)據(jù)是輸入到的前端頁面上,怎樣把這些數(shù)據(jù)傳遞的后臺的呢?通過http協(xié)議的get與post請求來實(shí)現(xiàn)前后端的數(shù)據(jù)傳遞。這也可認(rèn)為是接口測試。
外部接口測試:這個很典型的例子就是第三方支付,比如在我們應(yīng)用中在充流量時,交話費(fèi)時,都會調(diào)用第三方支付接口。
主要測試要點(diǎn)如下:
請求是否正確,默認(rèn)請求成功是200,如果請求錯誤也能返回404、500等。
檢查返回數(shù)據(jù)的正確性與格式;json是一種非常常見的格式。
接口的安全性,一般web都不會暴露在網(wǎng)上任意被調(diào)用,需要做一些限制,比如鑒權(quán)或認(rèn)證。
接口的性能,這直接影響用戶的使用體驗(yàn)。
測試用例
正面測試用例:
覆蓋所有的必選參數(shù)
組合可選參數(shù)
參數(shù)邊界值
如果參數(shù)的取值范圍是枚舉變量,需要覆蓋所有枚舉值
還應(yīng)考慮實(shí)際業(yè)務(wù)應(yīng)用場景,去設(shè)計輸入?yún)?shù)的組合。(這些用例可用來測試功能,作為SMOKE用例。也可將來用于壓力測試模擬實(shí)際業(yè)務(wù)場 景,但要注意保證用例的獨(dú)立性,因?yàn)閴毫y試是多線程的。比如我們測試ACCOUNT 創(chuàng)建接口,NAME是不能重的,在寫測試用例時,給NAME賦值時可以加一個時間戳, 這樣用例在多線程并發(fā)測試時也不會有問題)
負(fù)面測試用例:
空數(shù)據(jù)
包含特殊的字符
越界的數(shù)據(jù)
錯誤的數(shù)據(jù)
驗(yàn)證點(diǎn):
status code (正常情況下,所有請求都應(yīng)該返回200)
響應(yīng)信息數(shù)據(jù)結(jié)構(gòu)(目前大多數(shù)情況下,返回信息都是JSON, 我們應(yīng)該驗(yàn)證相應(yīng)的結(jié)構(gòu)當(dāng)數(shù)據(jù)信息發(fā)生改變時)
驗(yàn)證結(jié)點(diǎn)的類型
驗(yàn)證結(jié)點(diǎn)的值 (主要是針對固定的值或者值遵循某些規(guī)則,我們能知道預(yù)期的結(jié)果的)
對于列表,應(yīng)該根據(jù)請求參數(shù),也應(yīng)該驗(yàn)證列表的長度是否與期望值一致
負(fù)面測試用例,應(yīng)驗(yàn)證ERROR INFO是否與實(shí)際相匹配
接口測試用例的設(shè)計
1.1接口文檔的特點(diǎn)
接口文檔,顧名思義就是對接口說明的文檔。好的接口文檔包含了對接口URL,參數(shù)以及輸出內(nèi)容的說明,我們參照接口文檔就能編寫出一個個的測試用例。而且接口文檔詳細(xì)的話,測試用例編寫簡單,不會遺漏。
如果一個接口文檔沒有寫清楚,你從文檔中分不出哪些參數(shù)是必需的,哪些是非必須的,而且沒有參數(shù)的取值說明,返回值的結(jié)構(gòu)等信息的話,測試人員是無法 編寫相應(yīng)的測試用例的。但是由于開發(fā)人員不愿意寫文檔,所以很多接口文檔相對來說比較簡單,模糊不清,這對我們做接口自動化測試是很大的阻礙。
1.2 接口文檔的結(jié)構(gòu)
接口文檔可以包含很多信息,有的愿意寫就可以多寫的,不太愿意寫的話,就寫的信息相對來說會少點(diǎn)兒。不過,下面幾項(xiàng)內(nèi)容必須有,這是我們使用接口中和測試接口的依據(jù):
(1)接口名稱。標(biāo)識各個接口的簡單說明,如登錄接口,獲取項(xiàng)目詳情接口等。
(2)接口URL。接口的調(diào)用地址,在測試環(huán)境下前面的域名可能不一樣,不過接口名是不會變的。
(3)調(diào)用方式。接口的調(diào)用方式:Post/Get方式,決定了如何調(diào)用接口及傳遞參數(shù)。
(4) 參數(shù)。接口需要傳遞的參數(shù),參數(shù)需要增加些說明:
(a) 參數(shù)值類型說明:參數(shù)值要說明一下,只支持字母,數(shù)據(jù),特殊字符或是字母數(shù)據(jù)混搭。
(b)參數(shù)長度說明:參數(shù)接收最大多少個的字符串,或是最大是多少的數(shù)值等。
(c) 參數(shù)取值范圍:像枚舉型的參數(shù),只接收什么范圍內(nèi)的數(shù)據(jù),如1-5等。
(d)參數(shù)的配合說明:有些參數(shù)需要配合起作用的,如:offset和count參數(shù)。
(e) 參數(shù)是必需的還是非必需的。
(5)返回值。接口的返回值說明需要包含正確和錯誤的情況,正確的情況下有哪兒數(shù)據(jù),錯誤的情況下會有什么提示?
(6)其他的一些說明。上面的說明是通用的,還有其他的一些說明,如必須是登錄狀態(tài)調(diào)用,或是版本號等說明,在某些情況下也需要說明一下。
1.3 接口文檔缺失的的解決方法
(1)完全沒有接口文檔。這個情況是最麻煩的,我們要找開發(fā)人員來商量 ,最好能補(bǔ)個接口文檔,如果實(shí)在來不及那就給個調(diào)用接口的實(shí)例。實(shí)例中會有接口地址,參數(shù)等信息,我們?nèi)y試環(huán)境中調(diào)用一下,就能看到返回結(jié)果的情況。
(2)接口文檔信息不全。信息不全這個最常見,像參數(shù)說明缺少啊,沒有說明哪些是必需的參數(shù),哪些是非必需的,或是沒有說明取值范圍等。此時我們能問開發(fā)就問開發(fā),如果不太方便,就要做嘗試:一般非必需的參數(shù)不會做容錯的判斷,必需的參數(shù)檢測的方面比較全面。
(3)文檔不是最新的。接口的后續(xù)的工作中被修改或是優(yōu)化過,我們按接口文檔上的說明去調(diào)用,返回和預(yù)期的不一樣。通知開發(fā)更新文檔,然后用最新的文檔再去修改測試用例。
這個接口文檔需要和接口開發(fā)人員做好約定,開發(fā)新接口時要把接口信息寫清楚,如果更新原來的接口,要及時更新接口文檔。同時在寫接口自動化測試用例的時候,要多和開發(fā)人員溝通,過程中溝通到底的一些關(guān)鍵信息整理為文檔留存。
2.接口測試用例設(shè)計
2.1 設(shè)計思路(策略)
1)優(yōu)先級–針對所有接口
a、暴露在外面的接口,因?yàn)橥ǔT摻涌跁o第三方調(diào)用;
b、供系統(tǒng)內(nèi)部調(diào)用的核心功能接口;
c、供系統(tǒng)內(nèi)部調(diào)用非核心功能接口;
2)優(yōu)先級–針對單個接口
a、正向用例優(yōu)先測試,逆向用例次之(通常情況,非絕對);
b、是否滿足前提條件 》 是否攜帶默認(rèn)參值參數(shù) 》 參數(shù)是否必填 》 參數(shù)之間是否存在關(guān)聯(lián) 》 參數(shù)數(shù)據(jù)類型限制 》 參數(shù)數(shù)據(jù)類型自身的數(shù)據(jù)范圍值限制
3)設(shè)計分析:通常,設(shè)計接口測試用例需要考慮以下幾個方面:
a、是否滿足前提條件
有些接口需要滿足前置條件,才可成功獲取數(shù)據(jù)。常見的,需要登陸Token。
逆向用例:針對是否滿足前置條件(假設(shè)為n個條件),設(shè)計0~n條用例
b、是否攜帶默認(rèn)值參數(shù)
正向用例:帶默認(rèn)值的參數(shù)都不填寫、不傳參,必填參數(shù)都填寫正確且存在的“常規(guī)”值,其它不填寫,設(shè)計1條用例;
c、業(yè)務(wù)規(guī)則、功能需求
這里根據(jù)實(shí)際情況,結(jié)合接口參數(shù)說明,可能需要設(shè)計n條正向用例和逆向用例
d、參數(shù)是否必填
逆向用例:針對每個必填參數(shù),都設(shè)計1條參數(shù)值為空的逆向用例
e、參數(shù)之間是否存在關(guān)聯(lián)
有些參數(shù)彼此之間存在相互制約的關(guān)系
逆向用例:根據(jù)實(shí)際情況,可能需要設(shè)計0~n條用例
f、參數(shù)數(shù)據(jù)類型限制
逆向用例:針對每個參數(shù)都設(shè)計1條參數(shù)值類型不符的逆向用例
g、參數(shù)數(shù)據(jù)類型自身的數(shù)據(jù)范圍值限制
正向用例:針對所有參數(shù),設(shè)計1條每個參數(shù)的參數(shù)值在數(shù)據(jù)范圍內(nèi)為最大值的正向用例
逆向用例:針對每個參數(shù)(假設(shè)n個),設(shè)計n條每個參數(shù)的參數(shù)值都超出數(shù)據(jù)范圍最大值的逆向用例
針對每個參數(shù)(假設(shè)n個),設(shè)計n條每個參數(shù)的參數(shù)值都小于數(shù)據(jù)范圍最小值的逆向用例
以上幾個方面考慮全的話,基本可以做到如下幾個方面的覆蓋:
主流程測試用例:正常的主流程功能校驗(yàn);
分支流測試用例:正常的分支流功能校驗(yàn)。
異常流測試用例:異常容錯校驗(yàn)
4) 測試用例基本上都包括以下五部分(根據(jù)項(xiàng)目情況進(jìn)行增減):
a.前置條件
b.輸入?yún)?shù)
c.執(zhí)行步驟
d.校驗(yàn)點(diǎn)
e.期望值
2.2 關(guān)注點(diǎn)
1)接口中所有的入?yún)⒍家獙憸y試用例。
2)每個入?yún)⒌拿總€錯誤類型都要準(zhǔn)備一個異常用例。如必須參數(shù)缺省、參數(shù)類型錯誤、參數(shù)范圍錯誤、參數(shù)超過最大位數(shù)、參數(shù)沒有達(dá)到最小指定位數(shù)、參數(shù)的無效值(有效狀態(tài)外)、參數(shù)的小數(shù)點(diǎn)超過規(guī)定長度、參數(shù)含有非法字、參數(shù)含有違禁字、參數(shù)的關(guān)聯(lián)性檢查(如所在省、市,所在地不匹配)等等。
3)對于正常系的用例,要把所有入?yún)⒌母鞣N合法的有效值都執(zhí)行到。所有入?yún)⒌淖畲笪豢梢杂靡粋€測試用例執(zhí)行掉。所有可缺省的參數(shù)不要(只輸入必須參數(shù))的測試用例也要做一個。
4)對于搜索接口,應(yīng)該把每個參數(shù)單獨(dú)作為搜索條件來確認(rèn)搜索結(jié)果是否正確,然后再確認(rèn)多條件輸入后的結(jié)果。
評論
查看更多