非碼用 Zadig 實現15 萬家門店周發布 7 次
我們需要非??焖俚牡澴?,客戶爸爸說明天上,通宵熬夜也要完成目標,一周 7 次迭代也是常有的事:沒有 Zadig, 我們的自動化測試不可能做起來,更不可能滿足客戶的需求。有了 Zadig 的環境治理能力,自此我們的開發專心做 coding,環境構建部署交給 Zadig;測試專心寫用例,環境資源交給 Zadig;運維專心做維護,服務管理交給 Zadig;不僅大大縮減了我們在上線前的迭代效率,穩定的環境也提供了大家對上線質量信心在使用 Zadig 的 2 年中,我切身感受到這個產品的前瞻性,是非常具有創新性的產品,可以說給整個行業帶來了新的 軟件交付 3.0 時代。Zadig 已經開源,相信會有更多企業感受到其魅力!
非碼科技質量部技術負責人:錢娟娟
寫在前面
非碼是為新零售行業的每一個商家提供解決方案,面對的客戶是每一個開門做生意的門店。
你可能沒聽說過非碼,但你一定聽說過:
對!從蜜雪冰城到麥當勞,從老鄉雞到星巴克,他們都是非碼的客戶!
你也看到了,非碼服務的客戶大多是一線標桿商戶,為了吸引消費者,每季更新新品菜單、每個節日花樣大促、會員節優惠狂歡、緊跟熱點的游戲上線等等都是非常經典的營銷。為了幫助客戶達成市場營銷策略,我們需要非??焖俚牡澴?,客戶爸爸說明天上,通宵熬夜也要完成目標,一周 7 次迭代也是常有的事。
同時,因為常常有火爆的活動引流,高并發是我們經常面臨的真實場景。所以在上線之前,除了保障功能可用性,系統穩定性也是我們非常重要的指標,在大型的活動,如為了保障我們其中一個大客戶的 88 會員節活動,我們甚至會提前三個月做準備,包含功能迭代封版、系統調優、高可用測試、全鏈路性能測試,使得服務單接口的性能指標要達到過萬的并發能力。
非碼業務架構概圖:
要知道非碼面對的商家,在系統中可能是一串代碼一條數據,但門店店員直面消費者,系統出了任何問題都會被當面質問。我們自己在生活中也是一個個消費者,試問你開開心心去門店消費,打開手機下單卻提示你「系統異?!?、明明有優惠券卻使用不了、付了錢店家卻說沒收到訂單......,想想都覺得美好的心情被破壞。可想而知,門店的壓力非常之大,我們也必須要具備高效故障定位能力、并能迅速測試后 Hotfix,第一時間解決客訴。
初遇
我們擁有著復雜的業務系統,面臨著新零售行業高頻迭代、高并發場景,產品質量和穩定性是最根本目標。為了達成這個目標,我們一步步摸索著,逐漸開始了技術轉型和測試轉型。
首先是技術轉型。 非碼前期服務為了更快迭代功能,選擇以項目制開發,服務端有各自的實踐方式,在系統技術架構上缺少設計。隨著業務發展,服務端選擇不再項目制的重復造輪子,使用微服務最佳實踐作為核心,減輕之前積累的技術包袱。
接著我重點談下測試轉型。 剛開始和很多創業公司一樣,測試的作用集中在黑盒測試,瀑布式的按部就班作業,等待運維維護環境、等待開發提測(開發晚提測也只能催)、手工點點、上線回歸,順便疑惑怎么測試環境沒有這個問題?
隨著非碼的業務發展和技術轉型,從1條業務線擴展為 2 條、到后面的 5 條業務線,業務線之間也并不完全獨立,有定制化有產品化,有基礎服務也有聚合服務,微服務數量呈幾何增長速度。測試的工作量和復雜度有了非常大的挑戰,我們開始思考,開始了測試的轉型之路。
首先是拒絕被動,測試人員要「走」出去,質量保障是一個過程,不是一個結果。走到開發的前面和產品溝通用戶需求,利用自身的優勢--比產品懂技術、比開發懂業務,需求階段和開發設計階段就可以排雷。另外一點是走到上線的后面,關注用戶反饋和影響范圍,分析系統穩定性和測試質量的薄弱之處。
其次是自動化測試,(一般提到測試進階第一個想到的就是自動化測試,我們認為自動化測試是測試轉型的一種途徑,不是目標,先擺正思路更重要),在團隊只有業務測試人員的背景下,我們第一選擇是通過開源測試工具實現自動化,但多數偏向于個人不便于團隊協作。秉承著發揮自動化最大價值的初心,我們慢慢通過開發一些提高效率的小工具,最終選擇以接口測試為切入點自己寫代碼實現自動化(UI 自動化試點后,發現我們業務特性不適合)。我們多線業務,且業務靈活度較高,服務接口變化也很快,通過學習和逐步嘗試,針對我們業務特性,設計了接口結構靈活變更的自動化方式(Python+unittest 后改版為 Python+pytest),結構概要如下:
最后是環境管理,自動化完成后也遇到了諸多落地困難,我們之前的環境都是虛機,環境部署無法自動化,也就無法保障自動化測試的代碼最新版本,想要實現自動化能同步測試不同版本的、不同分支的代碼更是困難。除此之外,虛機環境的成本和管理也很難控制,我們推動設立了「測試環境管理員」一職,輪班管理測試環境,緩解了一部分混亂現象,但自動化測試的效益仍被限制。并且開發除去代碼開發的時間投入,也花費了大量時間在環境部署、服務聯調上。
之后我們又迎來了 Docker K8s 的轉型,服務管理有了新的方式,也逐步學習 CI/CD 的高效迭代方式,我們開始摸索自動化和其產生的火花。也在一次技術峰會上,我們 CEO 和 CTO 結識了李倩,邀請李倩給我們做了多次技術分享,李倩對軟件微服務快速交付的理念,與當下正在尋求快速迭代解決方案的我們,不謀而合。進而知道了 KodeRover 的產品 Zadig(開源之后的名字,下文統一用 Zadig 這一名稱),立刻被這個產品所吸引。
一拍即合
Zadig 最吸引我們的地方便是:
- 快速創建環境。Zadig 基于 K8s NS 支持一鍵拉起一套新環境,是當下解決我們環境管理痛點的最優解決方案。
- 工作流管理微服務啟動順序。解決了我們技術轉型后,服務數量猛增后引發的依賴管理問題。
- 優秀的 k8s 服務編排機制。Zadig 的單個應用可維護 N 個資源控制器,極大降低了維護、排錯成本。
我們迅速在團隊內部試點 Zadig,選定了我們點餐業務線進行了服務遷移。在之前我們的環境無法嚴格控制權限管理,測試和運維同學依賴手工構建、部署、服務啟動等,有了 Zadig 的快速創建環境,我們對環境進行了重新管理,大致如下:
有了 Zadig 的環境治理能力,自此我們的開發專心做 coding,環境構建部署交給 Zadig;測試專心寫用例,環境資源交給 Zadig;運維專心做維護,服務管理交給Zadig;不僅大大縮減了我們在上線前的迭代效率,穩定的環境也提供了大家對上線質量信心。
如虎添翼
同時,因為有了穩定的環境,自動化測試終于真正意義的「自動化」了。 此前,我們自動化測試雖一直都在執行,但其實收益較低且相對滯后,因為無法完全保障測試環境和自動化環境的一致性,也難以做到測試左移。Zadig 便提供了這樣的功能,且對接方式十分簡單,除了定時任務、測試執行、報告展示常見功能之外,還具有強大的統計分析功能,多維度直觀的展示測試自動化的過程、收益。
至此,我們的自動化測試實現了測試左移,使得開發在發版后,立刻知曉自己本次發版質量,在測試人員無需介入的情況下,實時跟進發版的質量問題,并以此結果作為自測的驗收標準。
能更早的發現問題、解決問題,使得測試收益最大化,自動化測試執行結果成為質量驗收標準的一項重要指標?,F在業務線仍在增加、生態也在向支付寶、抖音發力,對此我們有信心做的更好。