模块化Java:声明式模块化
本文是模块化Java系列文章的第4篇,介绍的是声明式模块化。文中描述了组件如何以声明的方式来定义并组织在一起,而无需让代码依赖于OSGI API。
作者 赵劼 发布于 2009年4月13日 上午7时23分
在浏览器中打开页面并加以判断,无疑是测试一个Web应用程序最直接的方式。借助一款合适的自动测试工具或框架,测试人员就可以在一定程度上从繁重的手动测试工作中解放出来。Ruby平台下的Watir无疑是这方面的姣姣者,因此被大量用于Web应用程序的回归测试或验收测试。不过对于使用.NET Framework的技术团队来说,Watir不一定是最好的选择。目前社区中已经出现了几款.NET平台下的Web测试框架,测试人员现在就可以使用自己最熟悉的语言来实现同样的功能,并与自己的开发环境无缝集成。
WatiN
WatiN是Watir的“应对之作”,使用C#语言开发,不过能够使用任意.NET语言编写测试代码。WatiN 1.0只支持IE浏览器,不过从2.0版本开始也能自动操作FireFox(需安装插件)浏览器了。其最新版本是2月19日发布的2.0 CTP3,对面向FireFox的相关功能进行了增强并修改了一些bug。其附属项目WatiN Test Recorder支持对浏览器操作的捕获,并自动生成测试代码。WatiN Test Recorder目前刚发布了alpha版本,您可以从它的主页上跟进其最新消息。WatiN是一个开源项目,使用Apache License 2.0协议发布。
Selenium
严格说来,Selenium是一套完整的Web应用程序测试系统,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持JavaScript的浏览器上。Selenium Core由一种指定格式的HTML文件驱动,在一定程度上增强了测试套件(Test Suite)的可读性。Selenium Remote Control允许测试人员使用常见的语言(自然包括C#等.NET语言)编写测试代码,并支持不同操作系统下的各种主流浏览器。Selenium Grid的作用是将测试分发至多台机器,这样便可大大加快测试速度。与WatiN相同,Selenium也是一款同样使用Apache License 2.0协议发布的开源框架。
LTAF
Lightweight Test Automation Framework for ASP.NET(轻量级ASP.NET自动测试框架,下文简称为LTAF)是一款由ASP.NET QA团队开发的框架,并用于产品的回归测试。测试人员能够使用任意.NET代码编写测试,并使用内置的API操作DOM元素。LTAF最近发布了April Update并包含了框架代码,它的Release Note记录了框架的使用方式。赵劼最近在博客中谈到了利用LTAF对ASP.NET MVC应用程序中的视图作独立的单元测试,他在文章中对LTAF有这样的评价:
……虽然在某些方面(例如DOM元素的选取)不如其“竞争对手”,但是LTAF自有其独到之处:
- 由于直接在浏览器中运行,它天生便支持现有的——以及未来可能出现的任意浏览器。
- 由于直接部署在被测试的网站中,因此测试代码和网站页面是在同一个进程中。
第一点优势自不必说,而第二点更是关键。试想WaitN和Selenium,都是通过编写代码在浏览器中打开页面。这意味着我们的在测试代码和被测试的网页分别在不同的进程中。在这个前提下,如果我们要将测试代码中定义的数据传递给被测试的网页(也就是视图对象),我们就必须进行跨进程的通信。而无论怎么实现,都逃不过“序列化”一途,这无疑增加了复杂度。而使用LTAF之后,这个问题瞬间烟消云散了,因为我们可以直接在内存中“传递”测试数据,一切都只是个引用而已。
不过任何事物都具有两面性,LTAF也有一些难以天生的,而且是永远无法弥补的缺点。例如:
- 由于LTAF将待测试的页面放置在Frame中,因此该页面上的window.top等基于浏览器frame结构的属性会被改变。
- 由于LTAF的本质是使用JavaScript来操作DOM,这意味着任何会阻塞程序进行的操作(例如alert)都不能使用,否则将阻塞整个测试过程。
幸运的是,这两点都不会成为严重的问题。对于第一种情况,我们只需要编写一个自定的getTop方法来替换直接访问windows.top的做法即可。而第二种情况——老赵从来不喜欢alert或confirm这种“纯浏览器功能”,因为它们会带来很差的用户体验,更何况现在的JavaScript类库/框架都能很轻松的做出这种效果,您觉得呢?
比较
虽然老赵推荐使用LTAF,不过究竟哪款测试框架最适合您的项目,还需要读者根据需要自己的需要做出判断。以下表格列出了他们的横向比较:
| 框架 | WatiN | Selenium | LTAF |
|---|---|---|---|
| 浏览器支持 | IE / FireFox | IE / FireFox / Opera / Safari | 任意 |
| 自动生成代码 | 有,但目前不支持FireFox浏览器 | 有 | 无 |
| 开源协议 | Apache Licence 2.0 | Apache Licence 2.0 | 不开源,但发布代码 |
| 其他 | / | 可将测试分布于多台机器执行,加快速度 | 测试代码与网站在同一进程中。 |
本采访是在伦敦举行的QCon2009上记录的,Ian Robinson和Jim Webber探讨了如何将Web作为整合平台以及REST在理论上和实践中的好处。
项目管理对于项目成败至关重要,但实践中每个项目都有自己的独特性,没有现成的解决方案可以套用。书中从应对实际风险的角度出发,讲述了从项目启动、项目规划到项目结束的整个管理流程,展示了作者的思考过程。本迷你书从原书中精选出5个章节。
在这个演讲中,Fred将会揭示敏捷的一些外在因素,并会重点关注敏捷获得成功的内在原因。从案例研究和真实的项目经验来看,Fred认为:工具、管理体系都不能让你变得敏捷。敏捷的成功,植根于士气高涨、充分授权的工作者身上,他们能够以不同以往的方式思考问题。
Eben Hewitt的新书《Java SOA Cookbook》从Java实现的角度讨论了面向服务架构。Eben在书中讨论了SOA基础、工具、最佳实践和SOA治理等主题。
Mark Richards的新书《Java消息服务》第二版覆盖了JMS的许多主题, 包括发布和订阅模式以及点对点模式,消息过滤和事务等。InfoQ与Mark谈论了跟他的新作。
3 条回复
关注此讨论 回复