一、 API測試簡介
API測試與其他測試一樣,首先要做的是把測試環(huán)境搭建好,各種必須的配置文件都準(zhǔn)備完畢,在開始測試之前確保服務(wù)器上的程序是可測的(有必要的話可以尋求研發(fā)幫助). API測試除了要測試功能以外還要測試接口。一個API或者函數(shù)可以作為一個單元,對這個單元進行單元測試,你可以用黑盒方法,也可以用白盒方法。黑盒方法就是不去看這個單元的實現(xiàn)代碼,只根據(jù)這個單元的功能說明來設(shè)計測試用例并進行測試。測試的時候你可能需要寫一點簡單的代碼來做數(shù)據(jù)準(zhǔn)備,然后去調(diào)用需要測試的接口,一般也需要寫一些代碼來接收或者驗證被測單元的輸出是否正確;白盒測試方法就是你通過分析被測單元的實現(xiàn)代碼,根據(jù)不同的測試策略(如分支覆蓋或者邏輯覆蓋等)來設(shè)計測試用例并作相應(yīng)的測試。平臺產(chǎn)品的需求很多是來自網(wǎng)站,簡而言之,平臺產(chǎn)品提供API供網(wǎng)站研發(fā)使用。我們需要測的就是這些暴露出來的API,確保這些API在功能上沒有缺陷。 API測試和一般手工測試在測試原理上是一樣的。 例如在aranda-1.1中有這樣一個需求,用戶能在線刪除自己的圖片。很簡單,正常測試流程中,我們一般這樣做,在頁面上傳一個普通圖片,然后選中該圖片,點擊刪除,最后去驗證該圖片是否被正常刪除.但是在aranda-1.1中,只能看到接口,沒有前臺頁面上傳文件,故需要寫一點代碼來模擬這個過程: public void testDeleteImage() throws Exception { 1 String path = "D:\\temp\\test.jpg"; 2 this.fileCache = new FileCache(getImageFile(path)); 3 ArandaFileRef imageRef =arandaFileService.createFile("src/source.jpg", 4 true, new MemoryInputStreamWrapper(fileCache)); 5 assertTrue(imageRef.delete()); //true 6 assertFalse(imageRef.exists()); //true } 上面的測試代碼中,第1,2,3,4行代碼所做的事情就是上傳一個圖片,第5行去調(diào)用需測試的接口,并驗證結(jié)果,第6行驗證圖片是否已經(jīng)被真的刪除。 二、 明確哪些是需要測試的API 研發(fā)的代碼中可能實現(xiàn)了很多API, 首先必須明確哪些需要測,哪些不必要測; 哪些這個迭代不測,下一個迭代再測; 有一些接口是可能就直接調(diào)用另外一個接口,這些接口有沒有必要測等。這些問題最好在提交測試之前根據(jù)需求和計劃跟研發(fā)溝通清楚, 這些沒有確定清楚直接導(dǎo)致漏測接口或者測了沒必要的接口(無用功) 。 三、 明確每個API實現(xiàn)的功能和設(shè)計TC 在確定了哪些接口需要測試之后,就必須明確每個接口實現(xiàn)的功能及接口的參數(shù)、返回值的意義等。理解這些接口參數(shù)的含義,這些參數(shù)將是設(shè)計TC的維度。采用黑盒測試的方法,等價類劃分,邊界值分析,錯誤推測等常用方法均可使用。簡單的說,這些參數(shù)可以看成一個一個輸入框,類似網(wǎng)頁手工測試一樣,將準(zhǔn)備數(shù)據(jù)輸入即可。用黑盒的方法來為API設(shè)計TC和網(wǎng)頁手工測試很類似,無非就是把參數(shù)看成輸入框而已。但是API測試在設(shè)計TC的時候還可以“偏白”一點,就是直接去看接口的實現(xiàn)的代碼,特別是一些異常情況的處理,一般程序在異常處理上總是相對于正常情況要脆弱一些,然后對前面用黑盒的方法設(shè)計好的TC進行一些補充。 值得注意的是,1)TC設(shè)計的時候盡量詳細,粒度盡量的小,測試代碼都是類似的,可能僅僅是傳入的參數(shù)不一樣,而測試校驗的工作是計算機做的,所以一般情況下針對某個接口,10個TC和20個TC跑的花費是差不多的,但是測試粒度方面和代碼覆蓋率方面可能就增加了不少。2)TC也是要進行維護的,在測試執(zhí)行階段,如果發(fā)現(xiàn)需要補充TC,最好不要在現(xiàn)有的測試代碼上改,要新加代碼,同時在TC文檔中也同步更新。如果是TC的缺陷,才去修改對應(yīng)的代碼,并在TC文檔中做更新。3)在設(shè)計TC文檔的時候,測試步驟的粒度最好能夠細到每一步需要調(diào)用哪個函數(shù)或接口,有點類似偽代碼的風(fēng)格,這樣在寫代碼的時候就不用怎么思考,僅僅去實現(xiàn)它。 四、 依TC寫代碼 在aranda-1.1中,每個測試類去繼承AbstractDependencyInjectionSpringContextTests,SpringContextTest是 junit的擴展。注入需要的類(spring IoC),然后按照TC上的測試步驟的描述,一步步完成代碼的實現(xiàn),照葫蘆畫瓢就行。開始運行調(diào)試??梢詤⒁娤旅娴睦樱▓D1和圖2連起來),TC文檔可以寫在javadoc里面。(注:寫代碼最好了解一下spring IoC和Junit)。 圖1:一些初始化 圖2:依TC寫代碼 附:Debug及eclipse快捷鍵 調(diào)試方式:打斷點 1.Step Into (also F5) 跳入 2.Step Over (also F6) 跳過 3.Step Return (also F7) 執(zhí)行完當(dāng)前method,然后return跳出此method 如果一行有很多方法, 當(dāng)?shù)谝淮伟碏5鍵就跳入這一行第一個方法,F6一步一步調(diào)試,F7跳出這方法. 當(dāng)?shù)诙伟碏5鍵就跳入這一行第二個方法,F6一步一步調(diào)試,F7跳出這方法. 以此類推.想進入這一行第幾個方法,就按幾次F5和F7. 詳細參見:http://www.ibm.com/developerworks/cn/opensource/os-ecbug/index.html?S_TACT=105AGX52&S_CMP=techcto Eclipse快捷鍵: Ctrl+1 快速修復(fù)(最經(jīng)典的快捷鍵,就不用多說了) Ctrl+D: 刪除當(dāng)前行 Ctrl+Alt+↓ 復(fù)制當(dāng)前行到下一行(復(fù)制增加) Ctrl+Alt+↑ 復(fù)制當(dāng)前行到上一行(復(fù)制增加) Alt+↓ 當(dāng)前行和下面一行交互位置(特別實用,可以省去先剪切,再粘貼了) Alt+↑ 當(dāng)前行和上面一行交互位置(同上) Alt+← 前一個編輯的頁面 Alt+→ 下一個編輯的頁面(當(dāng)然是針對上面那條來說了) Alt+Enter 顯示當(dāng)前選擇資源(工程,or 文件 or文件)的屬性 Shift+Enter 在當(dāng)前行的下一行插入空行(這時鼠標(biāo)可以在當(dāng)前行的任一位置,不一定是最后) Shift+Ctrl+Enter 在當(dāng)前行插入空行(原理同上條) Ctrl+Q 定位到最后編輯的地方 Ctrl+L 定位在某行 (對于程序超過100的人就有福音了) Ctrl+M 最大化當(dāng)前的Edit或View (再按則反之) Ctrl+/ 注釋當(dāng)前行,再按則取消注釋 Ctrl+O 快速顯示 OutLine Ctrl+T 快速顯示當(dāng)前類的繼承結(jié)構(gòu) Ctrl+W 關(guān)閉當(dāng)前Editer Ctrl+K 參照選中的Word快速定位到下一個 Ctrl+E 快速顯示當(dāng)前Editer的下拉列表(如果當(dāng)前頁面沒有顯示的用黑體表示) Ctrl+/(小鍵盤) 折疊當(dāng)前類中的所有代碼 Ctrl+×(小鍵盤) 展開當(dāng)前類中的所有代碼 Ctrl+Space 代碼助手完成一些代碼的插入(但一般和輸入法有沖突,可以修改輸入法的熱鍵,也可以暫用Alt+/來代替) Ctrl+Shift+E 顯示管理當(dāng)前打開的所有的View的管理器(可以選擇關(guān)閉,激活等操作) Ctrl+J 正向增量查找(按下Ctrl+J后,你所輸入的每個字母編輯器都提供快速匹配定位到某個單詞,如果沒有,則在stutes line中顯示沒有找到了,查一個單詞時,特別實用,這個功能Idea兩年前就有了) Ctrl+Shift+J 反向增量查找(和上條相同,只不過是從后往前查) Ctrl+Shift+F4 關(guān)閉所有打開的Editer Ctrl+Shift+X 把當(dāng)前選中的文本全部變味小寫 Ctrl+Shift+Y 把當(dāng)前選中的文本全部變?yōu)樾? Ctrl+Shift+F 格式化當(dāng)前代碼Ctrl+Shift+P 定位到對于的匹配符(譬如{}) (從前面定位后面時,光標(biāo)要在匹配符里面,后面到前面,則反之) |
|