平臺(tái)服務(wù)器測(cè)試2—接口功能測(cè)試
由于平臺(tái)服務(wù)器是通過(guò)接口來(lái)與客戶(hù)端交互數(shù)據(jù)提供各種服務(wù),因此服務(wù)器測(cè)試工作首先需要進(jìn)行的是接口測(cè)試工作。測(cè)試人員需要通過(guò)服務(wù)器接口功能測(cè)試來(lái)確保接口功能實(shí)現(xiàn)正確,那么其他測(cè)試人員進(jìn)行客戶(hù)端與服務(wù)器結(jié)合的系統(tǒng)測(cè)試過(guò)程中,就能夠排除由于服務(wù)器接口缺陷所導(dǎo)致的客戶(hù)端問(wèn)題,便于開(kāi)發(fā)人員定位問(wèn)題。以下便是個(gè)人的平臺(tái)服務(wù)器接口功能測(cè)試經(jīng)驗(yàn)總結(jié):
一、接口測(cè)試范圍
根據(jù)服務(wù)器的測(cè)試需求,接口測(cè)試范圍主要分為:1、新增接口的測(cè)試;2、新增業(yè)務(wù)功能接口測(cè)試;3、整個(gè)服務(wù)器的接口測(cè)試。所需測(cè)試測(cè)試接口依次增多,在測(cè)試時(shí)間足夠的條件下,當(dāng)然需要對(duì)所有接口進(jìn)行測(cè)試用例的設(shè)計(jì),但如果測(cè)試較短的情況下,則應(yīng)該首先根據(jù)用戶(hù)的典型操作對(duì)測(cè)試接口進(jìn)行優(yōu)先級(jí)劃分,對(duì)調(diào)用頻繁接口需要優(yōu)先進(jìn)行測(cè)試。
二、接口測(cè)試策略
在進(jìn)行平臺(tái)服務(wù)器接口測(cè)試之前,首先需要整理服務(wù)器接口的測(cè)試方案,分析接口測(cè)試的要點(diǎn),平臺(tái)服務(wù)器的接口測(cè)試內(nèi)容主要有:
接口設(shè)計(jì)檢查
接口用于服務(wù)器與客戶(hù)端的數(shù)據(jù)交互,客戶(hù)端通過(guò)網(wǎng)絡(luò)協(xié)議傳遞的數(shù)據(jù)為服務(wù)器接口的輸入數(shù)據(jù),因此應(yīng)該首先通過(guò)服務(wù)器接口文檔及客戶(hù)端數(shù)據(jù)約束文檔進(jìn)行交互數(shù)據(jù)的有效性檢查:
● 整數(shù)型數(shù)據(jù)位數(shù)
● 浮點(diǎn)型數(shù)據(jù)精度
● 字符串?dāng)?shù)據(jù)范圍值
要求客戶(hù)端的整數(shù)型、浮點(diǎn)型、字符串?dāng)?shù)據(jù)以及其最大值和最小值都能作為服務(wù)器接口的有效輸入。這些工作在服務(wù)器設(shè)計(jì)評(píng)審時(shí)就可以進(jìn)行,以便確保不會(huì)出現(xiàn)客戶(hù)端上傳數(shù)據(jù)被服務(wù)器自動(dòng)進(jìn)行截?cái)嗷蛩纳嵛迦氲牟僮鳌?/p>
接口依賴(lài)關(guān)系檢查
以上策略只談到單個(gè)接口的測(cè)試方法,對(duì)于用戶(hù)來(lái)說(shuō),一個(gè)操作可能會(huì)造成服務(wù)器調(diào)用多個(gè)接口來(lái)進(jìn)行完成,因此還需要從業(yè)務(wù)處理的角度,對(duì)各種業(yè)務(wù)操作所涉及的多個(gè)接口之間依賴(lài)調(diào)用進(jìn)行測(cè)試。
接口依賴(lài)關(guān)系檢查主要是通過(guò)接口的輸出值為另一接口的輸入值來(lái)實(shí)現(xiàn)的,因此在進(jìn)行接口測(cè)試之前,需要分析所測(cè)試接口的輸入值是通過(guò)客戶(hù)端還是其他接口輸出來(lái)獲取的,在設(shè)計(jì)測(cè)試用例時(shí),加入接口的依賴(lài)關(guān)系說(shuō)明以便于測(cè)試。
接口輸入/輸出驗(yàn)證
服務(wù)器接口功能測(cè)試類(lèi)似于單元測(cè)試,在設(shè)計(jì)測(cè)試用例時(shí),側(cè)重點(diǎn)在于接口模塊輸入/輸出項(xiàng)的正確性驗(yàn)證,根據(jù)接服務(wù)器接口處理方式,對(duì)各種接口進(jìn)行分類(lèi):
第一類(lèi):條件判斷接口
這類(lèi)接口在接收到請(qǐng)求數(shù)據(jù)后,會(huì)根據(jù)輸入?yún)?shù)進(jìn)行條件判斷,然后返回相應(yīng)結(jié)果碼,通常涉及條件判斷的接口有:用戶(hù)鑒權(quán)接口、升級(jí)狀態(tài)上報(bào)、密碼修改/重置等接口。因此輸入/輸出項(xiàng)驗(yàn)證的側(cè)重點(diǎn)主要集中在:
1)判斷條件的驗(yàn)證
要對(duì)判斷條件進(jìn)行驗(yàn)證,則需要知道接口是根據(jù)哪些輸入項(xiàng)來(lái)進(jìn)行判斷的,以密碼重置接口為例:
密碼重置接口
『接口功能』:用戶(hù)登錄之后發(fā)起找回密碼操作,用戶(hù)輸入郵箱信息后,游戲中心將向平臺(tái)服務(wù)器發(fā)送請(qǐng)求,平臺(tái)服務(wù)器將隨機(jī)為用戶(hù)生成新的密碼,發(fā)到用戶(hù)的郵箱中。
『接口方向』:游戲中心—>平臺(tái)服務(wù)器
『遵循協(xié)議』:HTTPS,請(qǐng)求消息使用Post方式
參數(shù)名稱(chēng) | 參數(shù)類(lèi)型 | 參數(shù)長(zhǎng)度 | 說(shuō)明 |
userID | Int | 10 | 用戶(hù)ID號(hào) |
String | 60 | 郵箱地址 | |
key | String | 50 | 接口名稱(chēng) |
version | String | 8 | 版本號(hào) |
響應(yīng)消息(sendMessageRes)
參數(shù)名稱(chēng) | 參數(shù)類(lèi)型 | 參數(shù)長(zhǎng)度 | 說(shuō)明 |
resultCode | Int | 5 | 結(jié)果返回碼,返回42000表示處理成功 |
此接口根據(jù)輸入的userID、email參數(shù)來(lái)進(jìn)行數(shù)據(jù)正確性的判斷(key是接口名稱(chēng),如果錯(cuò)誤服務(wù)器將不會(huì)處理,version是版本號(hào),其值只是用于記錄,不參與判斷),設(shè)計(jì)接口測(cè)試用例時(shí),應(yīng)該首先對(duì)接口的判斷參數(shù)進(jìn)行驗(yàn)證,這些輸入項(xiàng)不能為空,然后利用等價(jià)類(lèi)劃分、邊界值方法來(lái)根據(jù)userID、email輸入項(xiàng)設(shè)計(jì)各種合法的數(shù)據(jù),驗(yàn)證接口是否可以正常處理。
2)異常數(shù)據(jù)的響應(yīng)
只考慮正常情況,而不考慮異常場(chǎng)景是無(wú)法保證接口功能運(yùn)行正常,對(duì)于密碼重置接口,用戶(hù)ID不存在、不合法,郵箱輸入格式錯(cuò)誤、用戶(hù)郵箱信息不存在或未激活就是測(cè)試時(shí)需要考慮的異常場(chǎng)景,設(shè)計(jì)這類(lèi)輸入值,并且檢查接口返回的響應(yīng)碼,響應(yīng)碼的正確才能保證客戶(hù)端根據(jù)異常情況來(lái)顯示相應(yīng)的提示信息。簡(jiǎn)而言之,條件判斷的接口其測(cè)試策略就是根據(jù)判斷條件來(lái)設(shè)計(jì)各種輸入值來(lái)檢驗(yàn)接口的功能。
第二類(lèi):數(shù)據(jù)查詢(xún)接口
這類(lèi)接口接收到請(qǐng)求數(shù)據(jù)后,首先會(huì)驗(yàn)證請(qǐng)求是否合法,然后會(huì)根據(jù)請(qǐng)求項(xiàng)查詢(xún)數(shù)據(jù)庫(kù)相應(yīng)表中數(shù)據(jù)返回給客戶(hù)端,通常涉及數(shù)據(jù)查詢(xún)的接口有:用戶(hù)基本資料/經(jīng)驗(yàn)值/賽事信息查詢(xún)、游戲列表獲取、在線(xiàn)人數(shù)查詢(xún)等接口。以用戶(hù)經(jīng)驗(yàn)值查詢(xún)接口為例:
用戶(hù)經(jīng)驗(yàn)值查詢(xún)接口
『接口功能』:用戶(hù)登錄游戲中心后,可以查詢(xún)自己每個(gè)游戲項(xiàng)目的經(jīng)驗(yàn)值信息,包括此項(xiàng)目的經(jīng)驗(yàn)值等級(jí)、等級(jí)稱(chēng)號(hào)、今日經(jīng)驗(yàn)值上限等。
『接口方向』:游戲中心—>平臺(tái)服務(wù)器
『遵循協(xié)議』:HTTP+XML,請(qǐng)求消息使用Post方式
參數(shù)名稱(chēng) | 參數(shù)類(lèi)型 | 參數(shù)長(zhǎng)度 | 說(shuō)明 |
userID | Int | 10 | 用戶(hù)ID號(hào) |
webkey | String | 60 | 當(dāng)前分配給指定登錄用戶(hù)的密鑰 |
key | String | 50 | 接口名稱(chēng) |
version | String | 8 | 版本號(hào) |
isAll | Int | 1 | 是否查詢(xún)用戶(hù)所有的運(yùn)動(dòng)項(xiàng)目經(jīng)驗(yàn)值 0:是;1否 |
sportItemID | String | 50 | 運(yùn)動(dòng)項(xiàng)目ID,當(dāng)isAll=1時(shí)不能為空,指定查詢(xún)某個(gè)運(yùn)動(dòng)項(xiàng)目的經(jīng)驗(yàn) |
響應(yīng)消息(sendMessageRes)
參數(shù)名稱(chēng) | 參數(shù)類(lèi)型 | 參數(shù)長(zhǎng)度 | 說(shuō)明 |
sportItemID | String | 50 | 運(yùn)動(dòng)項(xiàng)目ID |
sumExp | Int | 11 | 運(yùn)動(dòng)經(jīng)驗(yàn)值總額 |
expLevel | Int | 3 | 經(jīng)驗(yàn)值等級(jí) |
minExp | Int | 11 | 本級(jí)最小經(jīng)驗(yàn)值 |
expOrder | Int | 11 | 經(jīng)驗(yàn)值排名 |
maxExp | Int | 11 | 本級(jí)最大經(jīng)驗(yàn)值 |
todayExp | Int | 11 | 今日獲得經(jīng)驗(yàn)值 |
todayExpLimit | Int | 11 | 今日經(jīng)驗(yàn)值上限 |
designation | String | 30 | 稱(chēng)號(hào)(對(duì)應(yīng)于經(jīng)驗(yàn)值) |
winCount | Int | 11 | 勝利場(chǎng)次 |
lossCount | Int | 11 | 失敗場(chǎng)次 |
isMaxExp | Int | 1 | 總經(jīng)驗(yàn)值是否達(dá)到最大 0 否;1 是 |
此接口首先會(huì)根據(jù)webkey來(lái)判斷請(qǐng)求是否合法,然后根據(jù)請(qǐng)求參數(shù)中的userID、isAll、sportItemID來(lái)查詢(xún)數(shù)據(jù)表中相應(yīng)數(shù)據(jù)。除了象條件判斷接口一樣根據(jù)判斷項(xiàng)webkey、請(qǐng)求參數(shù)userID、isAll、sportItemID設(shè)計(jì)合法/不合法和正常/異常測(cè)試值之外,還需要結(jié)合數(shù)據(jù)庫(kù)來(lái)對(duì)查詢(xún)結(jié)果進(jìn)行驗(yàn)證:
1)是否根據(jù)正確的關(guān)聯(lián)數(shù)據(jù)表進(jìn)行查詢(xún);
2)驗(yàn)證查詢(xún)結(jié)果是否從數(shù)據(jù)表中正確項(xiàng)中獲取,涉及到多表聯(lián)合查詢(xún)時(shí),不同表中的相同項(xiàng)設(shè)計(jì)不同測(cè)試數(shù)據(jù)進(jìn)行驗(yàn)證;
3)修改查詢(xún)結(jié)果在數(shù)據(jù)表中對(duì)應(yīng)項(xiàng)中的數(shù)據(jù),使其為空值或客戶(hù)端相應(yīng)項(xiàng)的范圍值的最大和最小值,查看接口輸出是否正確。
第三類(lèi):邏輯運(yùn)算接口
這類(lèi)接口在收到請(qǐng)求數(shù)據(jù)之后,會(huì)進(jìn)行一系列邏輯運(yùn)算,然后根據(jù)處理結(jié)果更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),通常涉及邏輯運(yùn)算的接口有:比賽成績(jī)同步、商品支付、各種數(shù)據(jù)報(bào)表等接口。以比賽成績(jī)同步接口為例:
比賽成績(jī)同步接口
『接口功能』:游戲服務(wù)器將用戶(hù)每次的比賽成績(jī)傳給平臺(tái)服務(wù)器,平臺(tái)服務(wù)器根據(jù)用戶(hù)的比賽成績(jī)更新此用戶(hù)的賽事排名,然后存入數(shù)據(jù)庫(kù)。
『接口方向』:游戲服務(wù)器—>平臺(tái)服務(wù)器
『遵循協(xié)議』:HTTPS+XML,請(qǐng)求消息使用Post方式
參數(shù)名稱(chēng) | 參數(shù)類(lèi)型 | 參數(shù)長(zhǎng)度 | 說(shuō)明 |
userID | Int | 10 | 用戶(hù)i-dong號(hào) |
webKey | String | 64 | 當(dāng)前分配給指定登錄用戶(hù)的密鑰 |
key | String | 50 | 接口名稱(chēng) |
version | String | 8 | 版本號(hào) |
gymkanaCode | String | 30 | 當(dāng)前比賽所參與的運(yùn)動(dòng)會(huì),該參數(shù)為空說(shuō)明只是普通用戶(hù)的比賽 |
sportItemID | String | 50 | 游戲項(xiàng)目的ID |
sportItemName | String | 50 | 游戲項(xiàng)目名稱(chēng) |
sportServerID | String | 50 | 游戲服務(wù)器IP |
matchSystem | Int | 3 | 競(jìng)速跑賽制: 100米:1; 400米:2; 800米:4; 1500米:8; 4×100米:16; |
matchId | String | 50 | 該場(chǎng)次比賽唯一id |
record | double |
| 當(dāng)前用戶(hù)成績(jī) (如record=8.123456)。非正常結(jié)束比賽時(shí),即isWinner=3或4,如果是單人跑,isWinner=5,record=-1 |
unit | String | 20 | 成績(jī)單位 |
isWinner | Int | 2 | 當(dāng)前用戶(hù)是否贏了0=輸,1=贏,2=未完成,3=主動(dòng)退出,4=被迫退出 |
competitorID | Int | 10 | 對(duì)手idong號(hào) |
competitorRecord | double |
| 當(dāng)前對(duì)手成績(jī),規(guī)則同record |
competitorIsWinner | int | 2 | 對(duì)手輸贏,規(guī)則同isWinner |
starttime | String | 14 | 開(kāi)始時(shí)間(yyyy-MM-dd HH:mm:ss) |
endtime | String | 14 | 結(jié)束時(shí)間(yyyy-MM-dd HH:mm:ss) |
響應(yīng)消息(sendMessageRes)
字體: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿
參數(shù)名稱(chēng) | 參數(shù)類(lèi)型 | 參數(shù)長(zhǎng)度 | 說(shuō)明 |
resultCode | Int | 5 | 結(jié)果返回碼,返回42000表示處理成功 |
score | Int | 11 | 本次得分 |
preRank | Int | 11 | 賽前積分在賽后的排名 |
rank | Int | 11 | 積分排名 |
upRankFlag | Int | 1 | 排名上升:1;排名不變:0;排名下降:-1 |
isUpLevel | Int | 1 | 經(jīng)驗(yàn)值是否升級(jí) 0 否;1 是 |
exp | Int | 11 | 本次增加的經(jīng)驗(yàn)值 |
expLevel | Int | 3 | 經(jīng)驗(yàn)值等級(jí) |
designation | String | 30 | 稱(chēng)號(hào)(對(duì)應(yīng)于經(jīng)驗(yàn)值) |
cPreRank | Int | 11 | 對(duì)手賽前積分在賽后的排名 |
cRank | Int | 11 | 對(duì)手賽后積分排名 |
cUpRankFlag | Int | 1 | 對(duì)手排名上升:1;排名不變:0;排名下降:-1 |
encourageWord | String | 15 | 鼓勵(lì)語(yǔ)句 |
此接口比數(shù)據(jù)查詢(xún)接口又更加復(fù)雜,除了用條件判斷和數(shù)據(jù)查詢(xún)類(lèi)接口的策略對(duì)此接口進(jìn)行測(cè)試用例設(shè)計(jì)之外,還需要驗(yàn)證對(duì)接口的算法規(guī)則進(jìn)行檢查,因?yàn)榇私涌谏婕案鶕?jù)用戶(hù)比賽成績(jī)(record)進(jìn)行排名然后返回其得分及排名情況(score、rank、upRankFlag、exp),通過(guò)對(duì)相關(guān)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行查看方式,接口算法規(guī)則驗(yàn)證包括:
1)用戶(hù)勝利、失敗、中途主動(dòng)/被動(dòng)退出、規(guī)定時(shí)間內(nèi)未完成比賽情況下,此場(chǎng)比賽得分(scroe)是否正確;
2)用戶(hù)比賽成績(jī)比上次成績(jī)花費(fèi)時(shí)間短、長(zhǎng)、持平情況下,排名情況(upRankFlag)是否正確;
3)用戶(hù)比賽成績(jī)處于第一名、最后一名、比上次成績(jī)花費(fèi)時(shí)間短/長(zhǎng)/持平情況下,用戶(hù)積分排名(rank)是否正確;
4)用戶(hù)勝利、失敗、中途主動(dòng)/被動(dòng)退出、規(guī)定時(shí)間內(nèi)未完成比賽,并且用戶(hù)經(jīng)驗(yàn)值在各種經(jīng)驗(yàn)等級(jí)范圍下,經(jīng)驗(yàn)值根據(jù)得分進(jìn)行計(jì)算的公式是否正確。
邏輯運(yùn)算接口由于還涉及插入或更新數(shù)據(jù)庫(kù)操作,因此測(cè)試時(shí)還需要考慮數(shù)據(jù)庫(kù)特性,如數(shù)據(jù)精度問(wèn)題,在MySQL數(shù)據(jù)庫(kù)中,如果是浮點(diǎn)型數(shù)據(jù),存入時(shí)會(huì)有精度誤差(131072.32插入float(10,2)類(lèi)型的數(shù)據(jù)會(huì)變?yōu)?31072.31),因此對(duì)于需要用于金額計(jì)算、數(shù)據(jù)統(tǒng)計(jì)、成績(jī)比較的數(shù)據(jù),最好使用定點(diǎn)型。
最后服務(wù)器接口的測(cè)試如果有足夠條件的話(huà),還需要通過(guò)白盒測(cè)試來(lái)對(duì)接口代碼做進(jìn)一步的測(cè)試,通過(guò)編寫(xiě)關(guān)鍵代碼的測(cè)試樁,可以有效查找將字符數(shù)組當(dāng)成字符串使用造成的讀越界這類(lèi)不易通過(guò)黑盒測(cè)試發(fā)現(xiàn)的BUG。接下來(lái)的工作就是如何通過(guò)測(cè)試工具來(lái)執(zhí)行服務(wù)器接口功能測(cè)試。
posted on 2011-10-31 11:51 順其自然EVO 閱讀(519) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): 測(cè)試學(xué)習(xí)專(zhuān)欄