Web页面测试随着Internet和Intranet的快速发展,Web技术已经对工商业、医疗业、教育、政府、娱乐以及我们的生活产生了深远的影响。Web平台能支持几乎所有媒体类型的信息发布,容易为最终用户存取,更多传统的信息和数据系统正在逐渐迁移到互联网上:电子商务正迅速增长,范围广泛、复杂的云应用和云计算也正在Web环境中出现。基于Web的系统在变得越来越复杂和强大的同时,Web应用软件的缺陷危机也越来越严重。早在1998年YogeshDeshpande和SteveHansen就提出了Web工程的概念。Web工程提倡使用一个过程和系统的方法来开发高质量的基于Web的系统。在Web工程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。Web环境具有浏览器平台不兼容、网络环境多样化、应用复杂化等诸多特性,所以,传统测试方法的某些方面不适用于网络测试。Web的自动化测试方法包含几个方面,比如,测试脚本技术、人工测试过程自动化、验证自动化等等。在测试驱动开发模式中,测试已成为迭代开发过程中起推动作用的环节,但与此同时,大量的重复性的测试代码却造成了大量资源的浪费。随着自动化测试技术的成熟和自动化测试工具的广泛应用,人们重新认识到了测试的价值:最优的质量成本,最高的质量保证。自动化测试的优势在软件领域很明显的:减少了测试时间,使测试程序统一化,便于管理,节约了质量保证的成本,提高了测试运行的效率,改善了软件产品的质量。现在一般人都有使用浏览器浏览网页的经历,用户虽然不是专业人员但是对界面效果的印象是很重要的。如果开发人员注重这方面的测试,那么验证应用程序是否易于使用就非常重要了。很多人认为这是测试中最不重要的部分,但是恰恰相反,界面对不懂技术的客户来说都是相当关键,特别是在简洁、美观、易用等方面。方法上可以根据设计文档,如果够专业的话可以由专业美工人员,来确定整体风格,特别是页面风格。然后根据这个设计好的页面,生成静态的HTML、CSS等甚至生成几套不同的方案来讨论,或者交给客户评审,最后形成统一风格的页面/框架。页面测试的主要页面元素有:●页面元素的容错性列表(如输入框、时间列表或日历)。●页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮、单选按钮、复选框、列表框、超链接、输入框等等)。●页面元素的容错性是否存在。第Ⅳ部分图形用户界面测试篇?252?●页面元素的容错性是否正确。●页面元素的基本功能是否实现(如文字特效、动画特效、按钮、超链接)。●页面元素的外形、摆放位置(如按钮、列表框、复选框、输入框、超链接等)。●页面元素是否显示正确(主要针对文字、图形、签章)。●元素是否显示(元素是否存在)。页面测试主要包括以下几个方面的内容:●站点地图和导航条位置是否合理,是否可以导航等。●页面内容布局是否合理,文字是否准确、简洁,字体和字号是否符合多数读者习惯。●背景/色调是否合理、美观,是否符合多数用户审美要求。●页面在窗口中的显示是否正确、美观(在调整浏览器窗口大小时,屏幕刷新是否正确),表单样式大小、格式是否适宜。●是否对提交数据进行验证(如果在页面部分进行验证的话)等。●链接的形式、位置、是否易于理解等。对Web应用的测试可以分为页内测试(IntraPageTest)和跨页测试(InterPageTest)两种。页内测试相当于单元测试,着重于测试单个页面的行为是否正确。根据模块化思想,在进行页面划分时,一般使每个页面具有单一、具体的功能,可以直接表达用户的一个目标。本章我们主要考虑Web页内测试的主要方法。●人工走查:①通过页面走查,浏览确定使用的页面是否符合需求。可以结合兼容性测试不同分辨率下的页面显示效果,如果有影响,则应该交给设计人员由他们提出解决方案。②可以结合数据定义文档查看表单项的内容、长度等信息。③对于动态生成的页面最好也能浏览查看。如Servelet部分可以结合编码规范,进行代码走查。是否支持中文,如果数据用XML封装,要做的工作可能会多一点。●使用Web页面测试工具:工具可以提供很多测试方法,可以用来模拟许多手工操作,如单击按钮、给文本框输入字符或数字、鼠标双击事件等,从而实现了测试的自动化。这对于需要输入大量信息的界面测试来说是十分重要的。Web页面测试的基本准则:符合页面/界面设计的标准和规范,满足灵活性、正确性、直观性、舒适性、实用性、一致性等要求。直观性:①用户界面是否洁净、不唐突、不拥挤,界面不应该为用户制造障碍,所需功能或者期待的响应应该明显,并在预期的地方出现。②界面组织和布局合理吗?是否允许用户轻松地从一个功能转到另一个功能?下一步做什么明显吗?任何时刻都可以决定放弃或者退回、退出吗?输入得到承认了吗?菜单或者窗口是否深藏不露?③有多余功能吗?软件整体抑或局部是否做得太多?是否因有太多特性而把工作复杂化了?是否感到信息太庞杂?④如果其他所有努力失败,帮助系统真能帮忙吗?一致性:①快捷键和菜单选项,在Windows中按F1键总是得到帮助信息。②术语和命令,整个软件使用同样的术语吗?特性命名一致吗?例如,Find是否一直叫Find,而不是有时叫Search?③软件是否一直面向同一级别用户?带有花哨用户界面的趣味贺卡程序不应该显示泄第8章Web页面测试?253?露技术机密的错误提示信息。④按钮位置和等价的按键。大家是否注意到对话框有OK按钮和Cancel按钮时,OK按钮总是在上方或者左方,而Cancel按钮总是在下方或右方?同样原因,Cancel按钮的等价按键通常是Esc,而OK按钮的等价按钮通常是Enter,要保持一致。灵活性:①状态跳转,灵活的软件实现同一任务时通常会有多种选择方式。②状态终止和跳过,具有容错处理能力。③数据输入和输出,用户希望有多种方法输入数据和查看结果。例如,要在写字板中插入文字,可用键盘输入、粘贴、从6种文件格式读入、作为对象插入,或者用鼠标从其他程序拖动。舒适性:①恰当,软件外观和感觉应该与所做的工作和使用者相符。②错误处理,程序应该在用户执行严重错误的操作之前提出警告,并允许用户恢复由于错误操作导致丢失的数据。正如大家认为undo/redo功能是理所当然应有的。③性能,快不见得是好事,要让用户看清程序在做什么,它是有反应的。8.1Web页面测试工具介绍基于Web的测试基本上采用两种思路和方法。一种可以称为“浏览器测试”,这种测试通常是模拟浏览器端的一些操作,比如在TextBox中输入一些文本,选择表单组件中的某个部件等。因为可以看见具体的操作界面,这种方法更多地被应用到UI和本地化方面的测试中。另一种方法称为“协议测试”。这是建立在HTTP协议之上的JavaScript级别的测试,通过JavaScript伪协议或者POST、WebService向服务器发送请求,然后对服务器响应回来的数据进行解析、验证。一些功能测试会更多地采用这种方法。最简单的应用就是检查链接的有效性:向服务器发送URL请求,检查响应回来的数据,来判断链接是否指向了正确的页面。本章所介绍的Web页面测试工具事实上能够很好地支持上述测试方法,并且它们均是以JUnit为基础扩展出来的,但应用模式各有不同。1.HttpUnitHttpUnit是在JUnit之上构建的测试框架,它支持Web应用的黑盒测试和in-container容器内测试。作为功能测试工具,可以用它来验证软件是否符合业务需求,以及是否在可视的级别符合预期行为。有趣的是,HttpUnit的基础代码实际上跟测试没什么关系。开发HttpUnit库的目的是加强HTTP对Web应用的访问,它支持的特征包括状态管理(cookies)、请求提交、应答解析(HTML解析),以及网络爬虫(WebSpider)工具包需要的一些特征。HttpUnit还有一个支持容器内测试的类ServletUnit。在JUnit提供的断言功能和结果报告功能的基础上,HttpUnit成了一个非常有用的测试Web应用的工具。可以在。2.JWebUnitJWebUnit是在HttpUnit上创建的一个辅助工具包,它减少了测试Web程序所需要编第Ⅳ部分图形用户界面测试篇?254?写的代码。简单地说,可以把它当作HttpUnit的宏程序库,提供到HttpUnit代码段的快捷方式,简化Web程序测试中的大多数行为。HttpUnit提供的相对底层的接口可以让测试人员定制许多事情。如果用HttpUnit可以解决问题,那么用JWebUnit也可以。JWebUnit的好处是它对代码有更好的控制。可以在上找到JWebUnit。3.StrutsTestCaseStrutsTestCase是为测试Struts应用而在JUnit基础上创建的测试框架。Struts是用Java开发Web应用的程序员非常喜欢的模型-视图-控制器(MVC)平台,它简化了数据、表示和逻辑分离的易维护性组件式代码开发。Struts使Web程序容器间(in-container)的功能测试和单元测试变得更复杂了,因为它们夹在servlet容器和程序之间。这就意味着这个测试框架要认识Struts,能处理Struts的容器间测试。由于不需要知道Web程序的内部实现,所以尽管HttpUnit的黑盒测试仍然工作得很好,也仍然无法用HttpUnit做Struts应用的容器间测试,因为HttpUnit是独立地位于程序和servlet容器之间。StrutsTestCase是专为Struts程序的容器间测试而设计的。StrutsTestCase可以从获得。4.SeleniumSelenium是一个用于Web应用程序测试的工具,它将核心组件内插到浏览器中。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,所有的测试都是可见的。支持的浏览器包括IE、Mozilla、Firefox等。这个工具的主要功能包括:测试与浏览器的兼容性,即测试应用程序是否能够很好地工作在不同浏览器和操作系统之上,测试系统功能,检验软件功能和用户需求。Selenium可从上下载。5.HtmlUnitHtmlUnit是一个具有浏览器基本功能的Java组件。HtmlUnit是JUnit的扩展测试框架之一,它支持HTML文件,并提供了一些API,允许访问网页、填写表格、点击链接等。HtmlUnit将返回文档模拟成HTML,这样我们便可以直接处理这些文档了。HtmlUnit使用诸如table、form等标识符将测试文档作为HTML来处理。它同样需要遵循JUnit测试框架结构的Java测试程序。这里要注意的是:前面介绍的HttpUnit主要是在http的request和response层次上进行操作,而HtmlUnit则是在比http高一些的HTML层次上进行操作。HtmlUnit可从上下载。8.2Web页面测试工具之一——HttpUnitHttpUnit是SourceForge下面的一个开源项目,它是基于JUnit的一个测试框架,主要关注于测试Web应用,解决使用JUnit框架无法对远程Web内容进行测试的弊端。当前的最新版本是1.7。为了使用HtpUnit能正常运行,您应该安装JavaJDK1.3.1或以上版本。第8章Web页面测试?255?1.HttpUnit的工作原理HttpUnit不需要使用浏览器。我们可以使用HttpUnit直接调用要测试的代码。从本质上来说,HttpUnit是模拟Web浏览器,并且HttpUnitAPI可以模拟浏览器的许多行为,包括表单提交、JavaScript、HTTP认证和Cookie等。我们也可以在装入Web页面时用HttpUnitAPI分析返回的内容。HttpUnit通过模拟浏览器的行为,