Google 測試工程師的日常:構建測試基礎設施

人生沒有A/B測試,做產品可以。

 

正文:

在最近的文章 What Test Engineers do at Google 中,我們討論了測試工程師們在 Google 做什么的問題。 這篇文章我會講 Google 的測試工程師工作的另一方面:建立和改進測試基礎設施,提高工程師的生產力。

google

更新老舊的系統讓新工具成為必要

幾年前,我加入了一個致力于以一種新型工具來取代舊系統的工程師團隊。構建替代系統需要花費很長的時間,在保證原有的遺留系統保持運作的同時,建造替代系統還不能影響到外部用戶,所以我們不得不添加一些新功能。

 

原來的系統是如此的復雜和脆弱,以至于工程師們需要花費大部分時間來分類和修復各種漏洞,并做各種測試,導致只有很少的時間來實現新功能。 重寫的目標是從舊系統中學習,并構建更易于維護和擴展的新系統。 作為團隊的測試工程師,我的工作是理解導致高維護成本的原因,并找出改進方法。 我發現了兩個主要原因:

 

緊耦合和抽象不足使得單元測試非常困難,結果,大量的端到端測試成為了對該代碼的功能測試。

 

用于端到端測試的基礎設施沒有很好的方法來為這些服務創建和注入模擬, 結果就是,這些測試不得不為所有這些外部依賴關系運行大量服務器,從而導致了非常龐大和瑣碎的測試,但我們現有的測試執行基礎設施還無法妥善地處理這些問題。解決方案探索

 

起初,我嘗試了是不是能把大型測試分成更小的測試,從而依靠較少的外部服務測試特定的功能,但結果證明是不行的,因為結構不良的遺留代碼讓這種方法需要團隊配合來實現,我們需要在重構整個系統及其依賴項的條件下進行,而不僅僅是我所在的團隊負責的部分。

 

在第二種方法中,也是同樣著眼于大型測試,并試圖模擬不需要測試功能的服務, 結果證明這也是非常困難的,因為依賴性經常改變,并且單獨的相關性很難在200多項服務里跟蹤。 最終,這種方法只是把工作從維護測試代碼轉到了維護測試依賴性和模擬上。

 

我的第三個也是最后一個方法,如下圖所示,讓小測試更有力。 在典型的端到端測試中,該客戶端通過 RPC 遠程調用若干個服務,這些服務接著再讓 RPC 調用其他服務。 包括客戶端和所有傳遞閉包的后端服務一起形成了一個巨大的依賴圖(不是樹狀圖!),這些都必須在端到端測試中運行,新模型改變了測試客戶端和服務集成的方式。不再是運行客戶端通過輸入來以某種方式觸發RPC調用,我們為 PRC 存根方法調用的代碼編寫單元測試。存根本身是用一個常見的模擬框架(如 Java 中的 Mockito )來模擬的。 對于每組這樣的測試,第二個測試數據常常傾向于說明模擬的數據對實際服務“有意義”,這也是通過單元測試完成的,通過重啟客戶端,使用與 RPC 模擬相同的數據來調用 RPC 處理程序服務。

這種集成測試模式適用于任何 RPC 調用,包括從一個后端服務器到另一個后端執行的 RPC 調用以及前端客戶端調用。 當一致地應用這種方法時,更小的測試以及精準的集成性能測試讓我們受益很大,并確保測試的性能是“真實的”。

 

為了找到這個解決方案,我建立,評估和舍棄了很多原型。 雖然對這種方法的理論驗證只用了一天的時間,但我和另一個工程師花了一年時間才讓它變成可用的成品。

應用

當看到新框架從他們的測試中移除了大量的樣板代碼時,工程師們很快接受了新的解決方案。 為了進一步推動其采用,我與工程團隊組織了多天的活動,專注于遷移測試用例。 將所有現有的單元測試遷移到新框架,縮小覆蓋差距,并創建驗證模擬的新測試,這個過程花了好幾個月的時間。 一旦轉換了大約80%的測試,我們就開始比較新測試和現有端到端測試的效果。

 

效果非常明顯:

新的測試與端到端測試一樣可以有效地發現漏洞。

相比于端到端測試的30分鐘,新測試在大約3分鐘內即可運行。

客戶端測試的不確定性是0%。驗證測試的不確定性比端到端測試要低,并且永遠也不會更多。

 

此外,新測試是單元測試,因此你可以在集成開發環境(IDE)中運行它們,并逐步運行測試代碼來 debug 。 這些結果讓我們很少再運行端到端測試,端到端測試現在只在檢測交互服務的錯誤配置時運行,而不是用它來做功能測試。

 

構建和改進測試基礎設施以幫助工程師提高工作效率是測試工程師在 Google 做的很多事情中的一件。 從需求分析收集一直到完成項目,實施這個項目讓我有機會設計和實現很多原型,推動解決方案的全面實施,帶領工程團隊采用新框架,并把整合過的工程師的反饋和實際測量應用于工具的持續改進。

 

本文翻譯自:testing.googleblog.com/2016/11/what-test-engineers-do-at-google.html

 

吆喝科技:國內唯一同時支持前端(Web/H5、iOS、Android)及后端(Node.js、PHP、Java 等) A/B 測試服務的專業 SaaS 平臺。支持線上灰度發布、多維度數據統計分析、科學的流量分配系統、一鍵發布新版本無需應用市場審核、定向測試。

 

用數據幫助用戶優化產品,提升轉化、留存和你想要的一切。 AppAdhoc 用數據驗證最佳方案,提高產品設計、研發、運營和營銷效率,降低產品決策風險。

 

5158 Views
即刻實踐文章理論 A/B測試 灰度發布 產品優化 免費申請
Please wait...

訂閱我們

對于每位訂閱讀者,每兩周,吆喝科技會為您發送4篇精選文章,可能是最新的A/B測試實踐,也會是你所期待的增長干貨。
qq宠物捕鱼大师 360北京快乐8 时时彩投注技巧 江苏快三计划 7分前开的天津时时彩 云南绿色三张牌 韩国黑工干什么赚钱 请查黑龙江p62开奖公告 山东十一选五开奖走势 超级大乐透奖金怎么算 达达配送和蜂鸟配送哪个赚钱