图形用户界面测试
界面是软件和用户交互的最直接的层面,界面决定了用户对软件的印象,GUI,设计良好GUI—轻松愉悦的感觉。Web应用+网页制作--->GUI设计的兴起.
流行的界面风格:多窗体风格,单窗体风格,资源管理器风格
特性:易用性,规范性,帮助,合理性,美观与协调,菜单位置,独特性,快捷方式的结合,安全性考虑,多窗口的应用与系统资源。
GUI测试重点是正确性,易用性和视觉效果,文字检查和拼写检查是GUI测试的重要环节。
用户通过GUI拖动鼠标,单击按钮等来驱动软件完成需要的功能,这个涉及到:
GUI输入主要是由一系列的事件或行动完成,拥有大量需要测试的状态,输入和状态转移不仅仅与当前的输入事件有关,而且还与以前的输入事件相关
GUI软件的输入和事件的排列组合的数据非常巨大,执行路径比较多(想想100阶乘和101阶乘的区别)
GUI中包含了大量复杂的组件和控件,允许多个窗口被激活,彼此之间存在一些同步机制,窗口中每个对象可以影响和控制其他对象
GUI界面之间相互影响,相互依赖。--耦合度高
GUI软件是基于事件和消息的。
GUI测试中的很多方法是重复而枯燥的。
除了考虑图形对象测试的本身特性,系统工作流程的测试也是一个重点,数据库设计,程序结构设计最终要界面设计的
GUI测试的基本过程:1.执行用户操作,2.获取检测状态,3.对比验证内容
基本原理:测试者在运行应用程序的同时,把他的所有的动作(键盘操作,鼠标操作)捕获或者录制下来,生成一个脚本文件,这个脚本文件以后可以被”回放“(playback),也就是按照上一次的所有执行动作重复执行一遍,实现自动运行和测试。在实际的测试过程中,同一动作的重复执行意义不大,而是根据测试需求为其进行一些必要的修改。
GUI自动化测试工具的捕获/录制模式--->原型级的实现--->插入检查点,维护脚本--->编程修改,GUI自动化测试:软件规范过程,在录制前设计好测试用例.
GUI自动测试工具:开源的Java的GUI测试工具—Selenium。SWTBot用于SWT,基于Eclipse应用的GUI测试工具,提供了能简化访问SWT和Eclipse组件的API,基于Apache2许可协议。其测试运行配置和JUnit非常的相似,测试方法的结构也很相似
1.JavaGUI基础类库应用测试
JavaGUI: SWT/JFace,Swing,AWT(Abstract WindowingToolkit)--->java.awt,JFC的一部分--->提供了JavaApplet,JavaApplicaton中可用的GUI中的基本组件,Swing自己绘制控件,调用本地图形子系统中的底层例程,而不是依赖于OS的高层模块。模仿原生系统,纯Java,轻量级,大量运用MVC模式的GUI工具包。SWT/JFace—Eclipse--高效的GUI程序
1.1JFCUnit单元测试工具的介绍
Xp测试驱动开发观念,单元测试技术,Java-->JUnit+Ant,JUnit的局限性,HttpUnit--Web测试,GUI--JFCUnit。
JFCUnit是JUnit的扩展框架,扩展了针对SwingGUI的单元测试工具,提供的一些基本功能:
①捕获取窗体/对话框的句柄
②在一个进程的组件容器内,确定所需要的组件
③模拟触发组件的事件
④用于GUI测试的多线程方法
JFCUnit从2.0开始,提供XML录制和回放功能,允许使用者快速,自动地生成/编辑用于驱动测试的脚本。XMLAPI是公开的,可以定义自己的XML标签句柄。
1.2JFCUnit基本测试方法
思路:提供了很多方法,可以用来模拟许多本地应该有传统测试人员手工进行的触发事件:单击按钮,在文本矿中输入字符,数字,鼠标双击事件,从而实现测试的自动化。
两种方式模拟交互:①Junit.Extensions.Jfcunit.JFCTestHelper的EevenQueue来激活事件队列②使用Junit.Extensions.Jfcunit.RobotTestHelper来封装java.awt.Robot
JFCUnit的测试用例类似于任何其他的JUnit测试用例。其主要不同在于它的
测试用例类应继承自基类Junit.Extensions.Jfcunit.JFCTestCase,而不是基
类:Junit.Framework.TestCase。
1.3 JFCunit环境的建立
JFCUnit—SourceForge.net—Eclipse插件安装—配置路径(jfcunit.jar,jakarta-regexp-1.2.jar{正则表达式java包,如果没有这个包,jfc就会发生错误})
1.4测试资源应用
JFCunit是扩展了Junit,具有很多属于自己的测试资源。
1.4.1 JFCUnit核心函数的应用方式
⑴setUp()和tearDown()
在junit框架中用于测试的初始化和结束测试,释放资源
setUp()在测试方法调用前,负责初始化测试方法所需要的测试环境
tearDown()在每个测试方法被调用之后调用,负责撤销测试环境
流程:测试开始-->setUp()-->testXXX-->tearDown()-->测试结束
⑵Find-Component
JFCUnit中对对象测试的基础是捕获测试对象的实例,关键是find...Component系列API的应用.具体查找主要基于两个方面,对象组件的”Name”数据和容器中的Index。
PublicComponent find(final Container cont,final int index){ returnfind(new Container[] {cont},index); } |
⑶assert函数
assertNull(Stringmessage,Object object); assertNotNull(Stringmessage,Object object); assertEquals(Stringmessage,Object expected,Object actual); assertTrue(Stringmessage,boolean condition); assertFalse(Stringmessage,boolean condition); assertSame(Stringmessage,Object expected,Object actual); assertNotSame(Stringmessage,Object expected,Object actual); |
⑷JFCTesthelper和TestHelper
JFCTesthelper继承TestHelper中很多用于自动画界面操作的方法。
1.5 JFCUnit的使用--GUI类和实验
突然间发现自己做了很多的重复的工作,处在互联网3.0的时代,我们应该充分的利用网络,以下是我google的一些JFCUnit的文章,写得还是相当的不错的。
JFCUnit实战:http://www.ltesting.net/ceshi/open/kydycsgj/2007/0525/5733.html
使用JFCUnit进行GUI单元测试 :http://www.blogjava.net/wukaichun600/archive/2006/10/19/76026.html
以上仅仅是google后第1,2页显示的结果,google让知识的获取变得更加的简单了。知识的来源不再是仅仅局限于书本,通过搜索引擎(google,baidu)从Internet上获取知识渐渐成为一个更为便捷有效的方式。这件事情既是机遇也是挑战。
机遇:人类从未如此便捷的获取知识过,搜索引擎加速了信息的流通,使得我们可以更为方便的整合知识。
挑战:随着可获取的信息量的膨胀,在如此庞大的信息中识别出有效的信息成为了一个问题。此外,搜索引擎提供的普遍的知识原始的材料,如何处理和整合这些信息从而创造出更有价值的知识无疑将成为当代知识分子的所面临的挑战。
1.6JFCUnitXML测试框架
JFCUnitXML是一个建立的XML框架之上的测试框架。XML框架支持Swing和非Swing的测试,框架图示如下:
JFCUnitXML允许开发者编写XML代码来开发用于各种测试目的的测试集。录制生成XML的方式使大多数的测试生成过程自动化,可复用性高
1.3 JFCunit环境的建立
JFCUnit—SourceForge.net—Eclipse插件安装—配置路径(jfcunit.jar,jakarta-regexp-1.2.jar{正则表达式java包,如果没有这个包,jfc就会发生错误})
1.4测试资源应用
JFCunit是扩展了Junit,具有很多属于自己的测试资源。
1.4.1 JFCUnit核心函数的应用方式
⑴setUp()和tearDown()
在junit框架中用于测试的初始化和结束测试,释放资源
setUp()在测试方法调用前,负责初始化测试方法所需要的测试环境
tearDown()在每个测试方法被调用之后调用,负责撤销测试环境
流程:测试开始-->setUp()-->testXXX-->tearDown()-->测试结束
⑵Find-Component
JFCUnit中对对象测试的基础是捕获测试对象的实例,关键是find...Component系列API的应用.具体查找主要基于两个方面,对象组件的”Name”数据和容器中的Index。
PublicComponent find(final Container cont,final int index){ returnfind(new Container[] {cont},index); } |
⑶assert函数
assertNull(Stringmessage,Object object); assertNotNull(Stringmessage,Object object); assertEquals(Stringmessage,Object expected,Object actual); assertTrue(Stringmessage,boolean condition); assertFalse(Stringmessage,boolean condition); assertSame(Stringmessage,Object expected,Object actual); assertNotSame(Stringmessage,Object expected,Object actual); |
⑷JFCTesthelper和TestHelper
JFCTesthelper继承TestHelper中很多用于自动画界面操作的方法。
1.5 JFCUnit的使用--GUI类和实验
突然间发现自己做了很多的重复的工作,处在互联网3.0的时代,我们应该充分的利用网络,以下是我google的一些JFCUnit的文章,写得还是相当的不错的。
JFCUnit实战:http://www.ltesting.net/ceshi/open/kydycsgj/2007/0525/5733.html
使用JFCUnit进行GUI单元测试 :http://www.blogjava.net/wukaichun600/archive/2006/10/19/76026.html
以上仅仅是google后第1,2页显示的结果,google让知识的获取变得更加的简单了。知识的来源不再是仅仅局限于书本,通过搜索引擎(google,baidu)从Internet上获取知识渐渐成为一个更为便捷有效的方式。这件事情既是机遇也是挑战。
机遇:人类从未如此便捷的获取知识过,搜索引擎加速了信息的流通,使得我们可以更为方便的整合知识。
挑战:随着可获取的信息量的膨胀,在如此庞大的信息中识别出有效的信息成为了一个问题。此外,搜索引擎提供的普遍的知识原始的材料,如何处理和整合这些信息从而创造出更有价值的知识无疑将成为当代知识分子的所面临的挑战。
1.6JFCUnitXML测试框架
JFCUnitXML是一个建立的XML框架之上的测试框架。XML框架支持Swing和非Swing的测试,框架图示如下:
JFCUnitXML允许开发者编写XML代码来开发用于各种测试目的的测试集。录制生成XML的方式使大多数的测试生成过程自动化,可复用性高
JFCUnitXML基础
XML是一种基于SGML的标记语言,成为网络数据交互的强大工具。XML提供了定义和处理GUI测试的一个有效的方法,在JFCUnit类中开发出了XML接口,XML执行接口。
XMLJunit框架:定义特性—可以在作用域范围内允许它在测试用例之间使用,定义在XML中的各个测试用例可以访问定义在父类或者祖父类的特性,父级可以通过执行特性名来隐式访问,或者”../”父访问路径来显式访问。特性可以通过${name}访问。程序可以在测试集和测试用例上定义,父类能够在更高级层次上定义---可以生成程序库。
两个保留程序:setUp,tearDown—对应TestCase.setUp|tearDown
扩展XML接口,taghandler结合Java后端开发并写入XML中,taghandler通过XML脚本定义进行注册/不注册,taghandler的概念:
Suitetags: 1.引入定义在其他XML文件中有关文件中的有关集的文件标签,2.程序标签定义3.在测试用例间共享特性标签
Suiteof Suites: <suitename=”Abc”> <filename=”a.xml”/> <filename=”b.xml”/> <filename=”subdir/c.xml”> </suite> 程序标签 <suite name=”Procedure Example”> <procedure name=”Login”> ….. </procedure> <procedure name=”Logout”> ….. </procedure> <test name=”Login”> <procedurecall=”Login”> </test> </suite> |
特性标签
标签名对应于相应值
作用域
访问文法:${name}syntax
定义:<propertyname=”debug” value=”true”/>
其他定义
向程序员传递数据
判定标签进行分支跳转
对各种标签进行循环处理
Chose/When/Otherwise,Echo, Noop, Assert/Fail, Evaluate, Foreach, Indexof,Dump,
AssertHasFocus,AssertEnabled,AssertTableCellContains,AssertTextFieldContains
1.7 小节
JFCUnit XML:说到底就是JFCUnit的一种高一个层次封装,通过XML来描述测试用例,然后使用某中类型的代码生成器将XML描述转换为JFCUnit代码,从而避免了手工Code。高层次的抽象带来的好处就是可以屏蔽一些繁琐的细节,从而让程序员专注更加重要的应用上,而不是浪费时间在底层细节上。这中思想在很多的方面被广泛的应用,操作系统,编程语言,编译系统等等。
2 Web页面测试
Internet技术发展,Web系统变得越來越复杂,Web工程:测试,确认,验收。Web环境:浏览器平台不兼容,网络多样化,应用复杂等诸多特性。
Web测试分类:页内测试(IntraPageTest)和跨页测试(InterPageTest)
页内测试的方法:人工走查,使用web页面测试工具.
页面测试准则:直观,一致,灵活,舒适
2.1web页面测试工具
web页面测试的两种思路:1.浏览器测试2.协议测试(在Http上的JavaScript级测试,JavaScript伪协议, POST, WebService).在一些功能测试中,协议测试用的比较的多。
Web测试工具:
1.HttpUnit:HttpUnit是在JUnit之上构建的测试框架,支持Web应用的黑盒测试和in-container容器内测试。作为功能测试工具,也可以用它验证软件是否符合业务需求,以及是否在可视的级别符合预期的行为。HttpUnit的目的加强HTTP对Web应用的访问,支持的特性:状态管理(cookies),提交请求,应答解析(HTML解析),以及网络爬虫(webspider)。HttpUnit还有一个支持容器内测试的类ServletUnit.JUnit提供的断言功能和结果报告的基础上,HttpUnit提供了一个非常有用的web应用测试工具。www.httpunit.org.
2.JWebUnit:HttpUnit上创建的一个辅助工具包,减少测试web程序所要编写的代码,简单当作HttpUnit的宏程序库,提供到HttpUnit代码段的快速方式,简化web程序测试中的大多数行为,HttpUnit的底层接口可以让测试人员定制很多事情,JWebUnit对代码有更好的控制。jwebunit.sourceforge.net
3.StrutsTestCase:是为了测试Struts应用而在Junit基础上创建的测试框架,Structs(MVC模式)使web程序容器间的功能测试和单元测试变得更复杂了。Struts使web程序容器之间(in-container)的功能测试和单元测试变得复杂了,Struts处于servlet容器和程序之间,HttpUnit独立于程序和容器之间.StrutsTestCase转为Struts程序的容器间测试而设计的.strutstestcase.sourceforge.net
4.Selenium:用于web应用程序测试的工具,将核心组件插入到浏览器中,整个测试直接在浏览器中运行,如同真正的用户在操作一样,所有的测试都是可见的。支持的浏览器:IE,Mozilla,Firefox等.测试兼容性,测试系统功能。seleniumhq.org/download
5.HtmlUnit:具有浏览器基本功能的Java组件,HtmlUnit是Junit的扩展测试框架之一。支持HTML,提供API
2.2HttpUnit
工作原理:模拟浏览器行为,处理页面帧(frames),cookies,页面重定向(redirects)等,通过HttpUnit提供的功能,可以和服务器进行信息交互,将返回的网页内容作为普通文本,XMLDOM对象或者链接,页面框架,图像,表单,表格等集合。
核心组件:
发送请求并接受响应的web客户机
分析并验证响应内容的方法集
HttpUnit—功能测试--极限编程(XP)中起到重要的作用
商业的web工具都是通过录制回放实现的,HttpUnit关注的重点是控件的内容,而不是控件的外在表现形式.HttpUnit无GUI,开源,API简单性—灵活性和强大
2.2 HttpUnit的使用
google一下可以找到很多关于这个的,个人决定不再增加冗余信息。列举一二个人觉得比较好的。
使用HttpUnit进行集成测试 :http://www.blogjava.net/relax/archive/2005/01/27/743.html
HttpUnit基础教程:http://wenku.baidu.com/view/ed3be4f77c1cfad6195fa7d0.html
除此以外,不要忘记HttpUnit官方网站以及研究HttpUnit源代码这样的方法
2.3JWebUnit
JwebUnit是基于Java的用于测试网络程序的框架,架构在HttpUnit之上----即JWebUnit以HttpUnit和JUnit单元测试框架为基础,适合做Web应用的验收测试。JWeb是HttpUnit的高层封装,提供访问Web应用程序的高级API,组合一组断言。JWebUnit是以jar文件形式提供的,方便使用,JWebUnit轻量级集成HtmlUnit和Selenium。
2.3.1 环境建立:sourceforge.net/projects/jwebunit --说穿了,就是一些jar包,在使用JWebUnit的时候将其添加到构建路径中
2.3.2 JWebUnit应用方法
依然google,不增加无用信息:
JWebUnit官方地址:http://sourceforge.net/projects/jwebunit/?source=directory
JWebUnit For Web Regression Tests: http://www.intertech.com/Blog/jwebunit-for-web-regression-tests/
备注:国外的人写的技术博客含金量还相当的高,一方面人家没有语言障碍,二不像国内这么浮躁(社会环境所致)。虽然有点语言的障碍,但是如果想从事IT这一行的话,英语就是一项必不可缺的的技能:因为最新的技术总是用英文写的或者最早转换的语言就是英文。而且国内的技术水平落后国际有5到10年的差距,当然这个数据不是一陈不变的,但是学习并阅读英文资料总是有好处的,当然刚一开始时可能会不太适应,但是过一段时间就好了。至少个人是这么认为的。
参考文献:
[1]软件测试实验指导教程/蔡建平, 清华大学出版社, 2009.11
相关文章:
软件测试实验学习笔记系列5-单元覆盖测试