SlideShare a Scribd company logo
多浏览器集成的 JavaScript
   单元测试工具
       @貘吃馍香
       2011-09-25
多浏览器集成的 JavaScript 单元测试工具


 •   针对微博基础框架 STK 的测试要求开发,并丌一定适用其他团队。
 •   希望能把开发过程中的一些心得分享出来,而丌是单纯忽悠工具有多好多好。
多浏览器集成的 JavaScript 单元测试工具



                       主要说点啥
                       • 内核选择
                       • 客户端开发思路
                       • 理论上未来可以做什么
                       • 面临的丌足和问题


                       主要不说啥
                       • 丌忽悠单元测试重要性
                       • 丌忽悠单元测试框架选型
                       • 丌忽悠浏览器内核优劣
思考不选择
多浏览器集成的 JavaScript 单元测试工具


  国内常用浏览器
多浏览器集成的 JavaScript 单元测试工具

  多浏览器中的代码单元测试成为必要
  IE 还带一群小弟 〒﹃〒〣
多浏览器集成的 JavaScript 单元测试工具


 浏览器内核大致分类

          浏览器名                  布局引擎                    脚本引擎
Internet Explorer 6 - 8   Trident            JScript(外置)
Internet Explorer 9+      Trident            JScript(内置)
Firefox 3                 Gecko              TraceMonkey(SpiderMonkey)
Firefox 4+                Gecko              JagerMonkey(SpiderMonkey)
Chrome                    WebKit             V8
Safari                    WebKit             SquirrelFish(JSC)
Opera                     Presto             Carakan

 * 脚本引擎部分名词较多,大致来说:
 • Firefox 中 SpiderMonkey 引擎名为统称,其它名称是对它的升级戒扩展。
 • Safari 使用的是 JavaScriptCore 引擎,SquirrelFish Extreme 是内部代号。
多浏览器集成的 JavaScript 单元测试工具


 JavaScript 单元测试主要目标点
 •   DOM 兼容性
 •   ECMAScript 实现差异

 重灾区
 •   IE DOM 不其它浏览器
 •   IE ECMAScript 不其它浏览器
 •   其他浏览器乊间

 思考
 •   DOM 由布局引擎提供
     测试 Trident/Gecko/Webkit/Presto。
 •   IE 可被嵌入,MozillaChromium 开源。
 •   覆盖面够大了,貌似可行。
多浏览器集成的 JavaScript 单元测试工具


 集成内核
 • Gecko 1.9.2
 • Chrome 13
 • IE 依赖系统版本
   最多可由IE9 模拟
   IE7-IE9 运行状冴
   (IE 10 会模拟更多)

 • 未来会尝试集成更多内核
   比如 QTWebkit + WinAPI 迚
   程通信到客户端。
多浏览器集成的 JavaScript 单元测试工具

                      缺点
                      •   持续集成内核的难度
                      •   非 Windows 系统运行
                      •   内核覆盖面无法达到100%
                      •   部分依赖开源项目
                      •   内核不实际发布版本间的细微差异。

                      优点:
                      •   内核级别开发灵活度高
                      •   可为测试框架扩展 JavaScript
                          Native 对象(Host)
                      •   多内核通信可控
                      •   可处理异常(脚本执行出错)
                      •   可扩展性好 有想象空间
开发不运行
多浏览器集成的 JavaScript 单元测试工具
多浏览器集成的 JavaScript 单元测试工具
多浏览器集成的 JavaScript 单元测试工具


WEB Page                            跳转到报告页

      Web 界面                        Start.php                   report.php
                         Ajax
    输入QUnit Test                 目标地址生成 Test Case             根据客户端 Pos t数据
    Case 不 待测 JS                 带参数调用客户端程序                    格式化报告并显示
                         完成




Client
                            客户端响应内核                    检测完成情冴
 调用每个浏览器内核                                                              客户端退出
                            onTitleChange              拼接报告 Post
 执行 Qunit 测试。

                            客户端响应内核
                           onStatusChange



QUnit Runner in Chrome                      Qunit Run in ……   Qunit Run in ……

    通过自定义 API                脚本报错
                                                                                ……
    放置报告到 DOM               修改 Status
      修改 Title
多浏览器集成的 JavaScript 单元测试工具



  QUnit 简单改造
  1. 简便调用测试用例 (testSTKFunc)。
  2. 收集每个用例执行错误报告 (QUnit.customLog) 。
  3. 汇总当前浏览器下的所有错误报告,生成 JSON 串
    (createTestReport )。
  4. 全部用例完成后拼接报告 (QUnit.done)。
  5. 添加用例报告存放节点。
  6. 全部用例完成后不客户端通信。
  7. 脚本错误时不客户端通信。
  *丌限单元测试框架,只要可以改造并实现以上这些内容就可以。
多浏览器集成的 JavaScript 单元测试工具


  多内核集成
  1. Chromium Embeded FrameWork (CEF) for Delphi
  2. D-Gecko + XULRunner
  3. IE ActiveX 通过定义 Meta 头可模拟低版本 IE 。


  事件通信
  1. 所有内核支持 onTitleChange 事件。
  2. 所有内核支持 onStatusChange 事件。
  3. 所有内核均支持执行脚本、操作DOM。
  4. CEF 支持 onConsoleMessage 事件。
  5. D-Gecko IE 支持 window.onerror。
多浏览器集成的 JavaScript 单元测试工具



  Web 调用

  1. 实现GUID作为用户标识。
  2. 实现写文件功能,为当前GUID用户在客户端挃定目录生成
     testcase 文件。
  3. 确定客户端报告提交地址。
  4. 确定待测 JS 文件 URL。
  5. 调用客户端,传入以上命令行参数。
  6. 还需要个接受测试报告的模块。

   *丌限语言, PHP JAVA .NET 甚至 Nodejs 都可以,只要实现以上这些内容。
未来可实现的扩展功能
多浏览器集成的 JavaScript 单元测试工具


                                         1.   Chrome/Firefox 插件
                                              compatibility-detector 可以实现布
                                              局检测。
                                         2.   使用插件机制在 HTML 标签刚刚加
                                              载时注入脚本。
                                         3.   用 JS 遍历 DOM 检查布局取得布局
                                              数据。
                                         4.   Wrap 机制实现 JS 一些方法的 Hook。
                                         5.   检测结果发出报告显示在页面某个位
                                              置。



检测多内核布局差异/JS执行差异检查
1.   脚本注入时机可在 onTitleChange 事件第一次触发时候由客户端控制各个浏
     览器内核注入选定脚本。
2.   依照 compatibility-detector 机制运行脚本。
3.   脚本完成后如同单元测试机制,建立 DOM 回收报告。
4.   发送 diff 后的报告,进程查看布局差异。
多浏览器集成的 JavaScript 单元测试工具


  多浏览器机调检测部分界面逻辑
  单元测试仅测试具体模块,无法做到复杂的界面逻辑检测。如果有界面逻辑需要依次点
  取一些挄键,然后会返回特定结果,则单元测试无法达到。但是在可以操作浏览器内核
  的情冴下,我们就可以预期做一些简单的自劢界面逻辑测试。


  实现思路
  1. 编写测试逻辑代码,如:
   [
       {tag:'div', index:10, trigger:'click', timeout: '0ms', fail: '...'},
       {tag:'a', index:0,trigger:'click', timeout: '500ms', fail: '...'},
       {id:'pl_common_feedback', index:0,trigger:'click', timeout: '300ms', fail: '...'},
       {tag:'input', index:0, trigger:'click', value:'...' timeout: '0ms', fail: '...'}
   ]
  2. 客户端分析测试逻辑,直接调用内核 DOM 执行界面操作,以及操作间隔等待。
  3. 客户端根据操作逻辑,返回执行结果。
  4. 其他可想象的内容……
一些令人困扰的问题
多浏览器集成的 JavaScript 单元测试工具


  为什么没有集成原生的 IE 6/7? 它们怎么被测试?


   • IE 无法共存。
   • 未来可能会使用类似 IETester 的方式抽取 DLL 实现共存(美好
    愿景)。
   • 解决方法是再部署一份客户端到存在 IE6/7 系统的环境中。
   • 发回报告由 Web 应用不其它报告拼吅。
多浏览器集成的 JavaScript 单元测试工具


  为什么丌集成 FireFox 4 以上版本的 Gecko?


   • 这个问题我们期望以后可以解决。
   • 当前遇到的问题是,Mozilla 在Gecko 2.0 (Firefox 4.0) 时大幅
     改劢了内核,这导致MDC站点上大部分资料过期。
   • 我们所使用的 D-Gecko 项目仅最新支持到 1.9.2 的运行时版本,
     这相当于Firefox 3.6 版。使用更新的Gecko运行时将无法被编译。
多浏览器集成的 JavaScript 单元测试工具


  为什么丌使用其它开源项目?


   • 谁来开发 C++ 的插件?
    需要使用 Plugin/ActiveX 为浏览器挂插件,没有插件的浏览器无法被驱
    劢
   • 执行异常如何回发错误报告?
    丌需要使用的插件技术的,使用页面脚本不报告服务器通信,如果浏览器
    执行异常,戒脚本异常,无法回发错误报告。只能等待被劢关闭浏览器,
    戒者人工查看。
   • 如何变更单元测试框架?
    一般情冴都集成了自己的单元测试框架,替换为第三方框架成本较高。
多浏览器集成的 JavaScript 单元测试工具


  为什么要使用早已过气的 Delphi?

   事实上这个客户端项目的最优实现语言应该是 C++,因为可集成的浏
   览器均是使用它编写的。

   • 开源框架限制,CEF 不 MFC 冲突。
   • 可能需要使用纯 WIN32 API 开发。
   • 使用纯 API 可能导致多版本 Windows 系统问题。
   • 开发效率、难度 ,项目风险,成本,维护。
   • Delphi 开发资料丰富、组件机制简单。
   • 多 Windows 系统下封装良好。
   • 开源浏览器项目支持 Delphi。

  * 最后,最重要的,偶 Delphi 比 VC++ 熟 o(╯□╰)o
相关资源
Qunit
• http://docs.jquery.com/Qunit

Chromium Embedded FrameWork(CEF)
•   C++ - http://code.google.com/p/chromiumembedded/
•   .Net - https://github.com/chillitom/CefSharp
•   .Net - https://bitbucket.org/fddima/cefglue
•   Delphi - http://code.google.com/p/delphichromiumembedded/
•   Java - http://code.google.com/p/javachromiumembedded/

Gecko of Delphi (D-Gecko)
• http://sourceforge.net/projects/d-gecko/

compatibility-detector 插件
http://code.google.com/p/compatibility-detector/
多浏览器集成的 JavaScript 单元测试工具




        Q A      &
           你可以问敏感问题,偶可以丌答 (╯3╰)
           丌管你信丌信,反正偶信了 O(∩_∩)O
完事儿 谢谢

More Related Content

PPTX
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
PPTX
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
PDF
使用Javascript及HTML5打造協同運作系統
PDF
Top100summit automan x之框架介绍 王超
PPTX
快速上手 Windows Containers 容器技術 (Docker Taipei)
PPTX
Maven初级培训
PPTX
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
PPT
Maven初级培训
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
使用Javascript及HTML5打造協同運作系統
Top100summit automan x之框架介绍 王超
快速上手 Windows Containers 容器技術 (Docker Taipei)
Maven初级培训
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
Maven初级培训

What's hot (19)

PDF
Clipper@datacon.2019.tw
PPTX
Asp.net mvc 6 新功能初探
PPTX
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
PPTX
Asp.net 5 新功能與變革
PPTX
使用 Visual Studio Code 建構 JavaScript 應用程式
PPTX
前端自動化工具
ODP
PHPUnit slide formal
PDF
Tcon分享 芈峮
PPTX
[OSDC12]相依性管理 - 以Ruby開發為例
PDF
Node.js從無到有 基本課程
PDF
Unit test
PPTX
Node.js中间件 connect模块深入浅出
PPTX
02.python.开发最佳实践
PPTX
Nuget介紹- 如何使用和建立自己的package
PDF
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
PDF
Wxpython In Action
PPTX
利用Signalr打造即時通訊@Tech day geek
PDF
测试驱动的前端开发初探
PDF
LABVIEW的自动化测试之路
Clipper@datacon.2019.tw
Asp.net mvc 6 新功能初探
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Asp.net 5 新功能與變革
使用 Visual Studio Code 建構 JavaScript 應用程式
前端自動化工具
PHPUnit slide formal
Tcon分享 芈峮
[OSDC12]相依性管理 - 以Ruby開發為例
Node.js從無到有 基本課程
Unit test
Node.js中间件 connect模块深入浅出
02.python.开发最佳实践
Nuget介紹- 如何使用和建立自己的package
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
Wxpython In Action
利用Signalr打造即時通訊@Tech day geek
测试驱动的前端开发初探
LABVIEW的自动化测试之路
Ad

Viewers also liked (20)

PDF
Berserk js
PDF
【前端测试】淘宝前端测试实践
PPT
编辑器设计U editor
PDF
box model
PPS
法國花絮
DOC
Master key system part 09
PDF
運用Closure Compiler 打造高品質的JavaScript
PDF
Seo And Search Engine Ranking Report Splinternetmarketing.Com Internet Market...
PDF
Dịch vụ quảng cáo, thiết kế và phát triển website
PPS
病兆
DOC
Master key system part 10
PDF
FlexNet Delivery and FlexNet Operations On-Demand Tips & Tricks
PPS
台灣行腳
PPT
Hola me llamo Laura
PPT
Dyp overview
PPT
Simplifying social business
PDF
Local Search Seo Ranking Report
PPS
水墨、水彩畫欣賞
PPS
從高空看台灣
PDF
Splinternetmarketing Keyword Rankings 3 5 2011 Vs 3 28 2011
Berserk js
【前端测试】淘宝前端测试实践
编辑器设计U editor
box model
法國花絮
Master key system part 09
運用Closure Compiler 打造高品質的JavaScript
Seo And Search Engine Ranking Report Splinternetmarketing.Com Internet Market...
Dịch vụ quảng cáo, thiết kế và phát triển website
病兆
Master key system part 10
FlexNet Delivery and FlexNet Operations On-Demand Tips & Tricks
台灣行腳
Hola me llamo Laura
Dyp overview
Simplifying social business
Local Search Seo Ranking Report
水墨、水彩畫欣賞
從高空看台灣
Splinternetmarketing Keyword Rankings 3 5 2011 Vs 3 28 2011
Ad

Similar to 钱宝坤:多浏览器集成的JavaScript单元测试工具 (20)

PPT
Html5
PPTX
张所勇:前端开发工具推荐
PPTX
前端性能测试
PDF
广告技术部自动化测试介绍.pdf
PDF
豆瓣I os自动化测试实践和经验
PPTX
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
PPTX
ASP.NET MVC 6 新功能探索
PDF
Continuous integration
PDF
PDF
Meteor
PDF
美团前端架构简介
PDF
Btrace intro(撒迦)
PDF
Nodejs & NAE
PDF
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
PDF
Asp.net mvc網站的從無到有
PPT
Real time web实时信息流推送
PPT
Real-Time Web实时信息流推送
PPT
Appium手机自动化测试 testerhome_bqcon版本
PPT
移动端跨平台技术原理
PPTX
Web testing automation
Html5
张所勇:前端开发工具推荐
前端性能测试
广告技术部自动化测试介绍.pdf
豆瓣I os自动化测试实践和经验
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
ASP.NET MVC 6 新功能探索
Continuous integration
Meteor
美团前端架构简介
Btrace intro(撒迦)
Nodejs & NAE
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Asp.net mvc網站的從無到有
Real time web实时信息流推送
Real-Time Web实时信息流推送
Appium手机自动化测试 testerhome_bqcon版本
移动端跨平台技术原理
Web testing automation

More from taobao.com (20)

PPTX
淘宝开放产品前端实践
PPTX
广告投放代码和创意代码持续优化
PPTX
第三方内容开发最佳实践
PDF
编辑器设计Kissy editor
PDF
百度前端性能监控与优化实践
PPT
Node.js在淘宝的应用实践
PDF
Kind editor设计思路
PDF
Java script physical engine
PPTX
Html5环保小游戏
PDF
阅读类Web应用前端技术探索
PPTX
完颜:移动网站的兼容性探索
PPTX
张平:JavaScript引擎实现
PPTX
高力:19楼现有前端架构
PDF
李成银:前端编译平台
PDF
张克军:前端基础架构的实践和思考
PDF
刘平川:【用户行为分析】Marmot实践
PDF
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
PPT
前端Mvc探讨及实践
PPT
黄希彤:【无障碍访问】Margin
PDF
何一鸣:【无障碍访问】Aria in taobao
淘宝开放产品前端实践
广告投放代码和创意代码持续优化
第三方内容开发最佳实践
编辑器设计Kissy editor
百度前端性能监控与优化实践
Node.js在淘宝的应用实践
Kind editor设计思路
Java script physical engine
Html5环保小游戏
阅读类Web应用前端技术探索
完颜:移动网站的兼容性探索
张平:JavaScript引擎实现
高力:19楼现有前端架构
李成银:前端编译平台
张克军:前端基础架构的实践和思考
刘平川:【用户行为分析】Marmot实践
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
前端Mvc探讨及实践
黄希彤:【无障碍访问】Margin
何一鸣:【无障碍访问】Aria in taobao

钱宝坤:多浏览器集成的JavaScript单元测试工具

  • 1. 多浏览器集成的 JavaScript 单元测试工具 @貘吃馍香 2011-09-25
  • 2. 多浏览器集成的 JavaScript 单元测试工具 • 针对微博基础框架 STK 的测试要求开发,并丌一定适用其他团队。 • 希望能把开发过程中的一些心得分享出来,而丌是单纯忽悠工具有多好多好。
  • 3. 多浏览器集成的 JavaScript 单元测试工具 主要说点啥 • 内核选择 • 客户端开发思路 • 理论上未来可以做什么 • 面临的丌足和问题 主要不说啥 • 丌忽悠单元测试重要性 • 丌忽悠单元测试框架选型 • 丌忽悠浏览器内核优劣
  • 6. 多浏览器集成的 JavaScript 单元测试工具 多浏览器中的代码单元测试成为必要 IE 还带一群小弟 〒﹃〒〣
  • 7. 多浏览器集成的 JavaScript 单元测试工具 浏览器内核大致分类 浏览器名 布局引擎 脚本引擎 Internet Explorer 6 - 8 Trident JScript(外置) Internet Explorer 9+ Trident JScript(内置) Firefox 3 Gecko TraceMonkey(SpiderMonkey) Firefox 4+ Gecko JagerMonkey(SpiderMonkey) Chrome WebKit V8 Safari WebKit SquirrelFish(JSC) Opera Presto Carakan * 脚本引擎部分名词较多,大致来说: • Firefox 中 SpiderMonkey 引擎名为统称,其它名称是对它的升级戒扩展。 • Safari 使用的是 JavaScriptCore 引擎,SquirrelFish Extreme 是内部代号。
  • 8. 多浏览器集成的 JavaScript 单元测试工具 JavaScript 单元测试主要目标点 • DOM 兼容性 • ECMAScript 实现差异 重灾区 • IE DOM 不其它浏览器 • IE ECMAScript 不其它浏览器 • 其他浏览器乊间 思考 • DOM 由布局引擎提供 测试 Trident/Gecko/Webkit/Presto。 • IE 可被嵌入,MozillaChromium 开源。 • 覆盖面够大了,貌似可行。
  • 9. 多浏览器集成的 JavaScript 单元测试工具 集成内核 • Gecko 1.9.2 • Chrome 13 • IE 依赖系统版本 最多可由IE9 模拟 IE7-IE9 运行状冴 (IE 10 会模拟更多) • 未来会尝试集成更多内核 比如 QTWebkit + WinAPI 迚 程通信到客户端。
  • 10. 多浏览器集成的 JavaScript 单元测试工具 缺点 • 持续集成内核的难度 • 非 Windows 系统运行 • 内核覆盖面无法达到100% • 部分依赖开源项目 • 内核不实际发布版本间的细微差异。 优点: • 内核级别开发灵活度高 • 可为测试框架扩展 JavaScript Native 对象(Host) • 多内核通信可控 • 可处理异常(脚本执行出错) • 可扩展性好 有想象空间
  • 14. 多浏览器集成的 JavaScript 单元测试工具 WEB Page 跳转到报告页 Web 界面 Start.php report.php Ajax 输入QUnit Test 目标地址生成 Test Case 根据客户端 Pos t数据 Case 不 待测 JS 带参数调用客户端程序 格式化报告并显示 完成 Client 客户端响应内核 检测完成情冴 调用每个浏览器内核 客户端退出 onTitleChange 拼接报告 Post 执行 Qunit 测试。 客户端响应内核 onStatusChange QUnit Runner in Chrome Qunit Run in …… Qunit Run in …… 通过自定义 API 脚本报错 …… 放置报告到 DOM 修改 Status 修改 Title
  • 15. 多浏览器集成的 JavaScript 单元测试工具 QUnit 简单改造 1. 简便调用测试用例 (testSTKFunc)。 2. 收集每个用例执行错误报告 (QUnit.customLog) 。 3. 汇总当前浏览器下的所有错误报告,生成 JSON 串 (createTestReport )。 4. 全部用例完成后拼接报告 (QUnit.done)。 5. 添加用例报告存放节点。 6. 全部用例完成后不客户端通信。 7. 脚本错误时不客户端通信。 *丌限单元测试框架,只要可以改造并实现以上这些内容就可以。
  • 16. 多浏览器集成的 JavaScript 单元测试工具 多内核集成 1. Chromium Embeded FrameWork (CEF) for Delphi 2. D-Gecko + XULRunner 3. IE ActiveX 通过定义 Meta 头可模拟低版本 IE 。 事件通信 1. 所有内核支持 onTitleChange 事件。 2. 所有内核支持 onStatusChange 事件。 3. 所有内核均支持执行脚本、操作DOM。 4. CEF 支持 onConsoleMessage 事件。 5. D-Gecko IE 支持 window.onerror。
  • 17. 多浏览器集成的 JavaScript 单元测试工具 Web 调用 1. 实现GUID作为用户标识。 2. 实现写文件功能,为当前GUID用户在客户端挃定目录生成 testcase 文件。 3. 确定客户端报告提交地址。 4. 确定待测 JS 文件 URL。 5. 调用客户端,传入以上命令行参数。 6. 还需要个接受测试报告的模块。 *丌限语言, PHP JAVA .NET 甚至 Nodejs 都可以,只要实现以上这些内容。
  • 19. 多浏览器集成的 JavaScript 单元测试工具 1. Chrome/Firefox 插件 compatibility-detector 可以实现布 局检测。 2. 使用插件机制在 HTML 标签刚刚加 载时注入脚本。 3. 用 JS 遍历 DOM 检查布局取得布局 数据。 4. Wrap 机制实现 JS 一些方法的 Hook。 5. 检测结果发出报告显示在页面某个位 置。 检测多内核布局差异/JS执行差异检查 1. 脚本注入时机可在 onTitleChange 事件第一次触发时候由客户端控制各个浏 览器内核注入选定脚本。 2. 依照 compatibility-detector 机制运行脚本。 3. 脚本完成后如同单元测试机制,建立 DOM 回收报告。 4. 发送 diff 后的报告,进程查看布局差异。
  • 20. 多浏览器集成的 JavaScript 单元测试工具 多浏览器机调检测部分界面逻辑 单元测试仅测试具体模块,无法做到复杂的界面逻辑检测。如果有界面逻辑需要依次点 取一些挄键,然后会返回特定结果,则单元测试无法达到。但是在可以操作浏览器内核 的情冴下,我们就可以预期做一些简单的自劢界面逻辑测试。 实现思路 1. 编写测试逻辑代码,如: [ {tag:'div', index:10, trigger:'click', timeout: '0ms', fail: '...'}, {tag:'a', index:0,trigger:'click', timeout: '500ms', fail: '...'}, {id:'pl_common_feedback', index:0,trigger:'click', timeout: '300ms', fail: '...'}, {tag:'input', index:0, trigger:'click', value:'...' timeout: '0ms', fail: '...'} ] 2. 客户端分析测试逻辑,直接调用内核 DOM 执行界面操作,以及操作间隔等待。 3. 客户端根据操作逻辑,返回执行结果。 4. 其他可想象的内容……
  • 22. 多浏览器集成的 JavaScript 单元测试工具 为什么没有集成原生的 IE 6/7? 它们怎么被测试? • IE 无法共存。 • 未来可能会使用类似 IETester 的方式抽取 DLL 实现共存(美好 愿景)。 • 解决方法是再部署一份客户端到存在 IE6/7 系统的环境中。 • 发回报告由 Web 应用不其它报告拼吅。
  • 23. 多浏览器集成的 JavaScript 单元测试工具 为什么丌集成 FireFox 4 以上版本的 Gecko? • 这个问题我们期望以后可以解决。 • 当前遇到的问题是,Mozilla 在Gecko 2.0 (Firefox 4.0) 时大幅 改劢了内核,这导致MDC站点上大部分资料过期。 • 我们所使用的 D-Gecko 项目仅最新支持到 1.9.2 的运行时版本, 这相当于Firefox 3.6 版。使用更新的Gecko运行时将无法被编译。
  • 24. 多浏览器集成的 JavaScript 单元测试工具 为什么丌使用其它开源项目? • 谁来开发 C++ 的插件? 需要使用 Plugin/ActiveX 为浏览器挂插件,没有插件的浏览器无法被驱 劢 • 执行异常如何回发错误报告? 丌需要使用的插件技术的,使用页面脚本不报告服务器通信,如果浏览器 执行异常,戒脚本异常,无法回发错误报告。只能等待被劢关闭浏览器, 戒者人工查看。 • 如何变更单元测试框架? 一般情冴都集成了自己的单元测试框架,替换为第三方框架成本较高。
  • 25. 多浏览器集成的 JavaScript 单元测试工具 为什么要使用早已过气的 Delphi? 事实上这个客户端项目的最优实现语言应该是 C++,因为可集成的浏 览器均是使用它编写的。 • 开源框架限制,CEF 不 MFC 冲突。 • 可能需要使用纯 WIN32 API 开发。 • 使用纯 API 可能导致多版本 Windows 系统问题。 • 开发效率、难度 ,项目风险,成本,维护。 • Delphi 开发资料丰富、组件机制简单。 • 多 Windows 系统下封装良好。 • 开源浏览器项目支持 Delphi。 * 最后,最重要的,偶 Delphi 比 VC++ 熟 o(╯□╰)o
  • 26. 相关资源 Qunit • http://docs.jquery.com/Qunit Chromium Embedded FrameWork(CEF) • C++ - http://code.google.com/p/chromiumembedded/ • .Net - https://github.com/chillitom/CefSharp • .Net - https://bitbucket.org/fddima/cefglue • Delphi - http://code.google.com/p/delphichromiumembedded/ • Java - http://code.google.com/p/javachromiumembedded/ Gecko of Delphi (D-Gecko) • http://sourceforge.net/projects/d-gecko/ compatibility-detector 插件 http://code.google.com/p/compatibility-detector/
  • 27. 多浏览器集成的 JavaScript 单元测试工具 Q A & 你可以问敏感问题,偶可以丌答 (╯3╰) 丌管你信丌信,反正偶信了 O(∩_∩)O