命令行方式执行YUITest单元测试
用命令行方式自动执行单元测试首先是方便。重要的是用YUITest+Selenium+Hudson可以形成一个完整的CI系统。Zakas开发的YUITest Selenium Driver可以实现用命令行方式自动执行YUITest写的单元测试。虽然用Rhino + Envjs + Qunit也能实现,但毕竟不是在真实的浏览器下测试,同时测一些DOM交互操作时还会出问题。
用Selenium IDE直接录的test case只能完成简单的UI功能测试。YUITest很强,可以测Ajax异步交互,可以模拟各种用户操作,详细介绍(http://developer.yahoo.com/yui/yuitest/)。在Resig统计的Top 10 Testing Tools排老四(http://www.flickr.com/photos/jeresig/4139206863/sizes/o/)
环境要求:
1. JRE 1.5+
2. Tomcat (Mac OS X下安装说明http://www.malisphoto.com/tips/tomcatonosx.html)
3. Selenium Core, Selenium RC (http://seleniumhq.org/download/)
安装YUITest selenium driver:
到这里 http://github.com/nzakas/yuitest 将最新源码git clone到本地,再用ant编译。最后得到3个jar文件:
-rw-r--r-- 1 kejun staff 890K 12 8 10:56 yuitest-coverage-0.3.7.jar
-rw-r--r-- 1 kejun staff 768K 12 8 10:56 yuitest-coverage-report-0.3.7.jar
-rw-r--r-- 1 kejun staff 797K 12 8 10:56 yuitest-selenium-driver-0.4.3.jar
前两个用来生成报告的这里不讨论。yuitest-selenium-driver-0.4.3.jar是利用Selenium自动执行YUITest单元测试。
为了省事,也可以直接到这里下载:http://github.com/nzakas/yuitest/downloads
Selenium Core部署到Tomcat下。
Selenium RC解压在任意目录下,它包含下面几个目录:
drwxr-xr-x@ 13 kejun staff 442B 6 9 2009 selenium-dotnet-client-driver-1.0.1
drwxr-xr-x@ 7 kejun staff 238B 6 9 2009 selenium-java-client-driver-1.0.1
drwxr-xr-x@ 9 kejun staff 306B 6 9 2009 selenium-perl-client-driver-1.0.1
drwxr-xr-x@ 9 kejun staff 306B 6 9 2009 selenium-php-client-driver-1.0.1
drwxr-xr-x@ 10 kejun staff 340B 6 9 2009 selenium-python-client-driver-1.0.1
drwxr-xr-x@ 3 kejun staff 102B 6 9 2009 selenium-ruby-client-driver-1.0.1
drwxr-xr-x@ 9 kejun staff 306B 6 9 2009 selenium-server-1.0.1
一个selenium server和几个不同语言的client。这里我用了java版的,把selenium-java-client-driver.jar拷到JAVA_HOM/lib/ext下。如:Mac OS X是复制到/Library/Java/Home/lib/ext/下。
环境就算搞完了。下面从YUI 2文件包的tests目录下随便找个单元测试页面试试。比如测试拖拽tests/dragdrop.html。但注意目前YUI 2.8.0的YUITest还不支持Selenium Driver,2.8.1就会支持了。没关系先从github上存一份:http://github.com/yui/yui2/raw/master/build/yuitest/yuitest-min.js 修改dragdrop.html用最新的yuitest-min.js。
ok,开始测试。启动selenium server:
$ java -jar selenium-server-1.0.1/selenium-server.jar
00:17:39.674 INFO - Java: Apple Inc. 1.5.0_20-141
00:17:39.712 INFO - OS: Mac OS X 10.5.8 i386
00:17:39.813 INFO - v1.0.1 [2696], with Core v@VERSION@ [@REVISION@]
00:17:40.185 INFO - Version Jetty/5.1.x
00:17:40.186 INFO - Started HttpContext[/,/]
00:17:40.188 INFO - Started HttpContext[/selenium-server,/selenium-server]
00:17:40.188 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
....
执行测试:
$ java -jar yuitest-selenium-driver-0.4.3.jar http://localhost/~kejun/yui/tests/dragdrop.html
Running http://localhost/~kejun/yui/tests/dragdrop.html
Testsuite: yuisuite on firefox
Tests run: 8, Failures: 0, Ignored: 0
很酷。同时在当前目录下生成测试报告文件:
rw-r--r-- 1 kejun staff 376B 12 8 17:40 test-firefox-yuitests1260265210491.xml
YUITest Selenium driver的命令行格式:
Usage: java -jar yuitest-selenium-driver-x.y.z.jar [options] [test files]
Global Options
-h, --help Displays this information.
--browsers <browsers> Run tests in these browsers (comma-delimited).
--conf <file> Load options from <file>.
--coveragedir <dir> Output coverage files to <dir>.
--erroronfail Indicates that a test failure should cause
an error to be reported to the console.
--host <host> Use the Selenium host <host>.
--port <port> Use <port> port on the Selenium host.
--resultsdir <dir> Output test result files to <dir>.
--silent Don't output test results to the console.
--tests <file> Loads test info from <file>.
--yuitest <version> The version of YUI Test to use (2 or 3).
-v, --verbose Display informational messages and warnings.
二月 8th, 2010 at 1:38 上午
[...] 2009年前端技术领域回顾 Posted on 2010年02月8日, 1:37 上午, by kejun, under 想法. 在过去的2009年,如果你关注前端技术发展动态的话,可能会积累一大堆信息,有的保存在书签里,有的在推特上,有的在你的博客里。整理整理挺有意思,当初看到那些文章那些事儿的小小兴奋,又会油然而生。或许,经过一年的沉淀,再次回顾会有新的思考和启发吧。 09年,Javascript框架发展到了成熟期,几个老牌库都发布了新版本: 2月 - jQuery 1.3.2发布,YUI 2.7.0发布 9月 - Prototype 1.6.1发布,YUI 2.8.0发布,YUI 3.0.0 GA发布 10月 - Script.aculo.us 1.8.3发布,MooTools 1.2.4发布 12月 - Dojo 1.4发布,jQuery 1.4 alpha 1发布 随着Javascript库越来越成熟,库的自身发展也面临难以突破的瓶颈。大多只是继续修复bug,兼容新版的浏览器,提升性能,功能的增加变得越来越有限。这里面变化最大的要算YUI 3,和传统的库不同YUI 3更注重前端开发的组织和结构。这种框架思想的转变,也许是未来发展的方向。基于开源Javascript库的开发模式已经被普遍接受,所以09年很少再出现像jQuery、YUI这样的公用库,但是越来越多的专用库纷纷出现,像图形处理和3D的库,如 GLGE(http://www.glge.org, 一个WebGL库)、Raphaël(http://raphaeljs.com,一个跨浏览器操作SVG的库)、SVG Web(http://code.google.com/p/svgweb,一个提供SVG跨浏览器支持的库)等。像手机应用方面的库,如PhoneGap(http://phonegap.com)、jQTouch(http://www.jqtouch.com)等。 1月,白宫网站(http://www.whitehouse.gov)改版,使用开源的jQuery库,华丽的交互效果,成为史上最酷的政府网站。 7月,BBC开源了内部的库Glow(http://www.bbc.co.uk/glow/),很像jQuery的库,向后兼容IE5.5。发布后立刻遭到jQuery作者John Resig的猛烈批评。 11月,Google也开源了内部的库Closure Library(http://code.google.com/closure/library)。虽然随后陆续有人批评它的代码细节有不少低效的地方,但丝毫不影响它是一个功能强大的库,而且在库的模块化设计方面很有特点。 新的浏览器大战实际上成了Javascript引擎大战。从08年Chrome的V8挑起“事端”开始,09年各个浏览器厂商纷纷换新的引擎。6月,Firefox3.5携新的Javascript引擎TraceMonkey发布,同期Safari4.0.1正式版发布,引擎换成Nitro。12月,Opera10.5 alpha版发布,引擎换成Carakan。纷纷叫板V8。作为前端开发者还是很乐意看到这么激烈的竞争场面。相反,09年初众人瞩目的IE8发布,全面兼容CSS2.1,在标准支持方面进步不少。但仍对HTML5、CSS3、Canvas紧闭大门。IE6的市场占有率虽然持续下滑,但仍占据很高的比例,越来越成为前端开发的障碍。Facebook、Youtube和Twitter等热门网站相继抛弃对IE6的支持,提示用户升级浏览器。 7月,W3C终止XHTML2.0的工作,转向HTML5。HTML5并不是一套完全不同的标准,而是在HTML的基础上扩展了更多有用的标签,如video、audio等,同时增加新的离线存储、跨文档通讯等机制,这些都有利于开发更强大的Web应用,所以受到广大开发者和浏览器厂商的青睐。虽然HTML5的草案还在制订中,但几乎所有最新的浏览器都有不同程度的支持,IE8也开始支持跨文档通讯。2010年HTML5势必还会有更大的发展,围绕它的话题不会中断。 12月,ECMA-262正式命名为ECMAScript,ECMAScript第5版标准几乎全票通过。 09年前端技术的热门话题: 1.网站性能优化的讨论进一步深入。之前只是讨论如何让页面下载更快,09年讨论的话题已经延伸到页面的渲染速度、图片无损优化技术、Ajax性能、CSS选择器性能,Javascript执行速度、手机性能优化等。Steve Souders的新书《更快的网站》(Even Faster Web Sites)很有代表性。09年出现很多很好很强大的网站性能优化方面的工具,像MySpace的MSFast、Aol的WebPageTest、微软的Doloto、雅虎的YSlow2.0、Google的PageSpeed、Speed Tracer、dynaTrace等。另外,使用dataURI实现内联图片的技术是前端性能优化的一个突破。 2.由于HTML5和CSS3不同浏览器支持的程度不同,相应的出现了各种兼容的技术。这个网站统计了目前浏览器支持的情况:http://a.deveria.com/caniuse。针对浏览器的这种现状,向前兼容同时向后优雅退化的理念被提出。针对不同浏览器有不同的设计方案,像针对Firefox、Safari、Chrome、Opera可以基于CSS3设计网站的UI,对于IE6设计一版可以接受的退化方案。这样可以引导用户逐渐放弃低端浏览器。 3.服务器端的Javascript前两年也讨论过,但只是实验性质的,并没有突出的优势。09年JSConf欧洲大会爆料的Node.js不同,它很好的利用了Google的高速引擎V8,可以实现一个非堵塞的事件驱动的Web Server,具有很高的性能。很适合做像comet这种长链接应用的服务器端。对于前端开发者来说,只是Javascript加上一组服务器端操作的API库,所以很容易掌握。也许2010年可以看到更多基于Node.js开发的应用。 4.Javascript开发越复杂,就越需要借鉴传统语言的更严谨的开发方式。于是Javascript单元测试的讨论频频出现在09年一些技术大会上,如: Ron Adams在YUIConf2009大会上的主题:Automated Integration Testing with YUITest, Selenium and Hudson (http://yuilibrary.com/yuiconf2009/#yuitest) John Resig在雅虎所做的演讲:Testing, Performance Analysis, and jQuery 1.4 (http://developer.yahoo.com/yui/theater/video.php?v=resig-testing) Jason Huggins在JSconf2009上的主题:Hacking Selenium (http://www.slideshare.net/hugs/hacking-selenium-jsconf) 老牌Javascript单元测试框架JSUnit太老了,目前流行用jQuery的Qunit或YUI的YUITest。同时再结合Selenium实现自动化的Javascript单元测试是目前比较好的方案。我之前也也过一篇文章:命令行方式执行YUITest单元测试(http://hikejun.com/blog/?p=499) 5.Google在9月发布一款插件-Chrome Frame。IE安装这个插件后,基本上就等于切换到Chrome了,这样IE就可以支持Chrome所支持的HTML5、CSS3、Canvas等标准。Chrome Frame的开发者是Alex Russell,他也是著名框架Dojo的作者。Chrome Frame的出现对IE是一个不大不小的冲击。 6.Palm Pre 6月份正式发售好评如潮。它使用的操作系统是WebOS。WebOS上的应用完全是用Html、CSS和Javascript开发的,这给前端开发者提供了更大的空间。9月,著名前端技术网站Ajaxian的创始人、Bespin的开发者Ben Galbraith和Dion Almaer加入Palm,我相信会进一步推动WebOS的发展。 7.前端大牛PPK09年做了大量手机浏览器的兼容性测试。详细见:http://quirksmode.org/m/table.html。随着3G的普及手机开发注定会成为热门技术,09年无论国内国外iPhone应用开发和Android应用开发都很热,但随着手机浏览器越来越强大,会不会重蹈N年前Web2.0和桌面软件的覆辙呢。无论怎样前端开始向更多元化的终端延展,这对前端开发者是件好事。 09年给我留下深刻印象的一些技术会议: 2009/3/18-20,Mix09 官网:http://visitmix.com 视频资料:http://videos.visitmix.com/MIX09 2009/4/24-25,JSConf 2009 官网:http://jsconf.us/2009 2009/11/7-8,JSConf(柏林) 2009 官网及会议资料:http://jsconf.eu/2009 2009/6/22-24,Velocity 2009 官网:http://en.oreilly.com/velocity2009 2009/9/14-16,Ajax Experience 2009 官网:http://ajaxexperience.techtarget.com/conference/index.html 会议资料: http://www.slideshare.net/ajaxexperience2009/slideshows 2009/10/28-29,YUIConf 2009 官网:http://yuilibrary.com/yuiconf2009/ 2009/11/20,FullFrontal 2009 官网:http://2009.full-frontal.org/ 2009/12/19,第四届D2前端技术论坛 官网:http://www.d2forum.org/d2/4/ [...]