
一 引言盒馬業務有如下幾個特點:線上線下一體化、倉儲配送一體化、超市餐飲一體化、經營作業一體化、多業態與平台化。
在以上的種種原因,生鮮及物流體驗是盒馬的特點,但倉儲配送一體化作業中,如何能更高效的提升測試效率也是盒馬質量團隊的重點探索。
二 背景及待解決問題介紹1 盒馬自動化體系發展新挑戰在盒馬,前期業務在狂奔,自動化基礎較薄弱,近三年來,經過盒馬人的不斷突破,已經具備了一定的自動化體系,因為盒馬業務的特點,盒馬屬於麻雀雖小但五臟俱全,有獨立App,有自營的物流體系,有自己的供應鏈體系,因此在自動化方面,我們從最基礎的單元測試、到接口測試、再到領域場景自動化及跨領域的自動化以及端的自動化方面都有積累。即便如此,我們的代碼覆蓋率在超過50%之後很難有比較大的提升,另外,代碼的覆蓋並不能全部代表業務場景的覆蓋,一些線上漏測的問題仍然偶爾發生,因此,對於盒馬來說,基於較全場景的測試是必須。
在這種背景下,盒馬質量團隊進行了較全場景驅動自動化測試的探索,利用線上數據建立測試場景模型。下面會更加詳細的進行講述。
2 業務場景全覆蓋的挑戰從業界來說,比較難的也同樣是如何用比較簡單的手段做到業務的全場景覆蓋,對盒馬來說也同樣。
首先,盒馬的業務場景眾多,包括inbound與outbound全流程,端到端的全流程多業態,含O2O模式、B2C模式、F2模式、Mini模式、Mall模式、X會員店模式、產地量販模式、盒馬鄰里模式等。這麼多種業務場景很難一一枚舉。
其次,業務場景自動化編寫效率也較低,在人工枚舉場景,腳本化實現,這種效率比較低,場景難以枚舉全,容易遺漏。
業務場景的真實覆蓋率也難以度量,人工枚舉的業務場景極易有遺漏,線上已頻發漏測問題,無法覆蓋線上全量場景,同時測試的場景覆蓋率難以衡量,需要找到線上場景分母。
傳統自動化來說,校驗一般基於字段級別,容易遺漏。傳統校驗方式根據預期逐個字段加斷點校驗,新增字段或缺失字段極容易造成遺漏。
因此,在這種多種挑戰下,我們嘗試了基於線上海量數據模型構建全行經模型,同時用場景驅動自動化執行的方案。3 場景模型驅動自動化的思考
回到本文初心,我們希望通過線上場景來驅動自動化測試的方式進行測試場景的全量覆蓋。思路如下:
一、場景業務模型構建:重點在於如何自動化的構建出場景化的模型數據。大致的思路為:1)線上執行過後的訂單數據存在諸多特徵;2)根據線上落盤數據進行特徵值分析;3)構建數據特徵集合與對應的樣本數據;
二、執行鏈路構建:重點在於如何自動構建出克執行的系統調用鏈路。大致思路為:1)基於落盤數據獲取線上執行全鏈路的所有鷹眼;2)根據鷹眼(trace)及系統調用關係構建執行鏈路;3)執行鏈路編排構建鏈路執行能力;
三、執行結果的校驗:重點在於如何自動的進行結果數據的一致性校驗。大致思路為:1)所有的數據最終會持久化落盤;2)基於持久化數據進行全字段對比;3)忽略規則配置;
三 解決思路1 模型驅動自動化解決策略結合上文的背景及思考,推演出本文的模型驅動自動化解決策略包含:特徵提取、場景建模、鏈路執行、結果驗證、覆蓋率分析、缺陷定位及報告。
2 業務場景建模問題定義針對業務場景模型,我們首先要思考我們面向的是什麼系統,系統的規律是什麼,該系統的哪些數據可以被規則化出來的,如何規則出來,最終如何表達,帶着這些問題我們一步步介紹我們的解決方案。
業務場景建模-特徵提取方法
本節重點介紹特徵提取的通常方法,當前階段,我們是以數據庫的全量數據作為特徵提取的來源,當然不少團隊也在嘗試使用接口調用過程中的全量入參數據。具體為:1)DB全量數據查詢:通過odps查詢方式獲取全量多表關聯數據,用以作為分析的數據源。2)數據的聚合:對於查詢的數據進行信息補齊後,字段打平,採用聚類的方式針對每一字段進行聚合,以出現有限數量的字段作為特徵字段進行基線特徵的沉澱,對於離散型的數據會選擇合適的區間進行分段處理。3)特徵推薦:針對上述聚合的內容進行推薦,此部分會將潛在的特徵字段全量進行推薦。4)特徵基線沉澱:基於推薦的數據,結合專家經驗進行特徵字段的選取,並進行標註選擇為基線特徵。業務場景的建模-特徵提取過程如下圖所示,為數據表數據示例,從數據層面可以看出,有一部分字段是有意義的,如isParent是否主單,businessType業務類型,orderTerminal訂單終端類型等等,也有一部分字段是離散且無意義的,如orderId訂單ID,itemId商品id,GMTCreate創建時間等。特徵提取的過程目標就是自動的提取出有意義的字段,忽略無意義的字段。
實際實踐過程中,我們通過不斷的迭代以提升特徵的精準度與全面度,具體的核心幾個提取過程為:
1、特徵擴充:元數據中的字段有可能為原始數據,這部分需要關聯到具體數據表並找出有意義的字段。
2、特徵分類:根據數據的聚合,對於有意義的離散類型數據,比如訂單總價,往往我們希望得到零價訂單,高值訂單及普通訂單三類,這三類是未自動打標的,需要我們聚合出範圍在特徵提取過程中動態識別並分類。
3、特徵聚合:依賴於特徵的規則,進行所有字段的聚合,最終根據枚舉類型字段出現次數進行有效判斷,目前我們設定的值為20,這個值可以動態調整,僅僅為參考值而已。
4、特徵決策:針對聚合出來的潛在特徵,進行基於代碼、經驗、默認值等多種維度的判斷,最終進行特徵的推薦,這部分因為業務屬性比較重,我們在推薦出來的同時,最終更依賴於專家經驗進行字段的最終判斷,目前推薦出來和最終採納的比例約為50%,我們後續會升級算法和參考維度進一步提升採納率。

1)特徵提取-特徵擴充本文舉例商品及倉的場景,對於商品根據商品id關聯找到對應商品明細,再將商品明細中有意義的字段,比如:是否是危險品、是否是緊急配送商品、商品的標籤、商品的狀態等等查詢出來關聯主數據,對於倉關聯查出倉的類型和倉的標籤,如此可基於場景的主模型數據進行分支場景的多層級關聯,將需要關注到的場景維度值儘可能多的納入到數據模型中。
2)特徵提取-特徵聚類本文舉例對於加工時長bomCost字段,對於標品來說是0,對於加工品來說,比如魚類,需要增加15分鐘宰殺作業時間,對於涼拌菜等需要增加10分鐘進行製作等等。此處會單獨將特定字段進行區間分類,如此將分類後的值進行特徵的挖掘基礎,即可將離散的值變得有意義。
3)特徵提取-特徵聚合將所有數據進行擴充完畢後,將所有相關字段進行打平處理,根據相同字段進行值的聚合,相同值記錄次數,不相同時進行歸類,如此便可將相關數據進行初始化的數據處理,然後根據聚合出來的數據進行默認值個數的判斷進行特徵的推薦。

4)特徵提取-特徵決策依賴上述聚合出來的全量潛在特徵數據,在特徵決策模塊會基於代碼中抽象出的特徵字段進行匹配,當然最重要的是依賴於業務領域的測試專家經驗進行主動識別標註,最終沉澱出領域的基線特徵集合。

以盒馬某業務領域為例,下圖展示的是最終有效的特徵集合,根據基線特徵,我們的做法是都標註了具體的含義,如此,便可很容易根據一個領域的業務特徵識別出該領域的數據場景。同樣,根據特徵情況,也可以刻畫出每個領域的特徵模型,如下圖所示,很輕鬆的看出領域的全量特徵,同時根據每個特徵,可以清晰的看出每個特徵值的分布占比情況。業務場景建模-場景提取有了基線特徵後,基於基線特徵形成解析規則,再將全量數據基於特徵規則匹配處理,對於命中規則的進行打標處理,即可識別出匹配基線特徵的數據集合,這些數據集合對於每一條數據代表的特徵組我們稱之為場景。具體的處理流程如下圖所示。

進行特徵規則匹配處理後,可識別出場景集,這些場景的集合對我們來說至關重要,因為這些場景集合從一定意義上要代表我們的線上全量場景。如下圖所示,除了有場景的推薦,還有場景對應的數據的推薦。這些數據後續我們會進行處理並進行執行鏈路的驅動。3 執行鏈路分析及構建前文有介紹盒馬很多業務領域都是鏈路式驅動類型,所以對於如何構建出領域的執行鏈路很關鍵,我們的思路是通過系統的調用日誌及鷹眼trace相結合的方式進行聚合清洗得到領域的大概執行鏈路推薦,這裡面的推薦會有多種情況。整體的思路如下圖。
執行鏈路推薦出來後,這時候的鏈路還是無法執行的,我們的目標是根據推薦能夠自動生成執行鏈路,只是當前基於進展的考慮,我們先將推薦的鏈路進行人工鏈路編排以執行場景模型中的數據。以盒馬"履約"領域的系統執行流程鏈路為例,如下,我們將對所有業態的數據的處理進行統一流程編排,如此,即可更大限度和真實的處理模型數據。

4 數據校驗數據執行完成之後,對於自動化來說一個最關鍵且有意義的事情是進行結果的校驗,為了能夠更全面的比對結果,我們將執行鏈路進行線上生產環境和測試環境的雙向執行,對於兩套環境的結果數據進行全量的數據比對,可將比對結果精確到像素級別。
5 場景覆蓋率分析針對場景覆蓋率,我們將場景模型所轉換的測試數據對應的全量場景與線上全量場景進行比較得出場景覆蓋率。在今年的OKR目標下,我們也是目標將業務場景覆蓋率達到80%以上。
四 產品解決方案1 產品解決方案架構圖結合以上核心模塊的介紹,系統的產品解決方案框圖如下所示,基於核心的場景模型驅動自動化執行過程為基準,分為業務場景建模模塊、測試數據生產模塊、回歸策略執行選擇模塊、鏈路用例執行、結果校驗以及結果推送模塊。基於運維視角,包含統計大盤、用例管理等。

在盒馬場景探索的場景模型驅動自動化,已經在交易、履約、商品、配送、自提等諸多領域進行了實踐,並取得了一定的成果。同時在發布回歸、小量數據的常規化壓測、系統重構、線上業務巡檢等諸多場景中獲得了不錯的使用。五 實踐結果基於場景模型驅動自動化的模式,已經在盒馬事業群內多個團隊進行了推廣接入使用,整體上累計沉澱有效的場景化用例2000以上,場景的特徵覆蓋率均大於90%,各個領域新接入業務的自動化構建成本直線降低80%以上,有效的解決了傳統腳本方式的人工依賴過重,引流方式無法覆蓋鏈路場景的問題,也成為團隊內重要的發布前的回歸可信賴保障手段。
1 在盒馬交易領域的實踐盒馬交易域是比較早的實踐方之一,基於上述方案,交易域進行了整體的方案對接,沉澱了大量的場景及回歸用例。尤其交易領域在覆蓋率提升方面做了較多的工作。
在交易領域的特徵覆蓋率的提升經過了以下幾個階段,初始的測試單據(日常測試單據+鏈路自動化單據)特徵覆蓋率僅50%左右,覆蓋率確實不高,通過覆蓋率報告的分析發現,除了確實無單據覆蓋的特徵,還有一類問題是有單據覆蓋但是平台無法匹配上的特殊字符類特徵值或不可窮盡枚舉類特徵值,經過二次處理後,特徵覆蓋率提高到65%左右;第三階段,現有的全業態全場景用例構建出來後覆蓋率提升到90%左右,剩餘的10%特徵基本是線上特定時期小概率出現場景階段性單據沒分析到或暫時無法構建數據的特徵,經過指定單據有針對性地補充後特徵覆蓋率達到96%,至此覆蓋率達到我們期望的95%以上,基線用例搭建完成。
因此,從最終結果看,交易領域屬於基於最終結果反推過程執行,整體接入過程,基於場景構建與鏈路編排的執行能力,結合自身能力的構建,接入過程約三周,推薦場景累計2000多例,對8種業態進行全面支撐,能夠做到快速的回歸覆蓋,很好的做到需求的高質量持續交付。
2在盒馬其他典型領域的實踐在商品領域,從全新的領域對接,整體投入2天,完成500+線上場景的接入,整體投入成本下降高達90%,代碼覆蓋率在原有腳本自動化基礎上提升了28%,快速達到50%以上。
在履約領域:整體沉澱場景化鏈路用例1000+,成功率95%以上,特徵覆蓋率95%以上,鏈路的仿真精準度90%以上,全面保障履約域的質量。
在配送領域:配送域沉澱場景化鏈路用例300+,作為作業操作的系統,鏈路場景的覆蓋率97%以上,特徵覆蓋率100%,新業務的自動化成本下降80%以上。
六 未來展望基於場景模型驅動自動化實現,只是開始,遠沒有終結,前期只是針對一部分領域進行了探索實踐落地,接下來希望能夠擴展更多領域的同時,更加深入的挖掘自動化用例自動生成及測試數據保活的能力,使之能夠更好的服務好盒馬的各團隊業務,也希望通過本文的分享,啟發更多的團隊一起投入進行探索並做出嘗試。
七 結束語本文的探索方案前後歷時近一年半的時間,從0開始投入,團隊也累計多人參與,投入雖大,但給我們的質量保障工作帶來了不錯的回報,接下來的時間裡也會繼續前行探索,勇於嘗試。
技術精彩問答:錦囊妙計
點擊閱讀原文查看詳情!