一、需求
接口測(cè)試用例中部分測(cè)試用例主要是對(duì)接口的入?yún)ⅰ⒊鰠⑦M(jìn)行測(cè)試,入?yún)⒊鰠⒅饕蛿?shù)據(jù)類(lèi)型有關(guān),此部分測(cè)試用例可以進(jìn)行抽象建模使用JAVA自動(dòng)化生成,提升測(cè)試用例編寫(xiě)的效率。
二、設(shè)計(jì)

三、實(shí)現(xiàn)過(guò)程
1、工具:Intellij
項(xiàng)目結(jié)構(gòu)如下:生成的測(cè)試用例存放于resource下的APITestCases
excel文件中

2、pom.xml文件導(dǎo)入依賴(lài)包
需要對(duì)excel進(jìn)行讀寫(xiě)、解析Json格式數(shù)據(jù),因此需要導(dǎo)入poi和fastjson相關(guān)包

3、實(shí)現(xiàn)設(shè)計(jì)
(1) 按照一定格式整理接口信息,存放在APITestCase文件的ApiInfo
sheet頁(yè)

(2) 代碼實(shí)現(xiàn)
函數(shù)1:readApiInfo()
作用:讀取接口信息
函數(shù)2:generateMapp(String type,String paramName)
參數(shù)說(shuō)明:type:數(shù)據(jù)類(lèi)型,paramName:參數(shù)名
作用:根據(jù)不同的數(shù)據(jù)類(lèi)型生成不同的測(cè)試項(xiàng)
if(("int").equalsIgnoreCase(type)||("long").equalsIgnoreCase(type)){
??? map.put(0, "不傳");
??? map.put(1, "傳0");
??? map.put(2, "非"+type+"型");
??? map.put(3, "小數(shù)或負(fù)數(shù)");
??? map.put(4, "傳空");
}
else{
??? map.put(0, "不傳");
??? map.put(1, "傳空");
??? map.put(2, "長(zhǎng)度超過(guò)限制");
??? map.put(3, "特殊字符");
if(paramName.equalsIgnoreCase("appKey") ||paramName.equalsIgnoreCase("pId") ||? paramName.equalsIgnoreCase("appId") ||paramName.equalsIgnoreCase("userId")){
??????? map.put(4, "不存在");
??????? map.put(5, "不匹配");
??? }
else if(paramName.equalsIgnoreCase("deviceSerial")){
??????? map.put(2, "不存在");
??????? map.put(3, "不匹配");
??????? map.put(4, "離線(xiàn)的設(shè)備");
??????? map.put(5, "在線(xiàn)的設(shè)備");
??? }
函數(shù)3:getExpectedResults(String expectedResult)
參數(shù):expectedResult即APIInfo sheet頁(yè)輸入的預(yù)期結(jié)果(json格式)
作用:按順序解析Json數(shù)據(jù)的key、value, 在接口測(cè)試用例中加入對(duì)key的驗(yàn)證
函數(shù)4:GenerateApiTestCase(String moduleInfo, String testCaseName, String expectedResult, String apiUrl, String commentInfo)
參數(shù)說(shuō)明:moduleInfo:即APIInfo sheet頁(yè)輸入的模塊1信息
?????????????????? ?testCaseName::即APIInfo
sheet頁(yè)輸入的用例名稱(chēng)
?????????????????? ?expectedResult:即APIInfo
sheet頁(yè)輸入的預(yù)期結(jié)果(json格式)
?????????????????? ? apiUrl:即APIInfo sheet頁(yè)輸入的涉及接口信息
?????????????????? ?commentInfo:即APIInfo
sheet頁(yè)輸入的備注信息
作用:生成測(cè)試用例
4、編譯文件
打印日志如下
總共有1***************************************1RTMP取流并發(fā)限制獲取
{"code":"200","data":{"limittype":0,"limitnum":10,"userId":"","devsn":"","chnl":"","streamtype":2}}
#######################? key:code
#######################? key:data
#######################? key:limittype
#######################? key:limitnum
#######################? key:userId
#######################? key:devsn
#######################? key:chnl
#######################? key:streamtype
用例名稱(chēng): 接口返回包括code字段
用例名稱(chēng): 接口返回包括data字段
用例名稱(chēng): 接口返回包括limittype字段
用例名稱(chēng): 接口返回包括limitnum字段
用例名稱(chēng): 接口返回包括userId字段
用例名稱(chēng): 接口返回包括devsn字段
用例名稱(chēng): 接口返回包括chnl字段
用例名稱(chēng): 接口返回包括streamtype字段
用例名稱(chēng): 參數(shù)校驗(yàn) -
uuid-String-必填
用例名稱(chēng): 參數(shù)校驗(yàn) -
cdn-String-非必填
生成的測(cè)試用例

四、實(shí)現(xiàn)價(jià)值與不足
???????? 需要對(duì)1個(gè)復(fù)雜接口進(jìn)行充分測(cè)試,往往可能會(huì)設(shè)計(jì)超過(guò)50條的測(cè)試用例,如果只是用人工手動(dòng)輸出用例的方式,1個(gè)工作日可以完成150-200個(gè)測(cè)試用例的編寫(xiě)。
使用該工具生成測(cè)試用例已有1季度,可穩(wěn)定生成用例,生成200個(gè)測(cè)試用例的時(shí)間差不多在10分鐘左右,大大提升了測(cè)試用例編寫(xiě)的效率,可以將更多時(shí)間花在思考測(cè)試用例的設(shè)計(jì)上;
不足之處在于:該工具對(duì)于入?yún)⒌男r?yàn)還是不夠充分,對(duì)于已經(jīng)設(shè)置好邊界值的入?yún)⒖紤]不足,用例場(chǎng)景性不夠,這都是后期需要優(yōu)化改進(jìn)的地方。