接口測(cè)試思路_第1頁
接口測(cè)試思路_第2頁
接口測(cè)試思路_第3頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、你好,我覺得接口測(cè)試用例的設(shè)計(jì)方法其實(shí)和功能測(cè)試用例的設(shè)計(jì)方法是類似的,因?yàn)榻涌谑切枰獫M足需求的, 而接口測(cè)試所依賴的也是需求說明書,但是,因?yàn)榻涌跍y(cè)試畢竟是通過代碼去測(cè)試代碼,所以,為了保證覆蓋率,可能會(huì)使用到單元測(cè)試的方法,具體的測(cè)試用例設(shè)計(jì),我考慮的如下,請(qǐng)參考,如果有錯(cuò)誤,一起討論。輸入?yún)?shù)測(cè)試:針對(duì)輸入的參數(shù)進(jìn)行測(cè)試,也可以說是假定接口參數(shù)的不正確性進(jìn)行的測(cè)試, 確保接口對(duì)任意類型的輸入都做了相應(yīng)的處理:輸入?yún)?shù)合法,輸入?yún)?shù)不合法,輸入?yún)?shù)為空,輸入?yún)?shù)為 n ull,輸入?yún)?shù)超長;功能測(cè)試:接口是否滿足了所提供的功能,相當(dāng)于是正常情況測(cè)試,如果一個(gè)接口功能復(fù)雜時(shí)推薦對(duì)接口用例進(jìn)行

2、結(jié)構(gòu)劃分,這樣子用例具有更好的可讀性和維護(hù)性。邏輯測(cè)試:邏輯測(cè)試嚴(yán)格講應(yīng)為單元測(cè)試,單元測(cè)試應(yīng)保持內(nèi)部邏輯的正確性,可單元測(cè)試和接口測(cè)試界限并不是那么清楚,所以我們也可以從給出的設(shè)計(jì)文檔中考慮內(nèi)部邏輯錯(cuò)誤 的分支情況和異常;異常情況測(cè)試:接口實(shí)現(xiàn)是否對(duì)異常情況都進(jìn)行了處理,接口輸入?yún)?shù)雖然合法, 但是在接口實(shí)現(xiàn)中,也會(huì)出現(xiàn)異常,因?yàn)閮?nèi)部的異常不一定是輸入的數(shù)據(jù)造成的,而有可能是其他邏輯造成的,程序需要對(duì)任何的異常都進(jìn)行處理。具體實(shí)列參考:需求內(nèi)容:功能描述: 店鋪會(huì)有很多的評(píng)價(jià),評(píng)價(jià)分兩種類型,好評(píng),差評(píng),根據(jù)店鋪的沒個(gè)評(píng)價(jià),確定這個(gè)店鋪有多少個(gè)星。具體的要求是1. 評(píng)價(jià)分好評(píng),差評(píng)2. 連續(xù)

3、5個(gè)好評(píng)可以轉(zhuǎn)換為 1個(gè)星,有一個(gè)差評(píng),減少1個(gè)星3. 最多有5個(gè)星4. 初始星為0,最少有0個(gè)星接口設(shè)計(jì):public in terface IStoreService /*根據(jù)店鋪Id,得到店鋪的星數(shù)*paramstoreId店鋪 id*return店鋪星數(shù)*/publicintgetSotreStar(Stri ng storeId);分析過程:從需求角度分析,需要測(cè)試的點(diǎn)包括:1. 店鋪沒有評(píng)價(jià)2. 店鋪全部差評(píng)3. 店鋪全部好評(píng)4. 店鋪有差評(píng),有好評(píng)5. 點(diǎn)評(píng)評(píng)價(jià)數(shù)小于 5個(gè)6. 店鋪評(píng)價(jià)中,連續(xù)好評(píng)不夠5個(gè)7. 根據(jù)星計(jì)算規(guī)則,店鋪所得星號(hào)大于5個(gè)具體實(shí)現(xiàn):private int

4、 getStar(List<P in gJia> pin gJiaList) if (pin gJiaList =n ull ) System.out .println("評(píng)價(jià)列表不能為null");return 0;int star = 0;intpin gJiaCou nt = pin gJiaList.size();if (pin gJiaCou nt < 5) return star;int goodP ing = 0;for (int i = 0; i < pin gJiaCou nt; i+) if (pin gJiaList.get(i

5、).getP in gJiaType() = Pin gType.ng ) goodP in g+;if (goodP ing = 5) sta 葉+;goodP ing = 0;else goodP ing = 0;if (star > 0) star -= 1;if (star > 5) star = 5;return star;用例設(shè)計(jì)略測(cè)試過程:1. 分析需求,找岀被測(cè)需求測(cè)試點(diǎn):2. 分析測(cè)試點(diǎn),通過測(cè)試用例設(shè)計(jì)方法,準(zhǔn)備測(cè)試數(shù)據(jù),添加期望結(jié)果,提煉測(cè)試點(diǎn)為可執(zhí)行 測(cè)試用例常用測(cè)試用例設(shè)計(jì)方法:1. 邊界值2. 等價(jià)類3. 場(chǎng)景法4. 錯(cuò)誤推測(cè)法5. 針對(duì)參數(shù)測(cè)試good

6、Pi3. 根據(jù)測(cè)試用例,準(zhǔn)備測(cè)試數(shù)據(jù)4. 編寫測(cè)試代碼,調(diào)用被測(cè)代碼,執(zhí)行測(cè)試,斷言測(cè)試結(jié)果測(cè)試注意點(diǎn)1. 代碼測(cè)試依賴的是需求,而不是開發(fā)的代碼2. 代碼測(cè)試的測(cè)試用例和功能測(cè)試用例類似,增加關(guān)于傳入?yún)?shù)的驗(yàn)證在接口測(cè)試培訓(xùn)系列1中,描述了針對(duì)一個(gè)需求的實(shí)現(xiàn)方法,及對(duì)這個(gè)需求方法接口測(cè)試用例的設(shè)計(jì),在 本篇中,在該需求的基礎(chǔ)上再增加需求,同時(shí)將需求擴(kuò)展為一個(gè)小的項(xiàng)目,講解針對(duì)項(xiàng)目的接口測(cè)試如何 去做。需求描述:1. 增加店鋪對(duì)象,評(píng)價(jià)屬于店鋪2. 可以針對(duì)店鋪增加評(píng)價(jià),刪除評(píng)價(jià),修改評(píng)價(jià)3. 根據(jù)店鋪id獲得店鋪的星4. 根據(jù)店鋪id獲得店鋪的好評(píng)率5. 根據(jù)店鋪id獲得店鋪在所有店鋪當(dāng)中的

7、排序,排序算法是:星越多排序越靠前,如果星相等,則根 據(jù)好評(píng)率排序,好評(píng)率越高,排序越靠前,如果好評(píng)率相等,則評(píng)價(jià)越多越靠前,如果評(píng)價(jià)數(shù)相等,則默認(rèn)當(dāng)前店鋪排名靠前。實(shí)現(xiàn)思路:1. 建立一個(gè)店鋪類,具有店鋪名稱,店鋪ID兩個(gè)屬性2. 建立一個(gè)評(píng)價(jià)類,具有所屬店鋪id,評(píng)價(jià)類型,更新時(shí)間屬性3. 增加一個(gè)店鋪操作類,具有增加評(píng)價(jià),刪除評(píng)價(jià),修改評(píng)價(jià),獲取店鋪星,獲取店鋪好評(píng),獲取店 鋪排序的方法4. 建立一個(gè)數(shù)據(jù)庫,里面有兩張表,一張店鋪表,一張?jiān)u價(jià)表5. 店鋪表字段:店鋪id,店鋪名稱6. 評(píng)價(jià)表字段:所屬店鋪id,評(píng)價(jià)類型,更新時(shí)間分層開發(fā)1. DAO層:具體的對(duì)數(shù)據(jù)庫的操作 public

8、interface IPingJiaDao /插入一條記錄publicbooleaninsert(PingJia pingJia);/ 修改評(píng)價(jià)記錄publicbooleanupdate(PingJia pingJia);/ 刪除評(píng)價(jià)記錄publicbooleandelete(String pingJiaId);/得到一個(gè)店鋪的評(píng)價(jià)列表public List<PingJia> getPingJiaList(String storeId);/得到一個(gè)店鋪的好評(píng)率public double getGoodPingJiaRate(String storeId);2. Service層:具

9、體的業(yè)務(wù)邏輯層public interface IStoreService /添加評(píng)價(jià),public boolean addPingJia(PingJia pingJia);/修改評(píng)價(jià)類型public boolean updatePingJia(PingJia pingJia);/刪除評(píng)價(jià)public boolean deletePingJia(String pingjiald);/根據(jù)店鋪Id,得到店鋪的星數(shù)publicintgetSotreStar(String storeId);/得到店鋪排序位置publicintgetStorelndex(String storeId);/得到店鋪好評(píng)

10、率public double getStoreGoodRate(String storeId);代碼實(shí)現(xiàn)1. DAO實(shí)現(xiàn),使用ibatis 進(jìn)行dao的實(shí)現(xiàn)2. Service實(shí)現(xiàn),數(shù)據(jù)插入,更新,獲取,直接通過調(diào)用dao方法實(shí)現(xiàn),業(yè)務(wù)邏輯在service中實(shí)現(xiàn)可測(cè)試接口方法1. 添加評(píng)價(jià) boolean addPingJia(PingJia pingJia)2. 更新評(píng)價(jià) boolean updatePingJia(PingJia pingJia);3. 刪除評(píng)價(jià) boolean deletePingJia(String pingjiaId)4. 獲得店鋪星數(shù) int getSotreSta

11、r(String storeId)5. 得到店鋪排序位置getStoreIndex(String storeId)6. 得到店鋪好評(píng)率 int getStoreHaoPingLv(String storeId);接口測(cè)試過程1. BeforeClass注解中,做初始化相關(guān)的操作,比如需要?jiǎng)?chuàng)建服務(wù)實(shí)例:storeService = new StoreService();2. Test注解中,編寫具體的 測(cè)試用例,編寫測(cè)試用例時(shí)可用的一些技巧:a. 通過不同的接口方法參數(shù)來實(shí)現(xiàn)對(duì)不同業(yè)務(wù)場(chǎng)景的覆蓋b. 接口參數(shù)如果是基本數(shù)據(jù)類型,比如String,則需要考慮該參數(shù)是做什么用的,是否需要在調(diào)用被測(cè)方

12、法之前準(zhǔn)備相應(yīng)的數(shù)據(jù),比如,獲得店鋪星數(shù),getSotreStar(String storeId)需要的參數(shù)是String類型的storeId,我們?cè)跍y(cè)試的時(shí)候,在調(diào)用被測(cè)方法之前, 就需要先為這個(gè)storeId對(duì)應(yīng)的店鋪構(gòu)造評(píng)價(jià),來滿足對(duì)應(yīng)的測(cè)試用例。c. 接口參數(shù)如果是對(duì)象類型,則需要考慮是否可以通過獨(dú)立的方法來提取設(shè)置對(duì)象屬性 過程,而將不同對(duì)象屬性值通過方法參數(shù)傳遞,而如果對(duì)象屬性過多,則可以考慮將部分對(duì) 象屬性構(gòu)造為另外的一個(gè)對(duì)象d. 調(diào)用被測(cè)方法后,需要根據(jù)被測(cè)方法返回值,斷言被測(cè)方法是否返回期望結(jié)果,同時(shí)需要 通過數(shù)據(jù)庫驗(yàn)證e. 如果一個(gè)測(cè)試用例中,涉及到多個(gè)步驟的驗(yàn)證,則需要在

13、每個(gè)步驟后增加對(duì)應(yīng)的驗(yàn)證方法。f. 在測(cè)試用例中,針對(duì)該測(cè)試產(chǎn)生的數(shù)據(jù),需要進(jìn)行銷毀。3. AfterClass注解中,增加對(duì)數(shù)據(jù)清理及對(duì)象銷毀相應(yīng)的方法4. 關(guān)于數(shù)據(jù)庫比對(duì):可以將數(shù)據(jù)庫操作,比對(duì)的方法專門提取為一個(gè)公共類。1.什么情況下會(huì)使用mock技術(shù)1. 需要將當(dāng)前被測(cè)單元和其依賴模塊獨(dú)立開來,構(gòu)造一個(gè)獨(dú)立的 測(cè)試環(huán)境,不關(guān)注被測(cè)單元的依賴對(duì)象,只關(guān)注被測(cè)單元的功能邏輯他環(huán)境因素,調(diào)用第三方經(jīng)常會(huì)中斷或者失敗,無法對(duì)被測(cè)單元進(jìn)行測(cè)試,這個(gè)時(shí)候就可以使用mock技術(shù)來將被測(cè)單元和依賴模塊獨(dú)立開來,使得測(cè)試可以進(jìn)行下去。2.被測(cè)單元依賴的模塊尚未開發(fā)完成,而被測(cè)單元需要依賴模塊的返回值進(jìn)行

14、后續(xù)處理比如service層的代碼中,包含對(duì) Dao層的調(diào)用,但是,DAO層代碼尚未實(shí)現(xiàn)3.被測(cè)單元依賴的對(duì)象較難模擬或者構(gòu)造比較復(fù)雜比如,支付寶支付的異常條件有很多,但是模擬這種異常條件很復(fù)雜或者無法模擬,比如,查詢聚劃算的訂單結(jié)果,無法在測(cè)試環(huán)境進(jìn)行模擬2. Mock技術(shù)分類1.手動(dòng)構(gòu)造mock對(duì)象比如,可以自己寫某個(gè)接口方法的實(shí)現(xiàn),根據(jù)需要編寫返回值,測(cè)試代碼中使用該實(shí)現(xiàn)類對(duì)象缺點(diǎn):會(huì)增加代碼量,在寫mock對(duì)象代碼時(shí),有可能引入錯(cuò)誤2.使用開源代碼提供的構(gòu)造 mock方法比如easyMock,提供了對(duì)接口類的模擬,能夠通過錄制、回放、檢查三步來完成大體的測(cè)試過程,可以驗(yàn)證方法的調(diào)用種類

15、、次數(shù)、順序,可以令Mock對(duì)象返回指定的值或拋出指定異常3. EasyMock 使用1.引入 easyMock在 maven工程中,通過 pom 配置依賴關(guān)系dependency >vgroupld>org.easymock</ groupld >< artifactId >easymock </ artifactld >< version>3.0 </ version>< scope >test </ scope ></ dependency >在普通java工程中,通過添加外部包的方式2. 使用easyMock過程1. 使用EasyMock生成Mock對(duì)象;pingJiaDao = mockControl.createMock(IPingJiaDao.class);2. 設(shè)定Mock對(duì)象的預(yù)期行為和輸出;EasyMock.expect(pingJiaDao.getGoodPingJiaRate(storeld).andReturn(0.11);3. 將Mock對(duì)象切換到Replay狀態(tài);Eas

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論