1. 程式人生 > >淺談接口Diff測試

淺談接口Diff測試

unittest load 錯誤信息 data 數據格式 padding weixin 細節 比對

淺談接口Diff測試

轉自:https://mp.weixin.qq.com/s/6H-AGaqpwf47gcxs2Sw9fQ

所有的手工CASE和自動化CASE都跑了,上線為啥還經常有問題呢?

服務端語言由PHP語言改成GO了,原來的接口邏輯我又不了解,怎麽測試?

測試環境測的好好的,上線後由於開發部署的版本問題導致的事故,開發非要說是我漏測,這鍋怎麽甩?

別急,嘗試下接口Diff測試...

接口Diff測試,簡單來說就是比對相同接口在不同版本/不同環境下面的返回內容是否符合預期。對於日常叠代的接口來說,Diff測試是我們接口基本功能測試的有效補充,因為采用的是自動化的手段,它可以利用線上大量的請求日誌在新舊兩個版本中進行回放,而我們手工/自動化的接口回歸往往只局限於少量的測試數據,很難覆蓋到大量的、在生產環境真實會發生的異常請求數據。

如果你曾有過大量的接口測試實踐,相信對上面的說明會深有感觸,單純的依靠有限的CASE進行接口功能覆蓋,上線後或多或少還是會發現一些異常。過多的美言我們不再累述,下面我們就一起看下實現思路和主要的實現細節吧。

實現思路

其實呢,整體思路比較簡單,見下圖:

技術分享圖片

用Unittest做過接口自動化的同學看上圖是不是感覺很熟悉?沒錯!接口Diff測試和接口自動化用的就是同一套東東。區別在於,Diff測試需要同時向兩套環境發相同的接口請求,拿到返回後進行比較(上圖中的“主要函數:json遞歸比較”就是實現比較功能的);另外,優化了常用的HtmlTestRunner測試報告,采用了更加美觀的BeautifulReport報告模板。

主要實現細節

項目的目錄結構

技術分享圖片

  • config—接口請求地址維護

  • data--接口請求數據(線上回放日誌存放)

  • logs--項目日誌文件

  • testCase—unittest組織的接口CASE

  • testReport—測試報告存放

  • utils—工具、公用方法存放

測試報告

技術分享圖片

我們從測試報告往回說。一份“美觀、清晰”的測試報告,往往會讓測試工作顯得更加專業。因此,項目中報告部分采用了BeautifulReport(html模板及部分細節有改動),BeautifulReport是一套開放源碼的報告工具,此部分有以下幾點說明:

1. BeautifulReport可從https://github.com/TesterlifeRaymond/BeautifulReport 上面下載

2. 建議把該工具放到項目目錄下進行調用,方便維護和擴展,例如我就放到了util目錄下。

3.BeautifulReport在代碼中調用類似HtmlTestRunner,需要傳入待執行的測試用例集,如下圖

技術分享圖片

4. 對於失敗的CASE,對應的結果下面也有清晰的錯誤原因,方便問題定位。

測試用例組織

技術分享圖片

測試用例部分需要說明的:

1. 建議每個接口單獨一個.py文件,這樣加上多線程可以支持同時跑,提高效率

2. 用例采用的是數據驅動方式,數據放在csv文件中(關於數據驅動網上有很多例子)

3. Diff測試有一項重要的工作就是兩個接口返回值的比對,現在多數http接口數據格式都采用json。因此,需要實現個簡單的json比對的方法,部分代碼如下(當然JSON比較網上也有很多例子可以參考)

技術分享圖片技術分享圖片

4. 上面代碼中帶有HTML標簽的提示信息,完全是為了優化測試報告中的錯誤信息。否則比對結果看起來比較雜亂。

其它細節

拿到線上接口請求日誌,用腳本簡單處理下,只保留請求參數部分。

其它,其它….就沒什麽了。

是不是很簡單?即使作為一個新手,只要有一定的python基礎。熟悉下uinittest、request,網上load下BeautifulReport,找一個json比對算法,基本上就搞定了。

總結

我們來回答下開頭的三個問題:

第一個,設計CASE時考慮的異常與實際線上大量的請求數據比,難免會有想不到的。無論是功能還是性能測試,最接近實際用戶場景的測試,才是最好的測試。

第二個,系統那麽龐大,沒有人能把細節都了如指掌,更何況你可能還是團隊的新人、抑或項目之前沒有任何資料積累。這種情況下,diff測試效果更明顯,起碼更高效。

第三個,把CASE數據、日誌、報告亮出來,讓開發把鍋取走.

淺談接口Diff測試