百度手机浏览器的体验地址: http://shouji.baidu.com/browser/
=========================正文===========================================
从上一篇的执行示意图中可以看到,LayoutTest 的执行以及报告生成都发生在 apk
中,所以 apk 是这个测试方案的核心,本文就着重讲述这个 apk
LayoutTests apk的结构
Instrumentation
mTestsRelativePath = arguments.getString("path");
Application 包括三个Activity 和 一个 service。
ManagerService
顾名思义,是管理者的角色,实际上是负责TestsListActivity、Executor 还有一个 Summarizer 进行沟通的。
三个Activity,
DirListActivity
是通 luncher 点开apk之后展现测试列表的 Activity,如下图:
TestsListActivity
主要作用是遍历 server 端的目录,找到给定路径下面所有的测试case,存入到变量中,调用 Executor 去执行,并且等 executor 的执行结果,把结果通过 managerService 传递给 Summerizer。
executor 在独立的进程中
是真正加载测试用例(网页)的activity,它封装了百度的统一内核SDK,统一内核SDK封装了T5 内核。executor 中通过 BWebView.loadUrl 加载 TestsListActivity 传递过来的 url,调用到 T5 内核进行 html 的解析、渲染,JavaScript 的执行 等。当页面加载完成之后,会调用 dumpAsText 把页面中的文本导入到文本文件中。比如下面这个测试用例:
fast/cookies/local-file-can-set-cookies.html
<html>
<head>
<title>Local File Can Set Cookies</title>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<script>
description('This test checks that a local file can set cookies. See: rdar://problem/5379090 REGRESSION: Cannot set cookies for local files');
shouldBe("document.cookie.indexOf('ppkcookie1=testcookie')", "-1");
document.cookie = 'ppkcookie1=testcookie';
shouldBeTrue("document.cookie.indexOf('ppkcookie1=testcookie') >= 0");
</script>
<script src="../../fast/js/resources/js-test-post.js"></script>
</body>
</html>
在相同目录下由一个文件 fast/cookies/local-file-can-set-cookies-expected.txt
This test checks that a local file can set cookies. See: rdar://problem/5379090 REGRESSION: Cannot set cookies for local files
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
PASS document.cookie.indexOf('ppkcookie1=testcookie') is -1
PASS document.cookie.indexOf('ppkcookie1=testcookie') >= 0 is true
PASS successfullyParsed is true
TEST COMPLETE
LayoutTest 执行完这个 case 之后页面会显示如下图:
dumpAsText 会把页面存到 sdcard 里面,文件名是 fast/cookies/local-file-can-set-cookies-actual.txt,当然,字体信息会丢失,但是不影响文本比对。
之后对比 fast/cookies/local-file-can-set-cookies-expected.txt 和fast/cookies/local-file-can-set-cookies-actual.txt
如果两者相同,就PASS,如果不同,就 Fail。 (ps. 如果这个case 过不了,显然是一个最基本的问题,浏览器引擎根本无法上线使用。)
LayoutTest apk 的核心源码
下一篇再分析详细过程