SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
多浏览器集成的 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
完事儿 谢谢

Mais conteúdo relacionado

Mais procurados

Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.twWei-Yu Chen
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Gelis Wu
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Jeff Chu
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Gelis Wu
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具國昭 張
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formaljameslabs
 
Tcon分享 芈峮
Tcon分享 芈峮Tcon分享 芈峮
Tcon分享 芈峮mijun_hlp
 
[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例YC Ling
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程Simon Su
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Eric Xiao
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践Na Lee
 
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageNuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageAlan Tsai
 
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1twMVC
 
Wxpython In Action
Wxpython In ActionWxpython In Action
Wxpython In Action智锋 范
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geekJohnson Gau
 
测试驱动的前端开发初探
测试驱动的前端开发初探测试驱动的前端开发初探
测试驱动的前端开发初探hua qiu
 
LABVIEW的自动化测试之路
LABVIEW的自动化测试之路LABVIEW的自动化测试之路
LABVIEW的自动化测试之路Dean Lee
 

Mais procurados (19)

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

Destaque

【前端测试】淘宝前端测试实践
【前端测试】淘宝前端测试实践【前端测试】淘宝前端测试实践
【前端测试】淘宝前端测试实践taobao.com
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editortaobao.com
 
box model
box modelbox model
box modeljay li
 
Master key system part 09
Master key system   part 09Master key system   part 09
Master key system part 09canei2day
 
運用Closure Compiler 打造高品質的JavaScript
運用Closure Compiler 打造高品質的JavaScript運用Closure Compiler 打造高品質的JavaScript
運用Closure Compiler 打造高品質的JavaScripttaobao.com
 
Seo And Search Engine Ranking Report Splinternetmarketing.Com Internet Market...
Seo And Search Engine Ranking Report Splinternetmarketing.Com Internet Market...Seo And Search Engine Ranking Report Splinternetmarketing.Com Internet Market...
Seo And Search Engine Ranking Report Splinternetmarketing.Com Internet Market...SEO, LLC dba www.SplinternetMarketing.com
 
Dịch vụ quảng cáo, thiết kế và phát triển website
Dịch vụ quảng cáo, thiết kế và phát triển websiteDịch vụ quảng cáo, thiết kế và phát triển website
Dịch vụ quảng cáo, thiết kế và phát triển websiteHai Yen Tran
 
Master key system part 10
Master key system   part 10Master key system   part 10
Master key system part 10canei2day
 
FlexNet Delivery and FlexNet Operations On-Demand Tips & Tricks
FlexNet Delivery and FlexNet Operations On-Demand Tips & TricksFlexNet Delivery and FlexNet Operations On-Demand Tips & Tricks
FlexNet Delivery and FlexNet Operations On-Demand Tips & TricksFlexera
 
Hola me llamo Laura
Hola me llamo  LauraHola me llamo  Laura
Hola me llamo Laurasbolader
 
Simplifying social business
Simplifying social businessSimplifying social business
Simplifying social businessKathy Herrmann
 
水墨、水彩畫欣賞
水墨、水彩畫欣賞水墨、水彩畫欣賞
水墨、水彩畫欣賞Josephine C
 
從高空看台灣
從高空看台灣從高空看台灣
從高空看台灣Josephine C
 

Destaque (20)

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

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

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

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

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

Mais de taobao.com

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

Mais de taobao.com (20)

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