天天看點

阿裡文娛測試實戰:機器學習+基于熱度鍊路推薦的引流,讓對比測試更精準1.對比測試的原理和現狀2.如何有效度量測試覆寫率?3.基于熱度鍊路推薦的對比測試4.回顧&展望

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

作者 | 阿裡文娛測試開發專家 正辰

出品 | CSDN(ID:CSDNnews)

1.對比測試的原理和現狀

引流對比測試是目前阿裡内部常用的一種回歸測試手段,它基于線上真實流量做采集、回放、對比,通過對比結果評估代碼變更是否影響了線上鍊路和功能。通過這種方案,極大地降低了手工構造測試資料的成本:

阿裡文娛測試實戰:機器學習+基于熱度鍊路推薦的引流,讓對比測試更精準1.對比測試的原理和現狀2.如何有效度量測試覆寫率?3.基于熱度鍊路推薦的對比測試4.回顧&展望

1)基于使用者真實請求,對于複雜業務的接口,降低了模拟使用者場景的成本;

2)采集流量足夠多的時候,可以對業務場景做全覆寫測試,減少測試遺漏;

3)測試環境穩定,結果明确可靠,并且不需要手工測試執行。目前線上請求采集政策主要是按比例随機采集,從使用情況來看,存在一些問題:

1)從測試的角度,我們并不清楚采集到的流量是否覆寫了核心場景。用測試的話來說:這些流量到底覆寫了哪些用例?無法有效度量;

2)線上持續采集的情況下,回放請求要及時手工維護,排除失效或者重複請求;

3)采集配置多個接口時,由于大流量接口占比很高,導緻小流量接口采集不到有效流量, 需要手動調整采集配置。

基于以上這些問題,不難發現,采集請求的有效性和覆寫度是對比測試能持續發揮作用的關鍵問題。如何破解?優酷在對比測試中引入熱度鍊路覆寫率,實作了一套基于線上熱度鍊路覆寫的精準對比測試方案。

2.如何有效度量測試覆寫率?

1.代碼覆寫率

傳統的測試覆寫率統計方法,測試之前先對代碼檔案進行插樁,生成插過樁的 class 檔案或 者 jar 包,測試執行後,會自動收集走到的代碼路徑,生成覆寫率資訊到檔案,最後統一對覆寫 率資訊進行處理,生成覆寫率報告。度量覆寫率的主要名額有:代碼行覆寫、代碼分支覆寫、 方法覆寫等等。

1)代碼覆寫率的優點:

a)原理和方案比較成熟,有很多現成的工具,實作成本比較低;
b)度量次元比較多,能結合多個名額全面評估代碼覆寫率。           

2)代碼覆寫率的問題:

a)無法有效評估業務場景的覆寫率。代碼覆寫率高隻能說明代碼被執行到了,并不能說明 業務場景被覆寫了,業務場景的覆寫率還需要手工評估;
b)覆寫率分析成本比較高。由于代碼品質問題(無效代碼或者備援代碼),很多代碼不會 被真實的業務場景調用到,這部分代碼很難做到測試覆寫,覆寫的價值也不高,并不一定需要 覆寫。
           

2.子調用鍊路覆寫率

通過在中間件代碼中插樁,統一實作對外部子調用的代碼路徑采集,進而聚合出代碼走過 的子調用鍊路,然後通過聚合鍊路請求得出每條子調用鍊路的熱度,進而獲得線上真實使用者場 景的鍊路分布情況。子調用鍊路精準回報了業務場景的鍊路和熱度,這種基于線上真實請求得

出的覆寫率評估方案,目前在阿裡内部被廣泛使用。度量覆寫率的主要名額是:子調用鍊路覆 蓋率。

1)相比傳統的代碼覆寫率:

a)基于線上真實使用者請求分析代碼執行路徑,通過子調用鍊路代表使用者場景,能準确評估業務場景的覆寫情況;
b)統一在中間件代碼中插樁,業務代碼無需改動,接入成本比較低。基于子調用鍊路覆寫率評估,是否可以解決對比測試提出的覆寫率評估難題呢?是否也能适合優酷的業務場景?在試運作一段時間後,我們發現優酷一些業務采集到的子調用鍊路特别少,和業務的體量、複雜度不一緻。帶着這個疑問,我們看看下面兩個請求的代碼運作鍊路:
           
阿裡文娛測試實戰:機器學習+基于熱度鍊路推薦的引流,讓對比測試更精準1.對比測試的原理和現狀2.如何有效度量測試覆寫率?3.基于熱度鍊路推薦的對比測試4.回顧&展望

2)基于以上代碼運作鍊路分析:

a)部分業務外部依賴比較少,主要邏輯在應用内部,導緻代碼運作的外部子調用完全一樣,但内部方法鍊路不一樣;
b)評估業務内部邏輯覆寫的話,内部方法鍊路覆寫要比子調用鍊路覆寫更有效。如果能聚合出内部方法鍊路,對優酷業務場景的覆寫率評估會更有指導意義。于是優酷和集團 JVM-SANDBOX 團隊深入合作,提出了一套内部方法鍊路覆寫率的評估方案:熱度鍊路覆寫率。
           

3.基于熱度鍊路推薦的對比測試

通過收集一段時間内的線上真實請求,并記錄下請求執行過的方法路徑,即為鍊路。線上不同的真實請求很多都是走的同一個鍊路,這樣不同的鍊路就有不同的熱度,根據鍊路熱度可 以自動評估出需要優先覆寫的鍊路,即為熱度鍊路。

1.方法鍊路感覺

要采集方法路徑,首先需要感覺到每個方法的執行。利用 JVM-SANDBOX 底層子產品的能 力,能統一在每個内部方法做代碼增強,感覺到每個方法“運作前”、“傳回前”、“異常後”三 個事件,進而收集到代碼執行到的方法資料,聚合成方法鍊路。

阿裡文娛測試實戰:機器學習+基于熱度鍊路推薦的引流,讓對比測試更精準1.對比測試的原理和現狀2.如何有效度量測試覆寫率?3.基于熱度鍊路推薦的對比測試4.回顧&展望

1)BEFORE 事件:感覺和改變入參;直接傳回;

2)RETURN 事件:感覺和改變傳回值;重新構造傳回結果;抛異常;

3)THROWS 事件:重新構造異常;模拟正常傳回。

2.采集子產品部署

在子產品部署環節,最大的挑戰是配置需要增強的代碼邏輯類。最開始由各個業務方自己配 置,但由于配置範圍沒有統一标準,導緻采集的鍊路不完成,很難擷取比較。根據優酷的業務 特性,我們統一提供了一套代碼邏輯類掃描服務,支援優酷各個業務的代碼解析和邏輯類掃描, 為每個業務方提供統一的代碼增強配置标準。接入過程如下:

阿裡文娛測試實戰:機器學習+基于熱度鍊路推薦的引流,讓對比測試更精準1.對比測試的原理和現狀2.如何有效度量測試覆寫率?3.基于熱度鍊路推薦的對比測試4.回顧&展望

1)TraceModule:采集運作鍊路;2)Repeater:采集請求和傳回結果,錄制回放;3)MockModule:服務端動态 Mock。

3.鍊路采集和熱度計算

線上子產品激活後,就可以根據配置的采樣比率,持續采集線上流量,并聚合方法鍊路。

阿裡文娛測試實戰:機器學習+基于熱度鍊路推薦的引流,讓對比測試更精準1.對比測試的原理和現狀2.如何有效度量測試覆寫率?3.基于熱度鍊路推薦的對比測試4.回顧&展望

有了應用鍊路資料做參考後,通過采集線上請求,并識别出請求的鍊路,就可以按照熱度 鍊路或者全部鍊路推薦對比請求,通過擴大請求采集周期(推薦采集周期為 7 天),最後推薦的 請求可以覆寫線上全部業務鍊路,不僅提升了對比測試的有效覆寫率,而且推薦過程高效且全自動化,全程不需要人工幹預,可以快速推廣到服務端所有應用的對比測試。

4.回顧&展望

基于熱度鍊路分析,可以輔助測試更具體地了解真實的業務場景,除了用于推薦對比測試請求,在優酷服務端回歸體系中,也用于評估回歸測試的覆寫率,相比傳統的代碼覆寫率評估,業務指導意義更明确。

當然,對于高熱度的鍊路,可能包含了大量的使用者請求,也包含了不同的業務含義,如果隻覆寫其中一條請求,雖然鍊路覆寫了,但會造成業務覆寫損失,後期我們可以通過機器學習,智能聚類,讓機器來篩選出覆寫更完整、更精确的測試集,深度挖掘線上請求資料的價值,輔助測試建設更有意義的品質保障體系。

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/zhibo

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-03-29

本文作者:阿裡文娛

本文來自:“

CSDN

”,了解相關資訊可以關注“