【JSP开源代码栏目提醒】:网学会员,鉴于大家对JSP开源代码十分关注,论文会员在此为大家搜集整理了“第8章Web页面测试教程 - 期刊论文”一文,供大家参考学习!
第8章 Web页面测试 随着 Internet 和 Intranet 的快速发展,Web 技术已经对工商业、医疗业、教育、政府、娱乐以及我们的生活产生了深远的影响。
Web 平台能支持几乎所有媒体类型的信息发布,容易为最终用户存取,更多传统的信息和数据系统正在逐渐迁移到互联网上:电子商务正迅速增长,范围广泛、复杂的云应用和云计算也正在 Web 环境中出现。
基于 Web 的系统在变得越来越复杂和强大的同时,Web 应用软件的缺陷危机也越来越严重。
早在 1998 年Yogesh Deshpande 和 Steve Hansen 就提出了 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.1 Web 页面测试工具介绍 基于 Web 的测试基本上采用两种思路和方法。
一种可以称为“浏览器测试”,这种测试通常是模拟浏览器端的一些操作,比如在 TextBox 中输入一些文本,选择表单组件中的某个部件等。
因为可以看见具体的操作界面,这种方法更多地被应用到 UI 和本地化方面的测试中。
另一种方法称为“协议测试”。
这是建立在 HTTP 协议之上的 JavaScript 级别的测试,通过 JavaScript 伪协议或者 POST、Web Service 向服务器发送请求,然后对服务器响应回来的数据进行解析、验证。
一些功能测试会更多地采用这种方法。
最简单的应用就是检查链接的有效性:向服务器发送 URL 请求,检查响应回来的数据,来判断链接是否指向了正确的页面。
本章所介绍的 Web 页面测试工具事实上能够很好地支持上述测试方法,并且它们均是以 JUnit 为基础扩展出来的,但应用模式各有不同。
1. HttpUnit HttpUnit 是在 JUnit 之上构建的测试框架,它支持 Web 应用的黑盒测试和 in-container 容器内测试。
作为功能测试工具,可以用它来验证软件是否符合业务需求,以及是否在可视的级别符合预期行为。
有趣的是,HttpUnit 的基础
代码实际上跟测试没什么关系。
开发 HttpUnit 库的目的是加强 HTTP 对 Web 应用的访问,它支持的特征包括状态管理cookies、请求提交、应答解析HTML 解析,以及网络爬虫Web Spider工具包需要的一些特征。
HttpUnit 还有一个支持容器内测试的类 ServletUnit。
JUnit 提供的断言功能和结果报告功能的基础上, 在 HttpUnit成了一个非常有用的测试 Web 应用的工具。
可以在 www.httpunit.org 上找到 HttpUnit。
2. JWebUnit JWebUnit 是在 HttpUnit 上创建的一个辅助工具包,它减少了测试 Web 程序所需要编 254 第Ⅳ部分 图形用户界面测试篇写的
代码。
简单地说,可以把它当作 HttpUnit 的宏程序库,提供到 HttpUnit
代码段的快捷方式,简化 Web 程序测试中的大多数行为。
HttpUnit 提供的相对底层的接口可以让测试人员定制许多事情。
如果用 HttpUnit 可以解决问题,那么用 JWebUnit 也可以。
JWebUnit 的好处是它对
代码有更好的控制。
可以在 http://jwebunit.sourceforge.net/上找到 JWebUnit。
3. StrutsTestCase StrutsTestCase 是为测试 Struts 应用而在 JUnit 基础上创建的测试框架。
Struts 是用 Java开发 Web 应用的程序员非常喜欢的模型-视图-控制器MVC平台,它简化了数据、表示和逻辑分离的易维护性组件式
代码开发。
Struts 使 Web 程序容器间in-container的功能测试和单元测试变得更复杂了,因为它们夹在 servlet 容器和程序之间。
这就意味着这个测试框架要认识 Struts,能处理 Struts 的容器间测试。
由于不需要知道 Web 程序的内部实现,所以尽 也仍然无法用 HttpUnit 做 Struts 应用的容器间测试,管 HttpUnit 的黑盒测试仍然工作得很好,因为 HttpUnit 是独立地位于程序和 servlet 容器之间。
StrutsTestCase 是专为 Struts 程序的容器间测试而设计的。
StrutsTestCase 可以从 http://strutstestcase.sourceforge.net/获得。
4. Selenium Selenium 是一个用于 Web 应用程序测试的工具,它将核心组件内插到浏览器中。
Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,所有的测试都是可见的。
支持的浏览器包括 IE、Mozilla、Firefox 等。
这个工具的主要功能包括:测试与浏览器的兼容性,即测试应用程序是否能够很好地工作在不同浏览器和操作系统之上,测试系统功能,检验软件功能和用户需求。
Selenium 可从 http://seleniumhq.org/download/上下载。
5. HtmlUnit HtmlUnit 是一个具有浏览器基本功能的 Java 组件。
HtmlUnit 是 JUnit 的扩展测试框架之一,它支持 HTML 文件,并提供了一些 API,允许访问网页、填写表格、点击链接等。
HtmlUnit 将返回文档模拟成 HTML,这样我们便可以直接处理这些文档了。
HtmlUnit 使用诸如 table、form 等标识符将测试文档作为 HTML 来处理。
它同样需要遵循 JUnit 测试框架结构的 Java 测试程序。
这里要注意的是:前面介绍的 HttpUnit 主要是在 http 的 request和 response 层次上进行操作, HtmlUnit 则是在比 http 高一些的 HTML 层次上进行操作。
而HtmlUnit 可从 http://htmlunit.sourceforge.net/上下载。
8.2 Web 页面测试工具之一 ——HttpUnit HttpUnit 是 SourceForge 下面的一个
开源项目,它是基于 JUnit 的一个测试框架,主要关注于测试 Web 应用,解决使用 JUnit 框架无法对远程 Web 内容进行测试的弊端。
当前的最新版本是 1.7。
为了使用 HtpUnit 能正常运行,您应该安装 JavaJDK1.3.1 或以上版本。
第8章 Web 页面测试 255 1. HttpUnit 的工作原理 HttpUnit 不需要使用浏览器。
我们可以使用 HttpUnit 直接调用要测试的
代码。
从本质上来说,HttpUnit 是模拟 Web 浏览器,并且 HttpUnit API 可以模拟浏览器的许多行为,包 HTTP 认证和 Cookie 等。
JavaScript、括表单提交、 我们也可以在装入 Web 页面时用 HttpUnitAPI 分析返回的内容。
HttpUnit 通过模拟浏览器的行为,处理页面帧frames、cookies、页面重定向redirects等。
通过 HttpUnit 提供的功能,我们可以和服务器端进行信息交互,将返回的网页内容作为普通文本、XML DOM 对象或者是作为链接、页面框架、图像、表单、表格等的集合进行处理,然后使用 JUnit 框架进行测试;还可以导向一个新的页面,然后进行新页面的处理,这个功能使我们可以处理一组在一个操作链中的页面,轻松地测试 Web 页面。
HttpUnit 可以被分为两个核心组件: ● 一个发送请求并接收响应的 Web 客户机 ● 一个分析并验证响应内容的方法集 在这里,我们要澄清一个概念——使用 HttpUnit 是不是相当于进行单元测试? 与其名称可能暗示的相反,HttpUnit 实际上并不做单元测试。
实际上,HttpUnit 更适合做功能测试或“黑盒”测试。
测试人员用 HttpUnit 编写的测试从外部查询 Web 服务器并使我们能够分析接收到的响应。
功能测试在 XP 方法中起着重要的作用,这种方法强调功能测试,使开发者可以获取有关系统整体状态的反馈。
使用单元测试,有时会丢失大方向。
在将整个站点投入到实际使用的过程中,自动功能测试可以使开发者从手工检查站点区域的繁重工作中解脱出来。
在 Web 环境中,有些专家认为每个“请求-响应”周期都是原子的,这些原子的周期可以依次被作为单独的
代码单元,因此使用 HttpUnit 可以被认为是在进行这种意义上的单元测试。
2. HttpUnit 和其他商业工具的对比 商业工具一般使用录制、回放功能来实现测试,但是这里有个缺陷,就是当页面设计被修改以后,这些被记录的行为就不能重用了,需要重新录制才能继续测试。
举个例子:如果页面上有个元素最先的设计是采用单选框,这个时候你开始测试,那么这些工具记录的就是你的单项选择动作;但是如果你的设计发生了变化,比如说我改成了下拉选择,或者使用文本框来接收用户输入,那么这时候,你以前录制的测试过程就无效了,必须重新录制。
而 HttpUnit 因为关注点是这些控件的内容,所以不管控件的外在表现形式如何变化,都不会影响已确定测试的可重用性。
最重要的是,由于 Web 应用的快速发展以及 Web 编程错误容易产生的特征,市场上出现的许多商业测试产品都用详细的 GUI 来引导开发者进行测试。
另一方面,开放源
代码的 HttpUnit 无需许可费用,而且使用简单我们将在下面看到这一点。
正是它的简单性,使它如此受欢迎。
虽然没有漂亮的 GUI, HttpUnit Java 源
代码的可用性和它的简单 API, 但使开发者能够创建他们自己的测试解决方案以满足特定组织的需要。
HttpUnit 作为基础, 以 256 第Ⅳ部分 图形用户界面测试篇我们可以用最小的成本构建复杂的测试套件。
8.2.1 HttpUnit 环境建立 可以从 HttpUnit 项目网站— http://httpunit.sourceforge.net2上下载到最新版的HttpUnit, —HttpUnit 应运行在支持 Java JDK 1.3 及更高版本的系统上。
将 HttpUnit 解压缩到 c:/httpunit后面将使用“httpunit_home”引用该目录,目录结构应该如下所示: httpunit --- jars //包含创建、测试及运行 HttpUnit 所必需的 jar --- lib // 包含 HttpUnit jar --- doc //文档 --- tutorial //基于 servlet Web 网站的测试优先开发的简单教程 --- api // javadoc --- manual // 用户手册 --- examples // 采用 HttpUnit 编写的一些示例程序 --- src // HttpUnit 源
代码 --- test // HttpUnit 单元测试的一些很好的例子 只有 lib 和 jars 这两个目录对于运行 HttpUnit 来说是必需的。
我们必须将 HttpUnit jar添加到系统的 classpath,而其他的一些 jar 均为可选。
由于我们考虑 Web 页面是在 Eclipse 中开发、执行的,所以环境配置都是以 Eclipse 为例。
如果使用其他的开发工具,则可根据以下步骤进行环境配置。
1 启动 Eclipse,建立一个 Java 项目。
2 将httpunit_home/lib/.jar、httpunit_home/jars/.jar 加入到该 Java 项目的 Javabuild Path 变量中。
8.2.2 HttpUnit 的工作方式 1. 在使用 HttpUnit 进行页面测试时,需要特别关注如下几个类 ● WebConversation 是 HttpUnit 框架中最重要的类,它用于模拟浏览器的行为。
● WebRequest 模仿客户请求,通过它可以向服务器发送信息。
第8章 Web 页面测试 257● WebResponse 模拟浏览器,获取服务器端的响应信息。
下面通过示例介绍上述类的具体应用:1 类的最基本应用System.out.printlnquot直接获取网页内容:quot// 建立一个 WebConversation 实例WebConversation wc new WebConversation// 向指定的 URL 发出请求,获取响应WebResponse wr wc.getResponse quot http://localhost:6888/HelloWorld.html quot // 用 getText 方法获取响应的全部内容// 用 System.out.println 将获取的内容打印在控制台上System.out.println wr.getText 2 通过 Get 方法访问页面并加入参数System.out.printlnquot向服务器发送数据,然后获取网页内容:quot//建立一个 WebConversation 实例WebConversation wc new WebConversation//向指定的 URL 发出请求WebRequest req new GetMethodWebRequestquot http://localhost:6888/HelloWorld.
jsp quot //给请求加上参数req.setParameterquotusernamequotquot姓名quot//获取响应对象WebResponse resp wc.getResponsereq//用 getText 方法获取响应的全部内容//用 System.out.println 将获取的内容打印在控制台上System.out.printlnresp.getText3 通过 Post 方法访问页面并加入参数System.out.printlnquot使用 Post 方式向服务器发送数据,然后获取网页内容:quot//建立一个 WebConversation 实例WebConversation wc new WebConversation//向指定的 URL 发出请求WebRequest req new PostMethodWebRequestquot http://localhost:6888/HelloWorld.
jsp quot//给请求加上参数req.setParameterquotusernamequotquot姓名quot//获取响应对象WebResponse resp wc.getResponsereq//用 getText 方法获取响应的全部内容//用 System.out.println 将获取的内容打印在控制台上 258 第Ⅳ部分 图形用户界面测试篇 System.out.printlnresp.getText 大家可以关注上面
代码中打了下划线的两处内容,应该可以看到,使用 Get、Post 方法访问页面的区别就是使用的请求对象不同。
2. 处理页面中的链接 找到页面中的某一个链接,然后模拟用户的点击行为,获得它指向文件的内容。
比如在页面 HelloWorld.html 中有一个链接,它显示的内容是 TestLink,它指向另一个页面TestLink.html。
TestLink.html 页面只显示 TestLink.html 页面的几个字符。
下面是处理
代码: System.out.printlnquot获取页面中链接指向页面的内容:quot //建立一个 WebConversation 实例 WebConversation wc new WebConversation //获取响应对象 WebResponse resp wc.getResponse quot http://localhost:6888/HelloWorld.html quot //获得页面链接对象 WebLink link resp.getLinkWith quotTestLinkquot //模拟用户单击事件 link.click //获得当前的响应对象 WebResponse nextLink wc.getCurrentPage //用 getText 方法获取响应的全部内容 //用 System.out.println 将获取的内容打印在控制台上 System.out.println nextLink.getText 3. 处理页面中的表格 表格是用来控制页面显示的常规对象,HttpUnit 使用数组来处理页面中的多个表格,我们可以用 resp.getTables方法获取页面中所有的表格对象。
它们依照出现在页面中的顺序保存在一个数组里面。
Java 所以取第一个表格时应该.
上一篇:
goahead_webserver_源码分析
下一篇:
高校体育教学观念的思考