618前端競品分析研究(互動篇)

来源:https://www.cnblogs.com/o2team/archive/2020/07/27/13387683.html
-Advertisement-
Play Games

作者:吉玉 智能化測試 在互動中經常需要維護大量的狀態,對這些狀態進行測試驗證成本較高,尤其是當有功能變動需要回歸測試的時候。為了降低開發測試的成本,在這方面使用強化學習模擬用戶行為,在兩個方面提效: mock介面:將學習過程中的狀態作為服務介面的測試數據; 回歸測試:根據mock介面數據回溯到特定 ...


作者:吉玉

智能化測試

在互動中經常需要維護大量的狀態,對這些狀態進行測試驗證成本較高,尤其是當有功能變動需要回歸測試的時候。為了降低開發測試的成本,在這方面使用強化學習模擬用戶行為,在兩個方面提效:

  • mock介面:將學習過程中的狀態作為服務介面的測試數據;
  • 回歸測試:根據mock介面數據回溯到特定狀態,Puppeteer根據強化學習觸發前端操作,模擬真實用戶行為;

什麼是強化學習呢?

強化學習是機器學習的一個領域,它強調如何基於環境行動,獲取最大化的預期利益。強化學習非常適用於近幾年比較流行的電商互動機制:做任務/做游戲 -> 得到不同的獎勵值 -> 最終目標大獎,在這類型的互動游戲中,獎勵是可預期的,用戶的目標是使得自己的獎勵最大化。這個過程可以抽象為馬爾科夫決策模型:玩家(agent)通過不同的交互行為(action),改變游戲(environment)的狀態(state),反饋給玩家不同的獎勵 (reward);這個過程不斷迴圈迭代, 玩家的最終目標是獎勵最大化。

接下來,我們使用比較簡單的Q-learning,來實現類似的智能化測試目的。

Q-learning

對於不同狀態下,Q-learning的Q(s,a)表示在某一個時刻的s狀態下,採取動作a可以得到的收益期望,演算法的主要思想是將state和ation構建一張Q-table來存儲Q值,根據Q值來選取能夠獲得最大收益的動作。Q值的公式計算如下:

Q值計算公式

其中,s表示state,a表示action,α為學習率,γ為衰減率,r表示action能帶來的收益。

這個公式表示當前狀態的Q值由“記憶中”的利益(max Q[s',a])和當前利益(r)結合形成。衰減率γ越高,“記憶中”的利益影響越大;學習率α越大,當前利益影響越大。Q-learning的目標是通過不斷訓練,最後得到一個能拿到最多獎勵的最優動作序列。

在賽車游戲中,玩家的交互行為包含購買車廂、合成車廂、做任務獲得金幣(為了方便理解,此處簡化為一個任務);玩家從初始化狀態開始,通過重覆“action -> 更新state”的過程,以下的偽代碼簡單的說明我們怎麼得到一個儘量完美的Q表格:

// action: [ 購買車廂,合成車廂,做任務獲得金幣 ]
// state: 包含等級、擁有車廂等級、剩餘金幣表示

初始化 Q = {}
while Q未收斂:
  初始化游戲狀態state
  while 賽車沒有達到50級:
    使用策略π,獲得動作a = π(S)
    使用動作a,獲得新的游戲狀態state
    更新Q,Q[s,a] ← (1-α)*Q[s,a] + α*(R(s,a) + γ* max Q[s',a])
    更新狀態state

簡單的demo地址:
https://github.com/winniecjy/618taobao

Puppeteer

由上面Q-learning的訓練過程,我們可以得到一系列的中間態介面作為mock數據,可以很快的回溯到特定狀態進行測試,這一點在回歸測試的時候十分有用。但是僅僅只是自動mock數據對效率提升還是有限,在618互動中,友商的互動團隊結合Puppeteer對整個流程進行自動化測試。Puppeteer是chrome團隊推出的一個工具引擎,提供了一系列的API控制Chrome,可以自動提交表單、鍵盤輸入、攔截修改請求、保存UI快照等。

結合Puppeteer的一系列操作邏輯,部分是可以沉澱成為一個通用的測試環境的,比如:

  • 不同用戶類型,如登錄、非登錄、風險、會員等;
  • 介面攔截mock邏輯;
  • 頁面快照留存;
  • 頁面性能數據留存;
  • 其他常見的業務邏輯,如互動任務體系,跳轉後等幾秒後返回,加積分;
  • ...

彈窗規模化

在互動中,彈窗一直是視覺表現的一個重要組成部分,對UI有比較強的定製需求。

友商的思路是將所有的邏輯儘可能的沉澱。對於電商場景來說,彈窗的業務邏輯是可窮舉、可固化的,而互動場景之下,UI定製化需求很高,所以將UI層抽離, 僅對可復用的邏輯進行固化,以DSL + Runtime的機制動態下發。

表達層和邏輯層分離

結合這一套邏輯層模型,表達層/UI層也可以相應的結構化。根據項目 > 場景 > 圖層的維度,靜態配置和動態綁定相結合,搭配對應的配置平臺就可以實現動態下發。

總結

對於智能化測試,80%的流程其實成本是相對較低的,從測試用例的生成到puppeteer自動化測試,都是可以參考學習的,圖像對比的部分需要較多訓練,對於固化的功能可以進行探索,如果是新的模式性價比較低。

對於彈窗規模化,部門內部的做法是將彈窗沉澱成一個通用的組件,只包含通用的相容邏輯,包括顯示/隱藏、彈窗出現底層禁止滾動、多彈窗層級問題等。對於UI和其他業務邏輯,復用性較低,所以每次都是重寫。這種做法儘可能地保持了組件的通用性,在會場線比較適用,因為會場線的彈窗一般不包含業務邏輯(如抽獎、PK等),但是對於互動線來說,復用的內容相較於彈窗的“重量”來說顯得有些微不足道。 友商的沉澱思路前提在於上游介面的邏輯需要可復用,上游邏輯如果無法固定下來,前端的互動邏輯也較難固化。總體來說,友商在互動方面的沉澱思路大部分是從開發提效出發,主要供給內部使用;京東內部已有類似的互動提效方案終極目標是盈利,如京喜的社交魔方平臺和最近正在成型的滿天星平臺,所以沉澱方式都是以成套的H5。

參考

[1] 生產力再提速,618互動項目進化之路
[2] 機器學習相關教程 - 莫煩
[3] Puppeteer docs


歡迎關註凹凸實驗室博客:aotu.io

或者關註凹凸實驗室公眾號(AOTULabs),不定時推送文章。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 行內元素:a,button.big,em,i,input,mark,span,select,option,strog,b,sup,sub,textarea,u 內聯元素是指本身屬性為display:inline的元素.因為它自身的特點,我們通常使用行內元素來進行文字\小圖標(小結構)的搭建 塊級元素 ...
  • HTML元素指的是從開始標簽( start tag)到結束標簽( end tag)的所有代碼 開始標簽元素內容結束標簽 <p> this is a paragraph </p> <a href="default.htm"> this is a link </a> <br/> 註釋:開始標簽被稱為開放 ...
  • 60個\參考網址https://www.w3school.com.cn/tags/index.asp 標簽描述 <!--...--> 定義註釋。 <!DOCTYPE> 定義文檔類型。 <a> 定義錨。 <abbr> 定義縮寫。 <acronym> 定義只取首字母的縮寫。 <address> 定義文檔 ...
  • HTML:超文本標記語言,是使用標記標簽來描述網頁的一種語言,也是一種規範,一種標準,它通過標記符號來標記要顯示的網頁中的各個部分; css層疊樣式表是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等文件樣式的的電腦語言。css不僅可以靜態地修飾網頁,還可 ...
  • HTML基本結構 document是指整個文件,它下麵就是咱們的html 超文本標記語言的結構包括"頭"(head)和主體(body) 其中"頭"部提供關於網頁的信息,"主體"部分提供網頁的具體內容 #HTML基本結構-文檔聲明 為了說明文檔使用的超文本標記原因標準,所有的超文本標記語言文檔應該以“ ...
  • 一夜無眠,學習不是為了別人,自己執行力好差,對自己過高期望,以為任務目標Soeasy,結果徘徊了幾個月,還是在原地踏步,怎麼講了?學習還是要腳踏實地,專註,不要為自己找藉口!畢竟虛長幾歲,曾經的年少輕狂高傲、曲動琴聲美妙一不復返!如今的自己在為曾經的不學習,努力向著生活買單!希望下麵可以越來越好! ...
  • 回溯演算法主要應用於樹形問題,我們先從一個簡單的演算法入手 17. 電話號碼的字母組合給定一個僅包含數字 2-9 的字元串,返回所有它能表示的字母組合。 給出數字到字母的映射如下(與電話按鍵相同)。註意 1 不對應任何字母。 示例: 輸入:"23" 輸出:["ad", "ae", "af", "bd", ...
  • 一、文檔載入模式 1.事件 三要素:事件源(觸發時間的元素);事件名稱(click點擊事件);事件處理程式(事件出發後要執行的代碼函數形式) 存在問題:瀏覽器載入一個頁面的時候,是按照自上而下的順序載入的,若將script標簽寫到head內部,在代碼執行時候,頁面還沒有載入,頁面中的DOM對象也沒有 ...
一周排行
    -Advertisement-
    Play Games
  • PasteSpider是什麼? 一款使用.net編寫的開源的Linux容器部署助手,支持一鍵發佈,平滑升級,自動伸縮, Key-Value配置,項目網關,環境隔離,運行報表,差量升級,私有倉庫,集群部署,版本管理等! 30分鐘上手,讓開發也可以很容易的學會在linux上部署你得項目! [從需求角度介 ...
  • SQLSugar是什麼 **1. 輕量級ORM框架,專為.NET CORE開發人員設計,它提供了簡單、高效的方式來處理資料庫操作,使開發人員能夠更輕鬆地與資料庫進行交互 2. 簡化資料庫操作和數據訪問,允許開發人員在C#代碼中直接操作資料庫,而不需要編寫複雜的SQL語句 3. 支持多種資料庫,包括但 ...
  • 在C#中,經常會有一些耗時較長的CPU密集型運算,因為如果直接在UI線程執行這樣的運算就會出現UI不響應的問題。解決這類問題的主要途徑是使用多線程,啟動一個後臺線程,把運算操作放在這個後臺線程中完成。但是原生介面的線程操作有一些難度,如果要更進一步的去完成線程間的通訊就會難上加難。 因此,.NET類 ...
  • 一:背景 1. 講故事 前些天有位朋友在微信上丟了一個崩潰的dump給我,讓我幫忙看下為什麼出現了崩潰,在 Windows 的事件查看器上顯示的是經典的 訪問違例 ,即 c0000005 錯誤碼,不管怎麼說有dump就可以上windbg開幹了。 二:WinDbg 分析 1. 程式為誰崩潰了 在 Wi ...
  • CSharpe中的IO+NPOI+序列化 文件文件夾操作 學習一下常見的文件、文件夾的操作。 什麼是IO流? I:就是input O:就是output,故稱:輸入輸出流 將數據讀入記憶體或者記憶體輸出的過程。 常見的IO流操作,一般說的是[記憶體]與[磁碟]之間的輸入輸出。 作用 持久化數據,保證數據不再 ...
  • C#.NET與JAVA互通之MD5哈希V2024 配套視頻: 要點: 1.計算MD5時,SDK自帶的計算哈希(ComputeHash)方法,輸入輸出參數都是byte數組。就涉及到字元串轉byte數組轉換時,編碼選擇的問題。 2.輸入參數,字元串轉byte數組時,編碼雙方要統一,一般為:UTF-8。 ...
  • CodeWF.EventBus,一款靈活的事件匯流排庫,實現模塊間解耦通信。支持多種.NET項目類型,如WPF、WinForms、ASP.NET Core等。採用簡潔設計,輕鬆實現事件的發佈與訂閱。通過有序的消息處理,確保事件得到妥善處理。簡化您的代碼,提升系統可維護性。 ...
  • 一、基本的.NET框架概念 .NET框架是一個由微軟開發的軟體開發平臺,它提供了一個運行時環境(CLR - Common Language Runtime)和一套豐富的類庫(FCL - Framework Class Library)。CLR負責管理代碼的執行,而FCL則提供了大量預先編寫好的代碼, ...
  • 本章將和大家分享在ASP.NET Core中如何使用高級客戶端NEST來操作我們的Elasticsearch。 NEST是一個高級別的Elasticsearch .NET客戶端,它仍然非常接近原始Elasticsearch API的映射。所有的請求和響應都是通過類型來暴露的,這使得它非常適合快速上手 ...
  • 參考delphi的代碼更改為C# Delphi 檢測密碼強度 規則(仿 google) 仿 google 評分規則 一、密碼長度: 5 分: 小於等於 4 個字元 10 分: 5 到 7 字元 25 分: 大於等於 8 個字元 二、字母: 0 分: 沒有字母 10 分: 全都是小(大)寫字母 20 ...