當前位置:
首頁 > 最新 > 介面自動化測試(七):數據驗證專項2

介面自動化測試(七):數據驗證專項2

上一章節給大家分享了JSON驗證的思路和方法,在最後還留了幾個問題,今天的內容就主要圍繞實際寫代碼時可能遇到的問題而展開。

疑問1:數據驗證和之前的HTTP請求怎麼(更好的)結合起來?

將響應結果(HttpResponse對象或者字元串)作為參數傳入即可,新建一個結果驗證的ResponseChecker類,具體實現參看下面代碼:

註:上面的HttpResponse 參數也可以轉成String傳入。

封裝好了上面的ResponseChecker類,下面我們就寫個測試方法將請求和驗證流程跑一下,看下效果:

下圖是運行的效果:

疑問2:預期數據還有其他管理方式嗎?

這個問題顯而易見了,為了方便演示,所以數據都寫在測試方法中,實際項目中,你可以將預期數據放在文件(txt、json、yaml、properties等等)、excel、資料庫等:

1、可以按某個規則將數據寫在文件或exce中,對比的時候將數據再讀出,解析成我們需要的格式即可;

2、更推薦在資料庫的處理,實際項目中,大都我們的數據來源就是在資料庫(Mysql、Oracle、HBase……甚至緩存資料庫像Redis等等),以Mysql為例,我們可以通過Spring + Mybatis框架將資料庫的數據轉成Bean(也就是POJO),然後再將bean轉成Map,然後再用上面的封裝的ResponseChecker來對比驗證即可。

到這一層次對代碼的要求就更高了,除了Java和資料庫基礎,Spring、MyBatis等相關框架也需要了解及應用,不過還是那句話,根據自己的實際情況來,先實現基礎的,再研究複雜的~

註:由於這一部分涉及的內容及代碼較多,在本章節就不演示和繼續深入了,後面可以再起個章節來探討。

疑問3:既然類型不好處理,能把Map中的value全部當String處理嗎?

答案當然是肯定的,但還是得根據實際情況和測試要求來,比如我要驗證的數據只需要考慮值的正確性就行,類型無關緊要,那當然轉成String最省事了。如何處理?基於上面問題1中的代碼,將dataCheck()方法中預期與實際數據對比時,都轉成String即可(String.valueOf(obj)),關鍵代碼如下:

疑問4:如何對比完再中斷測試?

前面章節有上機練習過的童鞋,肯定會遇到這個疑問,有時候我們的對比數據Map中包含了很多key-value對,但並不想在第一個對比不通過時就中斷了測試,還想看到後面的對比情況,這時候我們如果直接用Junit或TestNG的Assert類去對比,就直接中斷了,那麼需要我們稍微改進一下這個Assert.assertEquals()方法,我們發現失敗時拋出的Error:java.lang.AssertionError,將這個Error捕獲拋出即可,看代碼實現:

然後又有問題了,這樣全部捕獲了,最後怎麼讓判斷測試是pass還是fail,請參看疑問1中dataCheck()方法的代碼,對於循環中的每一次對比都會記錄對比狀態flag,最後再來一次中斷測試:Assert.assertEquals(true,flag);

疑問5:其他類型的數據如何驗證?

這裡都是對JSON數據的驗證,那麼其他類型如何驗證?上一篇文章發出去之後,有大神提過,那就在這裡借用並補充下思路:

1、text,直接驗證或使用正則表達式去驗證;

2、JSON,跳過了;

3、XML,轉成JSON驗證或使用XPATH驗證;

4、binary,這一類基本是文件類型,驗證文件的MD5值即可;

擴展

上面把絕大部分可能遇到的問題,都解答了,祝大家玩的愉快~

那麼還會有問題嗎?

不知道大家有沒有發現,前面的驗證都是調用Assert.assertEquals()來進行equals對比,也就是完全匹配,可是我們有時候想要驗證部分匹配,比如:startsWith、endsWith、contains和相似驗證等,那麼腫么辦?這裡繼續挖個坑,有興趣的童鞋可以先自己想想怎麼處理這種情況,此外,面試時也可以將這個問題作為介面自動化測試的題目,考察面試者的編程基礎和解決問題的能力……

【下章節預告】:介面自動化測試(八):測試用例管理


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 測試開發棧 的精彩文章:

TAG:測試開發棧 |