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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值