Layout Tests百度手机浏览器T5内核测试实践1

发表于:2014-06-11来源:百度质量部作者:不详点击数: 标签:软件测试
百度手机浏览器T5内核(下称T5内核)继承自 android 源码中带的 WebKit,增加了许多特有的功能,如主体突出 ,WebGL等HTML5相关的其他功能。但是WebKit 的源码非常庞大,改动一点就有可能导致

  概述

  百度手机浏览器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 拉出来,和上一次的执行结果对比,这样可以比较清楚的知道两次执行之前提交的代码对产品质量的影响:

  +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

原文转自:http://qa.baidu.com/blog/?p=1138&qq-pf-to=pcqq.c2c