场景模型驱动自动化测试在盒马的探索及实践
簡介:?盒馬業務有如下幾個特點:線上線下一體化、倉儲配送一體化、超市餐飲一體化、經營作業一體化、多業態與平臺化。在以上的種種原因,生鮮及物流體驗是盒馬的特點,但倉儲配送一體化作業中,如何能更高效的提升測試效率也是盒馬質量團隊的重點探索。
作者 | 欽偉
來源 | 阿里技術公眾號
一 引言
盒馬業務有如下幾個特點:線上線下一體化、倉儲配送一體化、超市餐飲一體化、經營作業一體化、多業態與平臺化。
在以上的種種原因,生鮮及物流體驗是盒馬的特點,但倉儲配送一體化作業中,如何能更高效的提升測試效率也是盒馬質量團隊的重點探索。
二 背景及待解決問題介紹
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開始投入,團隊也累計多人參與,投入雖大,但給我們的質量保障工作帶來了不錯的回報,接下來的時間里也會繼續前行探索,勇于嘗試。
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。?
總結
以上是生活随笔為你收集整理的场景模型驱动自动化测试在盒马的探索及实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: /usr/bin/ld: 找不到 -lo
- 下一篇: 成中集团线下IDC迁移上云