阿里內部創新自動化測試工具開放啦
發表于:2017-12-06來源:云溪社區作者:doom_v5點擊數:
標簽:
阿里內部誕生一了個依賴真實流量用于自動回歸的自動化測試平臺,通過創新的自動mock機制不僅支持讀接口的回歸驗證,同時支持了寫接口驗證,在內部產生了極大價值,有價值的東西
背景
信息系統上線后通常會需要迭代升級甚至重構,如何保證被修改后系統原有業務的正確性非常重要。不復雜的業務系統通過一些常規的自動化測試工具加上人工測試可以解決,但對于業務十分復雜的系統,回歸測試將變成一項浩大的工程。
一個實際的例子:阿里巴巴作為一家以電商為核心的集團公司,交易系統和穩定性的重要性不言而喻。整個交易系統在多年的發展過程中,經歷了很多業務的上下線,維護的人員也換了一波又一波,幾乎沒有人能梳理清楚其中的業務和代碼。當它不得不面臨一次全面升級的時候,其回歸測試的困難度難以想象。因為常規的自動化測試工具需要準備測試數據、編寫腳本,因此覆蓋率不高,因此無法滿足需求重構后的回歸驗證要求。
doom平臺的出現解決了這一難題,它通過復制線上真實流量去做自動化回歸,通過它發現了很多重構帶來的bug,同時加快交易重構項目的上線進程。同時通過錄制流量作為用例來實現日常自動化回歸取代傳統編寫腳本的自動化回歸大大提升了回歸效率和覆蓋率。
平臺介紹
什么是doom平臺
doom自動回歸平臺是一個將一部分線上真實流量復制并用于自動回歸測試的平臺。 通過創新的自動mock機制不僅支持讀接口的回歸驗證,同時支持了寫接口(例如用戶下單接口、付款接口)的驗證。原理圖如下:

它與tcpcopy或者diffy的區別:tcpcopy、diffy是在應用外的網絡層實現流量錄制和回放的,它們只能實現一些只讀頁面的驗證。doom是在應用內部通過aop切面編程方式實現的流量錄制和回放功能,因此可以做到應用內部接口級別的回歸驗證,當然也支持服務級別或者http級別的回歸驗證。通過獨創的中間件級mock以及內部自定義的mock,可實現寫流量的回歸驗證以及跨環境的回歸驗證(線上引流到測試環境)。
應用場景
-
系統重構時,復制真實線上環境流量到被測試環境進行回歸,相當于在不影響業務的情況下提前上線檢測系統潛在的問題。
-
可以將錄制的流量作為用例管理起來進行日常自動化歸回。

優勢
-
低成本:無需編寫測試用例,通過流量錄制形成豐富的測試用例。
-
高覆蓋:一方面線上大量真實流量確保覆蓋率,另一方面支持中間過程的驗證,例如發送消息的內容、中間計算過程等等的全對象的對比驗證,傳統手工編寫驗證點很難實現。
-
支持寫流量驗證:(注:寫流量是指可能導致有數據變更的流量)不用擔心寫流量回放污染應用數據,支持線上引流到測試環境以及寫流量的自動化mock。
-
低應用侵入:通過隔離容器技術、字節碼級別的AOP技術、中間件級MOCK避免接入類沖突以及降低接入成本。
原理
-
如何實現回歸驗證?
對于web應用來說,請求最終都通過發起http請求方式來完成。我們假定生產環境應用會正常的響應用戶的請求,通過aop的方式將請求入參及返回結果以及執行過程中的一些快照數據例如訪問數據庫的入參和返回結果、訪問遠程服務器的入參及結果保存下來。然后將快照數據發送給測試機器(代碼發生變化的機器)完成一次回放過程。通將落庫數據、調用后臺請求的數據以及返回結果和線上真實請求發生時的數據進行全量對比,發現其中的差異,從而識別被測試系統的問題。針對后臺應用來說也是如此,只是后臺應用一般都是通過rpc請求實現,這時只要記錄rpc入參、rpc返回值以及中間快照數據用于回放即可。

-
如何保證數據庫不被污染?
mock是單元測試常用手段,用來解決接口未完成或者調不通的情況。將這個特性進行延展,在線上執行真實請求時就把寫數據庫的請求以及對外服務的訪問保存下來,在回放時當執行數據庫或者調用后臺的服務進行mock,這樣回放時不會真正的訪問數據庫,也不會真正的發起對后臺服務的調用,因此會影響業務數據,甚至可以在線下環境進行回放,因為mock數據來源于真實請求,也省去了造數據的麻煩。

-
如何實現對外系統請求的mock?
應用會通過各種各樣的中間件對外發起rpc請求,可以通過平臺配置的中間件隔離來設置,平臺客戶端會對這些中間件進行aop處理實現自動的mock,不需要人工去配置具體的rpc接口。如果不支持的中間件請聯系我們,我們會對其做適配開發。
-
如何解決回放時程序執行流程可能和線上真實流程不一致?
在生產環境程序執行時的一些內存數據狀態和回放時測試服務器的內存數據狀態往往會出現不一致,這些不一致會導致程序的執行流程不一樣。例如本機緩存、內存開關、session查詢等等。那么要如何解決呢?平臺提供了自定義mock機制,將這些會導致不一致的代碼片段進行mock。例如將緩存的get方法進行mock,那么如果線上讀緩存時有數據,那么回放時直接可以用這些緩存數據進行mock即可,確保了回放的流程和線上真實執行時一致。
-
如何解決對比時的噪音?
回放時和錄制時必然存在一些差異,例如服務器ip、時間、以及一些隨機數等等。通過兩種方式去解決:
排除法:平臺支持指定字段排除對比,將不需要的字段排除即可。
指定對比法:將關心的業務數據進對比。
如何使用
doom平臺在阿里巴巴內部,特別是一些核心系統得到廣泛使用,因此我們決定把這個產品開放出來,以云服務的形式免費提供給大家使用。doom支持 云效 上的應用直接申請使用,也支持任意能訪問公網的應用直接申請使用。
平臺文檔:接入使用指南
平臺鏈接:doom平臺
平臺開放
-
錄制數據存儲到哪里?
平臺默認將錄制數據保存到oss,也支持用戶通過擴展實現使用自己的數據存儲服務。
-
能基于doom平臺實現自己的用例管理執行平臺嗎?
doom平臺開放了流量的錄制、回放以及對比的api,有需求的用戶可以基于這些能力快速搭建一套屬于自己自動化回歸測試平臺。
原文轉自:https://yq.aliyun.com/articles/278811