介面自動化測試(七):數據驗證專項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:測試開發棧 |