首页 数据库 mysql教程 Webkit Layout Test理论部分1 + 深入分析部分2– Layout Test :

Webkit Layout Test理论部分1 + 深入分析部分2– Layout Test :

Jun 07, 2016 pm 03:00 PM
test webkit 深入分析 理论 部分

原文 : 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主流程:

Webkit Layout Test理论部分1 + 深入分析部分2– 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. 动态测试 (测试结果在执行过程中动态决定。但仍输出到网页,通过静态测试的方式报告出来。)

    动态测试的判断方法和静态测试相同。差异在于比对的内容已经是测试的结果。就是JavaScript脚已经根测试条件和数据,判断出测试成功或失败。然后静态测试的机制输出结果。     

Webkit Layout Test理论部分1 + 深入分析部分2– Layout Test :


测试用例的构成:

   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.html -> Ref Test

   c.说明

. missmatch类型的测试只有Ref Test支持

. Ref Test具有排它性,如果当前CaseRef Test, 不会再对其它内容检测。

 *关于Audio的比对,脚本里相关内容,但没有再分析。

 *第一次跑测试时,没有比较标准,LayoutTest会自动生成xxx-expected.txt 或xxxx-expected.png。

 *所有测试的网页必须放到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,shouldBeCloseTo,shouldNotBe,shouldBeFalse,sholdBeNaN,shouldBeNull,shouldBeZero,

shouldBeEqualToString,shouldBeEmptyString,shouldBeDefined,shouldBeUndefined,shouldThrow…

详细地内容可以查看js-test-pre.js脚本。



4. LayoutTests/canvas/tests/23.canvas.reference.html

  ...

 

FAIL (fallback content)


  

       <script></script>

        _addTest(function(canvas, ctx) {

              _assertSame(ctx.canvas, canvas, "ctx.canvas", "canvas");

             });

     


    _assertSame定义在LayoutTests/canvas/test.js中. 


    所有canvas 2D测试使用同相同的id以方便测试脚本执行。


    工作方式 (test.js中的实现):

    Webkit Layout Test理论部分1 + 深入分析部分2– Layout Test :



     测试成功就在网页输出一个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也要指定--pixel参数。 Expected的图像以PNG存储。PNG文件会被保存到对应的platform目录下。

      a. 抓下的图像仅限于可视区域。

      b. 因为字体渲染的原因,尽量不要涉及文本内容。

      c. 因为原生控件(native control)是由系统绘制,不同系统间有差异性。

      参考WebKit的这篇文章。

       


    6.  overridePreference (key, value)

      用于在脚本中动态修改Preference的值。可用的Keys:

          WebKitEnableCaretBrowsing

          WebKitUsePreHTML5ParserQuirks

     *更多的定义在WebPreferencesPrivate.h


    7. Windows下使用LayoutTest的字体问题

      参考:http://trac.webkit.org/wiki/BuildingOnWindows (Font-metric-related failures)

     

    8. 完整的testController方法列表:

      对照代码LayoutTestController.cpp中LayoutTestController::staticFunctions()的定义

    9. 默认的网页视图大小 (DumpRenderTree)

        W3C SVG测试: 480x360

        其它测试:800x600

      *定义在LayoutTestController.cpp:2563 lines, 在函数sizeWebViewForCurrentTest中使用。

      都是常量定义,没有参数可以修改。


    10. 自带DOM测试用例。使用selfhtml.js 和 同html同名的js文件。

      selfhtml.js 提供测试入口函数startTest和9个assert operation供使用: assertSize, assertEqualsCollectionAutoCase

      xxxx.js则提供runTest的实现供startTest调用。

      startTest执行:

          a. waitUntilDone

          b. runTest

          c. notifyDone


    11. 黄金法则:

      a. 对于Pixel Test, 尽量不要涉及文本。

      b. 测试内容不要涉及动态内容,如时间、日期等。




    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热门文章

    <🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌
    北端:融合系统,解释
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora:巫婆树的耳语 - 如何解锁抓钩
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌
    <🎜>掩盖:探险33-如何获得完美的色度催化剂
    2 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    热门话题

    Java教程
    1677
    14
    CakePHP 教程
    1430
    52
    Laravel 教程
    1333
    25
    PHP教程
    1278
    29
    C# 教程
    1257
    24
    华为Watch GT 5智能手表获得新功能更新 华为Watch GT 5智能手表获得新功能更新 Oct 03, 2024 am 06:25 AM

    华为正在全球推出Watch GT 5和Watch GT 5 Pro智能手表的软件版本5.0.0.100(C00M01)。这两款智能手表最近在欧洲推出,标准型号是该公司最便宜的型号。这和谐

    铁拳桑德斯上校的梦想被肯德基炸了 铁拳桑德斯上校的梦想被肯德基炸了 Oct 02, 2024 am 06:07 AM

    《铁拳》系列总监原田胜宏曾认真尝试过将桑​​德斯上校带入这款标志性格斗游戏中。在接受 TheGamer 采访时,原田透露,他向日本肯德基提出了这个想法,希望将这位快餐传奇人物纳入其中。

    Cyber​​truck FSD 评论称赞快速车道切换和全屏可视化 Cyber​​truck FSD 评论称赞快速车道切换和全屏可视化 Oct 01, 2024 am 06:16 AM

    特斯拉正在推出最新的全自动驾驶(监督)版本 12.5.5,并最终带来了承诺的 Cyber​​truck FSD 选项,距离皮卡上市十个月后,该功能包含在基础系列的装饰价格中。 F

    Garmin 通过新的更新发布了针对多款智能手表的冒险赛车活动改进 Garmin 通过新的更新发布了针对多款智能手表的冒险赛车活动改进 Oct 01, 2024 am 06:40 AM

    Garmin 将于本月底为其最新的高端智能手表提供一组新的稳定更新。回顾一下,该公司发布了系统软件 11.64,以解决 Enduro 3、Fenix E 和 Fenix 8 的高电池消耗问题(亚马逊售价 1,099.99 美元)。

    搭载 HyperOS 的新款小米米家石墨烯油汀到货 搭载 HyperOS 的新款小米米家石墨烯油汀到货 Oct 02, 2024 pm 09:02 PM

    小米即将在中国推出米家石墨烯油汀取暖器。该公司最近在其优品平台上成功举办了一次智能家居产品众筹活动。根据页面显示,该设备已经开始发货至

    第一眼:即将推出的 Anker Zolo 4 端口 140W 带显示屏壁式充电器的拆箱视频泄露 第一眼:即将推出的 Anker Zolo 4 端口 140W 带显示屏壁式充电器的拆箱视频泄露 Oct 01, 2024 am 06:32 AM

    2024 年 9 月早些时候,Anker 的 Zolo 140W 充电器被泄露,这是该公司首款带显示屏的壁式充电器,这引起了轰动。现在,小李TV在YouTube上发布的新开箱视频让我们亲眼目睹了这款hi

    三星 Galaxy Z Fold 特别版透露将于 10 月底登陆,但名称出现冲突 三星 Galaxy Z Fold 特别版透露将于 10 月底登陆,但名称出现冲突 Oct 01, 2024 am 06:21 AM

    三星期待已久的“特别版”可折叠手机的推出又迎来了另一个转折。最近几周,有关所谓 Galaxy Z Fold 特别版的传言相当安静。相反,焦点已转移到 Galaxy S25 系列,包括

    Manjaro 24.1'Xahea”与 KDE Plasma 6.1.5、VirtualBox 7.1 等一起发布 Manjaro 24.1'Xahea”与 KDE Plasma 6.1.5、VirtualBox 7.1 等一起发布 Oct 02, 2024 am 06:06 AM

    Manjaro 已有十多年的历史,被认为是最用户友好的 Linux 发行版之一,适合初学者和高级用户,易于安装和使用。这个基于 Arch 的发行版主要在奥地利、德国和法国开发

    See all articles