去年咱們公司開發了一款電商產品,這是一款集成了app,web端的b2b2c的電商平臺,而咱們在開發web端的時候也採用了先後端分離的開發模式,那麼web端加app端產生了大量的接口,這些接口須要管理維護,須要文檔編輯,最麻煩的是,由於咱們的業務比較複雜,有很多業務場景須要好幾個接口聯調,可是又沒有合適的接口自動化工具,因而bug頻出,先後端開發人員也爲此起了很多爭執,我做爲團隊負責人,決定要改變這一現狀。javascript
在參考了不少同類產品後,咱們決定選用SBDoc來作爲咱們的接口管理平臺,它不只集成了文檔編寫,團隊協做,接口運行,mock數據等功能,還有兩個功能是讓咱們團隊大大的提升工做效率的。一個是接口的自動化生成,能夠根據接口數據自動生成文檔信息,還有一個即是本文分享的重點,接口的自動化測試!java
傳統的接口測試每每是接口一個個運行,觀察返回數據是否顯示正確,而後再用這個接口的出參手動的填入下一個接口的入參,這樣的測試流程不只很繁瑣,效率低下,遇到業務場景比較複雜的很容易發生錯誤。因此咱們須要一個自動化測試的解決方案,能夠用最少的代價作最有效率的事情。 以SBDoc爲例,假設咱們的工程有如下四個接口:git
那麼如今有這樣一個業務場景,我須要先登陸,而後獲取報名訂單列表,而若是要登錄的話又必需要獲取圖片驗證碼而後把驗證碼輸入到登錄接口的入參裏,若是這樣一個業務場景由人工手動來作的話是比較繁瑣的,接口以前的信息須要來回切換,那麼用SBDoc如何來作自動化測試呢?github
咱們在SBDoc裏切換到測試欄目下,新建訂單模塊,而後新建訂單列表測試業務,在訂單列表下新建一個測試用例,就叫獲取訂單列表,以下圖所示:web
而後咱們去編寫這個測試用例,SBDoc的測試用例用javascript編寫便可,js自己仍是比較簡單,學習一下很快就能上手,以下圖:後端
代碼提取出來以下:app
var a=獲取驗證碼;前後端分離
var res=await a();異步
var text=await input("aaa",res.data);函數
log(text);
a=登陸;
var res=await a({
body:{
"code":text
}
});
var c=報名訂單列表;
res=await c();
log(res.data.code);
return true;
獲取驗證碼,登錄,報名訂單列表都是咱們點擊插入接口按鈕插入的接口,插入頁面以下:
上圖中baseurl爲defaultUrl表明使用默認的baseurl運行,不然能夠選擇咱們想要的baseUrl,query,header裏面若是有參數,咱們能夠設置參數的值,好比登錄接口的插入頁面:
var res=await a();
這一行表明咱們執行獲取驗證碼的接口,由於這是一個異步接口,因此須要es7裏面的新語法await來等待這個異步請求的數據返回。
var text=await input("aaa",res.data);
res.data的值就是驗證碼圖形數據,input函數是一個用戶輸入的函數,第一個參數是顯示的title,第二個參數是須要在輸入框中顯示給用戶的內容,這裏就是把返回的驗證碼圖片展現給用戶看,而後用戶手動輸入驗證碼,同時程序等待輸入返回,返回值賦值給text變量。
log(text);
log是一個輸出函數,只有一個參數,是須要輸出的內容。
a=登陸;
var res=await a({
body:{
"code":text
}
});
這段代碼就是調用登錄接口,將text的內容做爲登錄接口的body裏面的code字段的入參,而後等待接口返回結果。
var c=報名訂單列表;
res=await c();
log(res.data.code);
return true;
這一段代碼就是調用報名訂單列表,而後將返回數據中的code字段打印出來,return true表明這個測試用例已經過,return false表明未經過,return或者沒有return語句表明這個用例結果未斷定。
最後,不要忘記在每一個語句結束的地方以分號結尾,這個很是重要!
ok,咱們寫完後還有一件事情不要忘記了,就是設置defaultUrl,它會做爲每一個接口的baseUrl來運行接口,咱們點擊這個按鈕便可選擇:
設置完成後,點擊用例編輯頁面的運行按鈕,會出現下圖所示:
這就是input彈出的輸入框,圖片展現的咱們請求驗證碼接口返回的驗證碼圖片,咱們輸入pppx驗證碼,而後點擊肯定,測試會自動按照流程走下去,當彈出運行完成的提示框時,咱們看下輸出標籤頁:
整個用例的詳細輸出信息都會完整的打印出來。
那麼若是接口須要文件上傳,SBDoc可不能夠實現呢,答案徹底是能夠的,咱們新建一個用例:
而後編輯測試用例的代碼:
var a=上傳頭像;
var res=await a();
log(res.data.data);
return true;
ok,點擊運行,便會彈出一個文件選擇頁面,以下圖:
咱們選擇須要上傳的圖片,點擊肯定,等彈出運行完成提示框,咱們看下輸出標籤頁的內容顯示:
已經執行成功,同時也打印出了新上傳圖片的路徑地址!
那麼不一樣的測試用例之間能不能聯調呢,是徹底能夠的,咱們能夠在一個用例裏面插入另外一個用例,而後用內部對象global來在用例之間傳遞數據,好比咱們能夠把獲取訂單列表這個用例改寫下:
global["name"]="sx";
var c=上傳頭像;
res=await c();
return true;
把上傳頭像這個用例也改寫下:
var a=上傳頭像;
var res=await a();
log(global["name"]);
return true;
而後運行獲取訂單列表這個用例,輸入以下所示:
說明用例是能夠嵌套運行的,而且能夠傳遞數據。
SBDoc還能夠批量運行測試用例,以下圖:
如上圖所示,勾選你想要運行的測試用例,而後點擊運行,即可以批量的運行測試用例,且測試用例的返回狀態和輸出都會實時的保存起來並顯示,以下圖:
這樣不管是對於先後端開發,仍是測試人員,都很是方便作迴歸測試啦!
以上都是SBDoc功能的冰山一角,有了SBDoc,團隊的溝通和開發效率都提高了不少。另外,SBDoc是免費開源的,不少團隊擔憂接口的保密性,所以SBDoc提供了簡單完善的本地部署功能,可是功能和線上是如出一轍,最重要的是你能夠根據團隊的需求自由的定製SBDoc,這些都是徹底能夠的!
目前SBDoc已經更新到了2.0.3版本,被衆多大中型互聯網產品公司所使用,不管是穩定性仍是可持續性等方面都是有保障的,感興趣的朋友能夠去產品官網看看:http://sbdoc.cn 碼雲地址:https://git.oschina.net/sx1989827/SBDoc Github地址:https://github.com/sx1989827/SBDoc