Layout Tests - 百度手機瀏覽器T5內核測試實踐1

概述

百度手機瀏覽器T5內核(下稱T5內核)繼承自 android 源碼中帶的 WebKit,增加了許多特有的功能,如主體突出 ,WebGL等HTML5相關的其他功能。但是WebKit 的源碼非常龐大,改動一點就有可能導致其他原有的功能無法正常工作。用什麼方法可以保證新增的功能正常工作,而又保證不影響之前的功能是一個困擾團隊很久的問題。早期的方案是拿瀏覽器去加載主流網站,查看有沒有問題。但這樣無法保證主流網站能夠覆蓋所有的情況,最終從開源的 WebKit 項目中找到了 LayoutTest,如前一篇所述 Layout Tests 理論部分 (Layout Tests: Theory)  。本文開始介紹 LayoutTest 是如何引T5 內核的,LayoutTest 的結構介紹,移植過程中遇到的問題等。

LayoutTest 的引入

    Android 的源碼庫就是一個寶藏。
    我們上面遇到的問題,android 團隊在把WebKit 從PC平臺移植到手機平臺時也會遇到,所以他們必然需要一種方式來保證發佈的 WebKit 是可用的。一方面他們要保證系統原生瀏覽器可以滿足大家的日常需要,另一方面他們還要支持開發者基於 WebView 控件的二次開發(現在許多 Hybrid 的應用都是包裝WebView 做的)。沿着這個思路我在 android 源碼中找到了 webkit/LayoutTests 以及 DumpRenderTree 和 DumpRenderTree2。
    其中 DumpRenderTree 是把測試用例保存到 sdcard,去加載執行。源碼比較少,但是工具本身經常Crash,需要分批次運行纔可以。後來主要精力就放在了 DumpRenderTree2 上面。

    DumpRenderTree2 則是把測試用例放到 apache 服務器上,通過網絡加載。源碼比 DumpRenderTree 多,結構也更爲複雜。但生成的測試報告比較容易看,所以目前主要在維護這個。

LayoutTest 的主要組成

T5內核 LayoutTest 對 DumpRenderTree2 做了許多改動,但主要結構沒有太多變化, 爲了方便維護,我們把 DumpRenderTree2 複製出來,用 git 做代碼管理:

external/webkit 目錄下有個 LayoutTests 目錄,裏面存放 LayoutTests 的測試用例,

Android 自帶的測試用例有 3166 個,主要以 php, html, xhtml, js 爲後綴 ,測試用例相同目錄下會有同名但後綴名爲 txt 的文件, 是期望結果。測試的原理是用 封裝了 統一內核SDK 和 T5內核 的 BWebView 來加載待測試的 html 文件,然後用 BWebView 的接口把 頁面展示的內容寫入到一個文本文件中,對比 xxx_actual.txt 和 xxx_expected.txt 是否一致。如果一致這個測試就 pass,否則就fail

LayoutTest_SDK-2.0/assets 下面有兩個比較重要的 python 腳本:

run_apache2_webkit.py    負責啓動 apache 服務器,啓動後,可以通過這臺電腦的瀏覽器訪問 http://127.0.0.1:8000/LayoutTests/ 來瀏覽測試用例目錄,對應到 webkit/LayoutTests.
run_layout_tests.py   負責傳遞參數給 LayouTest.apk 告訴它要運行的測試用例的路徑。 比如 fast,  fast/encoding, fast/encoding/css-charset-evil/css-charset-evil.html 等,如果什麼都不加,它會默認使用  http://127.0.0.1:8000/LayoutTests/ 下面所有的測試用例。

LayoutTest 的執行過程示意圖:



LayoutTest 的運行方式

1. 啓動模擬器
2. run_apache2_webkit.py restart # 會啓動127.0.0.1:8000/LayoutTests 對應的case 目錄:webkit/LayoutTests
3. run_layout_tests.py -s ${DEVICE_ID} fast/url #會啓動 LayoutTest_SDK-2.0.apk 訪問 127.0.0.1 上面的測試用例
4. 運行完畢,腳本會把執行結果 details.html 用 adb pull 拉出來,和上一次的執行結果對比,這樣可以比較清楚的知道兩次執行之前提交的代碼對產品質量的影響:

LayoutTest 結果展示

group owner TOTAL Build.185 Build.189 change    unE PASSES E FAILURES E PASSES Crash
fast/constructors null 1 0 0 0   0 0 1 0
fast/encoding null 106 2 2 0   1 11 92 0
fast/cookies null 1 0 0 0   0 0 1 0
fast/events null 15 8 8 0   0 3 4 1
fast/leaks null 2 0 0 0   0 1 1 0
fast/url null 20 1 1 0   0 0 19 0
fast/notifications null 0 0 0 0   0 0 0 0
fast/xpath null 61 4 4 0   0 0 57 0
fast/dom null 173 10 10 0   0 4 159 0
http null 67 6 6 0   3 3 55 0
storage null 104 9 11 +2   32 16 45 1
dom null 2616 13 16 +3   0 18 2582 0
ALL   3166 53 58 +5   36 56 3016 2
storage : 
+storage/domstorage/localstorage/window-open.html
+storage/domstorage/sessionstorage/window-open.html
dom : 
+dom/html/level2/html/HTMLStyleElement03.html
+dom/html/level2/html/HTMLTableRowElement13.html
+dom/xhtml/level2/html/HTMLDirectoryElement01.xhtml
+dom/xhtml/level2/html/HTMLElement120.xhtml
+dom/xhtml/level2/html/HTMLIFrameElement10.xhtml
-dom/html/level2/html/HTMLImageElement01.html
-dom/html/level2/html/HTMLTableCellElement06.html


發佈了106 篇原創文章 · 獲贊 18 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章