說(shuō)到API測(cè)試,很多人會(huì)問(wèn)伐庭,為什么要自己coding粉渠,集成進(jìn)Xebium分冈,用Postman或者其他HTTP接口測(cè)試的工具不就可以了嗎?老實(shí)說(shuō)霸株,我之前也用這些來(lái)做測(cè)試雕沉,但隨著項(xiàng)目發(fā)展,你要維護(hù)的內(nèi)容越來(lái)越多去件,尤其不便的是坡椒,一套隨時(shí)可用的數(shù)據(jù)和判斷依據(jù)的變動(dòng),很讓人抓狂尤溜。為什么不和db和界面上抓取的內(nèi)容來(lái)當(dāng)作API接口的輸入輸出來(lái)動(dòng)態(tài)引入呢倔叼?而且一套系統(tǒng)進(jìn)行管理也更讓人理解,更方便易用宫莱,由于是web界面丈攒,測(cè)試做完腳本,程序員在開(kāi)發(fā)期也可以直接當(dāng)作調(diào)試使用授霸,如果是了解腳本的PM巡验,自己可以先寫(xiě)輸入輸出,敏捷的目標(biāo)不就可以更進(jìn)一步嗎碘耳?
說(shuō)做就做显设,同樣的利用SLIM的特點(diǎn),只要自己寫(xiě)相關(guān)的測(cè)試中間件的類(lèi)辛辨,實(shí)現(xiàn)http或者h(yuǎn)ttps發(fā)送請(qǐng)求捕捂,構(gòu)造http頭,cookie部分和body斗搞,返回的response利用JsonPath或者XPath來(lái)解析判斷返回?cái)?shù)據(jù)的內(nèi)容或者順序結(jié)構(gòu)指攒,這樣就能把API測(cè)試集成進(jìn)來(lái)。
從API調(diào)用的知識(shí)點(diǎn)來(lái)說(shuō)僻焚,自然要熟悉HTTP請(qǐng)求的相關(guān)知識(shí)幽七,一般來(lái)說(shuō)網(wǎng)絡(luò)上的請(qǐng)求都是通過(guò)TCP或者UDP發(fā)送,商用的web都通過(guò)http/https協(xié)議來(lái)發(fā)送的溅呢,游戲很多用UDP協(xié)議發(fā)送,這些知識(shí)留待大家自己摸索猿挚。
我們直接用代碼來(lái)說(shuō)話(huà):
public class HttpUtil {
? ? public HttpUtil(String method, String url, Map headers) {}? //構(gòu)造http咐旧,method=GET||POST (其他像PUT或者DELETE幾乎不用)
? ??public void setHttpHeaders(Map headers) {} //如果構(gòu)造沒(méi)有傳值的話(huà),也可以在之后傳绩蜻,map的key-value同http的頭定義(Content-Type必須要有)
? ??public void setHttpCookies(Map cookies) {} //其實(shí)這段也可以放入http head铣墨,如果要區(qū)分也可以單獨(dú)傳入
? ??public void setHttpBody(String body) {} //根據(jù)頭中定義的contenty-type來(lái)傳入body數(shù)據(jù)發(fā)送到后端
? ??public int excute() throws Exception {} //http請(qǐng)求發(fā)送,返回的是狀態(tài)碼办绝,如200伊约,404等
? ??public String getResponseContent() {} //返回response內(nèi)容
? ??public String getCookieValueByKey(String key) {} //根據(jù)key返回cookie中的value
? ??public String getHeadValueByKey(String key) {} //根據(jù)key返回head中的value
? ??public String getJpathValues(String jpath) {} //根據(jù)輸入的1或多個(gè)JsonPath(姚淆,分隔)來(lái)返回具體值
? ??public int getCountInJSON(String jpath) {} //JsonPath的length()函數(shù)返回list個(gè)數(shù)
? ??public String getXpathValues(String xpath) {} //根據(jù)輸入的1或多個(gè)XPath(,分隔)來(lái)返回具體值
}
具體的代碼實(shí)現(xiàn)可以直接看代碼屡律,Xebium中直接調(diào)用如上方法腌逢,設(shè)置參數(shù)或者返回?cái)?shù)據(jù),來(lái)判斷內(nèi)容的正確性超埋。具體例子如下(點(diǎn)導(dǎo)航欄Test可以執(zhí)行用例):
上述用例中搏讶,note一行執(zhí)行時(shí)會(huì)忽略,相當(dāng)于注釋行霍殴。
依然把源碼貼出媒惕,大家可以參考,如果需要支持更多的HTTP Method或者需要實(shí)現(xiàn)什么特定的功能来庭,可以直接修改實(shí)現(xiàn):
https://pan.baidu.com/s/1WX6ESXLKmvruOZYvgH_GSA
其實(shí)照這個(gè)測(cè)試集成的思路妒蔚,會(huì)發(fā)現(xiàn),任何的測(cè)試工作只要可以用代碼來(lái)實(shí)現(xiàn)調(diào)用的其實(shí)都可以集成進(jìn)Xebium月弛,一個(gè)統(tǒng)一的測(cè)試環(huán)境不僅使流程變得更為規(guī)范肴盏,同時(shí)也讓腳本和數(shù)據(jù)的維護(hù)變得容易,也節(jié)約大家的時(shí)間(有些公司尊搬,本身的測(cè)試系統(tǒng)一套一套的叁鉴,如果是新人摸索這些系統(tǒng)并且日常工作中進(jìn)行切換,那是相當(dāng)?shù)暮臅r(shí)耗力)佛寿。
API接口的應(yīng)用非常廣泛幌墓,如果你用RabbitMQ,Kafka等冀泻,甚至于平時(shí)的網(wǎng)頁(yè)常侣,只要是依賴(lài)網(wǎng)絡(luò)的HTTP或者HTTPS協(xié)議,都可以適用弹渔。
另外胳施,大家如果用的不順手,自己開(kāi)發(fā)自己的套件肢专,再做一些小工具做解析舞肆,轉(zhuǎn)碼等等的事,讓事情更簡(jiǎn)單博杖,使用更方便椿胯,這才是測(cè)試開(kāi)發(fā)更需要急迫去做的事。