Webkit Layout Test理论部分1 + 深入分析部分2– Layout Test :
原文 : http://blog.csdn.net/yajun0601/article/details/8887332 当我开始做 WebKit 开发的时候,令我好奇的一件事儿就是这玩艺儿怎么测试。作为一个 Web 开发者,我清楚浏览器渲染引擎有多少 bug (尽管现在情况好了很多),以及日益复杂的web 页面给浏览
原文 :
http://blog.csdn.net/yajun0601/article/details/8887332
当我开始做 WebKit 开发的时候,令我好奇的一件事儿就是这玩艺儿怎么测试。作为一个 Web 开发者,我清楚浏览器渲染引擎有多少 bug (尽管现在情况好了很多),以及日益复杂的web 页面给浏览器引擎带来多大的挑战。伴随bug 一起工作多年自然是要极力避免的事情,所以强制对规范的遵从和避免倒退就显得很关键。
WebKit 的解决方案就是 layout tests。 从最简单层面来说,layout tests 就是提交到 WebKit 源码库中的一堆简单的网页(越简单越好)和期望的渲染结果文件( golden files),有文本也有图片。测试脚本( run-webkit-tests)使用一个内嵌了 WebKit 的应用(DumpRenderTree)遍历测试用例(现在有30000多了),然后对比这些测试用例的渲染结果和期望结果(golden
files),最后将失败、崩溃、超时以及其他和期望不一致的结果生成报告。WebKit 项目中有让 layout test 在已经移植的所有平台上持续运行的编译机,这样就可以容易得发现那些有问题的改动(一旦发现就回滚)。
鼓励开发者在提交代码前先运行 layout tests。最简单的方式是使用 commit queue,它会自动完成测试的执行。如果不这样,在工作站上运行全部测试用例也是可行的,目前运行一遍大约耗时15分钟,如果使用Dirk Pranke 的 multi-process
test runner 时间可以缩短至约 4 分钟或者更少。
通过合理的使用测试数据,layout tests 可以被用来验证很多东西,从 JavaScript 引擎规范一致性到重绘以及 WebSocket 协议的实现。对于类似后者需要访问网络的情况,测试脚本会启动一个本地服务器(Apache, lighthttpd, 或者 WebSocket),然后从服务器上运行测试。本地 HTTP 服务器对模拟网络边界情况也是有用的;让我我觉得很可笑的是,在过去六个月的WebKit 工作中,我被迫学习和使用更多的PHP,比我过去六年做Web开发使用的还要多。
对于比较简单的测试,他们更多采用了单元测试的形式(比如使用断言),有一个辅助的框架可以让这样的测试很容易的搭建起来。对应的期望结果文件里只是一条条的 "success" 描述。
考虑到 layout test 不仅仅测试了渲染、布局,同时也包含了 JavaScript bindings的单元测试,网络堆栈的交互测试,数量级性能测试等等,大家也会偶尔讨论到"layout test" 这个名字越来越不精确。也正是由于这样的灵活性,layout test 模型在引入第三方测试套件的时候也有很好的表现。作为 layout test 的一部分,我们还运行了 Sputnik JavaScript 一致性套件,Philip
Taylor 的 canvas 套件,以及 HTML5 解析套件,和更多其他浏览器厂商的测试用例。
接下来的一篇会讨论 layout test 系统一些实际的东西,如果要了解更多,请移步 the WebKit wiki.
=============================================================================================
深入分析WebKit之Layout Tests
来自内部一个分享PPT整理过程的知识点,没有特别组织。
Layout Test主流程:
运行的指令:
run-webkit-tests [选项]
测试脚本文件或所在的目录
主要的参数有:
--verbose 显示详细的信息
--no-build 不要尝试重新编译dumprendertree
--debug 使用Debug版本进行测试
--help 显示所有选项信息
0. 测试方法的归纳
i. 静态测试 (测试结果是通过比对最终网页输出来决定的。)
四种检测方法:
Render tree, Body Text, Pixel Data, Ref Test
(Body Text没有格式信息,而Pixel Data没有文本信息,所以两者是配合使用,以Body Text为主。)
Ref Test是以HTML页面的形式比对。
ii. 动态测试 (测试结果在执行过程中动态决定。但仍输出到网页,
动态测试的判断方法和静态测试相同。
测试用例的构成:
a.测试用HTML文件 (必须在LayoutTests目录下)
{testname}.html
b.基准文件 (Baseline)
. {testname}-expected.txt -> Body Text
. {testname}-expected.png -> Pixel Test
. {testname}-expected.html -> Ref Test
. {testname}-expected-mismatch.
c.说明
. missmatch类型的测试只有Ref Test支持
. Ref Test具有排它性,如果当前Case是Ref Test, 不会再对其它内容检测。
*关于Audio的比对,脚本里相关内容,但没有再分析。
*第一次跑测试时,没有比较标准,
*所有测试的网页必须放到LayoutTests目录下。
1. 不要在网页中输出日期或时间。
(动态变化的内容是不可以拿来比对的)
2. 整个Test Case运行时间不能超过30s。详见另一篇文章。
3. js-test-re.js (配合js-test-post.js使用) 中定义了若干结果确认的函数,如shouldBeTrue.
如:
…
<script></script>
totalCount = 5;
shouldBeTrue("totalCount == 3");
…
运行的结果:
FAIL totalCount == 3 should be true. Was false.
其它函数有:shouldBe,
shouldBeEqualToString,
详细地内容可以查看js-test-pre.js脚本。
4. LayoutTests/canvas/tests/23.
...
<script></script>
_addTest(function(canvas, ctx) {
_assertSame(ctx.canvas, canvas, "ctx.canvas", "canvas");
});
_assertSame定义在LayoutTests/
所有canvas 2D测试使用同相同的id以方便测试脚本执行。
工作方式 (test.js中的实现):
测试成功就在网页输出一个Pass, 否则输出错误信息。这样达到比对结果的目的。
另一个函数:_assertPixel (2d.clearRect.nonfinite.html)
_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
函数定义:
_assertPixel(canvas, x,y, r,g,b,a, pos, colour)
pos和colors是代表坐标和颜色的两个字串。
pos : "x,y"
color: "r,g,b,a"
函数列表:
_assert
_assertSame (===)
_assertDifferent (!==)
_assertEqual (==)
_assertMatch (match) 正则表达式匹配
_assertPixel
_assertPixelApprox
_requireManualCheck 因为一些原因取不到数据,可能需要人工检查确认。
5.对于pixel test,除了dumpAsText()参数设为true, 在运行run-webkit-tests也要指定--
a. 抓下的图像仅限于可视区域。
b. 因为字体渲染的原因,尽量不要涉及文本内容。
c. 因为原生控件(native control)是由系统绘制,不同系统间有差异性。
参考WebKit的这篇文章。
6. overridePreference (key, value)
用于在脚本中动态修改Preference的值。
WebKitEnableCaretBrowsing
WebKitUsePreHTML5ParserQuirks
*更多的定义在WebPreferencesPrivate.h
7. Windows下使用LayoutTest的字体问题
参考:http://trac.webkit.org/
8. 完整的testController方法列表:
对照代码LayoutTestController.
9. 默认的网页视图大小 (DumpRenderTree)
W3C SVG测试: 480x360
其它测试:800x600
*定义在LayoutTestController.cpp:
都是常量定义,没有参数可以修改。
10. 自带DOM测试用例。使用selfhtml.js 和 同html同名的js文件。
selfhtml.js 提供测试入口函数startTest和9个assert operation供使用: assertSize, assertEqualsCollectionAutoCase
xxxx.
startTest执行:
a. waitUntilDone
b. runTest
c. notifyDone
11. 黄金法则:
a. 对于Pixel Test, 尽量不要涉及文本。
b. 测试内容不要涉及动态内容,如时间、日期等。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Huawei는 Watch GT 5 및 Watch GT 5 Pro 스마트워치용 소프트웨어 버전 5.0.0.100(C00M01)을 전 세계적으로 출시하고 있습니다. 이 두 스마트워치는 최근 유럽에서 출시되었으며, 표준 모델이 회사의 가장 저렴한 모델로 출시되었습니다. 이 하모니

철권 시리즈 디렉터인 하라다 카츠히로(Katsuhiro Harada)는 한때 샌더스 대령을 상징적인 격투 게임에 도입하려고 진지하게 노력한 적이 있습니다. TheGamer와의 인터뷰에서 Harada는 패스트푸드의 전설을 g로 추가하기 위해 KFC Japan에 아이디어를 제안했다고 밝혔습니다.

오랫동안 기다려온 삼성의 '스페셜 에디션' 폴더블 출시가 또 다른 반전을 가져왔습니다. 최근 몇 주 동안 이른바 갤럭시 Z 폴드 스페셜 에디션에 대한 소문은 다소 잠잠해졌습니다. 대신 갤럭시 S25 시리즈로 초점이 옮겨졌습니다.

2024년 9월 초, Anker의 Zolo 140W 충전기가 유출되었는데, 이 충전기가 회사의 디스플레이를 탑재한 최초의 벽면 충전기였기 때문에 큰 화제가 되었습니다. 이제 YouTube의 Xiao Li TV에서 제공하는 새로운 언박싱 동영상을 통해 안녕하세요.

샤오미는 곧 중국에서 Mijia 그래핀 오일 히터를 출시할 예정입니다. 이 회사는 최근 Youpin 플랫폼에서 호스팅되는 스마트 홈 제품에 대한 크라우드 펀딩 캠페인을 성공적으로 진행했습니다. 페이지에 따르면 기기는 이미 배송을 시작했습니다.

Garmin은 최신 고급 스마트워치에 대한 새로운 안정적인 업데이트 세트로 이번 달을 마감합니다. 요약하자면, 회사는 Enduro 3, Fenix E 및 Fenix 8(Amazon에서 현재 $1,099.99)의 높은 배터리 소모를 해결하기 위해 시스템 소프트웨어 11.64를 출시했습니다.

Tesla는 최신 완전 자율 주행(감독) 버전 12.5.5를 출시하고 있으며 Foundation Series 트림 가격에 포함된 기능으로 픽업이 판매된 지 10개월 만에 마침내 약속된 Cybertruck FSD 옵션이 제공됩니다. 에프

10년 이상의 역사를 지닌 Manjaro는 초보자와 고급 사용자 모두에게 적합한 가장 사용자 친화적인 Linux 배포판 중 하나로 간주되며 설치 및 사용이 쉽습니다. 주로 오스트리아, 독일, 프랑스에서 개발된 이 Arch 기반 배포판은
