软件自动化测试范畴很广,理论我就不说了,只针对我此次选的题目——Java自定义组件的测试,从Java事件机制的基础提及,其中有一小部分关于开源软件测试框架Abbot的简单介绍
仍是先说说Abbot吧,Abbot能够支持Java GUI组件从单元测试到集成测试,简单地说,单元测试时,你可使用Abbot的一些类库,把你要测试的GUI扔给某个方法,而后Abbot能够查找某个组件,好比特定按钮,而后对那个按钮调用一下 click(个人按钮),就能够实现“点击”的效果, 你会看到屏幕上的鼠标移动到那个按钮上并点击,颇有趣吧,固然你能够手工编写一堆代码控制鼠标移动到那个按钮上并点击,可是那样很麻烦,Abbot帮你封装了不少底层的操做。
对于一个已经作好的GUI,Abbot也能够进行脚本录制,也就是你在你的GUI上操做,Abbot自动记下你的动做,以脚本形式保存起来,之后你还能够进行重放。下面是官方介绍的一部分翻译:java
Abbot 框架
abbot提供了一个框架测试你的GUI代码,而不用考虑你的代码的当前状态。若是你喜欢进行测试驱动的开发,那么abbot提供相关工具为你生成单元测试代码。若是你已经有一堆代码但不是基于单元测试的,abbot也能够帮你生成脚本
总的来讲,abbot测试首先要得到组件的引用,而后要么模拟用户操做,要么对组件的状态进行断言。abbot提供ComponentReference得到组件的句柄,以及扩展的、相似robot的对象,用来模拟用户行为。这些操做既能够经过脚本,也能够经过java代码来实现
abbot的目标:
1.用户输入的可靠重现
GUI测试不完全的一大缘由就是不能很好的重现用户输入
2.利用脚本控制动做
使用动态解析的脚本,省去了写新的测试代码的麻烦,而且这些脚本还能直接调用java单元测试的代码
3.下降组件之间的绑定
若是修改了原有的GUI布局,组件的位置、大小改变了,那么以前的测试代码可能会失效(好比找不到新的组件位置)在不一样平台下,组件的位置大小均可能改变,那样测试框架就不能跨平台了。abbot使用查询机制,只要能查询到组件,即便位置大小改变了,abbot同样能够运行
4.底层使用低级的操做系统事件来实现高级的语义行为
java.awt.robot提供了便利的方法直接生成事件,可是其功能太过基础,不方便使用,abbot在其上抽象出方便的接口(正如Swing对基本窗口的抽象同样)。经过抽象语句,你能够很容易的推断出测试代码的功能,好比像下面这样:
Click on 100, 100
Move to 110, 110
Press down key
Press down key
Click on 110, 110app
Select "blue" from the color list框架
5.支持动态录制高级语义事件
你能够手工编辑xml文件,也能够一条条修改测试语句,可是有了Costello editor ,电脑会帮你记录全部用户动做,并自动生成脚本
6.用户动做的记录和生成是可扩展的
你能够本身扩展上述框架,以支持自定义的组件。虽说用基本的robot能够在不修改测试代码的状况下测试任何东西,不过使用扩展的好处在于:你的代码更加抽象,就好像调用CalRow(10)而不是click(x,y),其中x、y指的是第10行的中心坐标ide