——对动态可继承对象的动态操作
曾经测试过这样的产品,所有、或者大部分功能模块中,都包含一些同特性的子功能,其在功能及页面上存在大量继承关系。以至于这些对应子功能的操作使用逻辑相同、页面控件属性相同。
这些特点描述的种种,预示着测试代码在结构上可以使用面向对象程序开发思想。
一个通俗的举例:
记得我们大多数测试软件中,功能页面的“帮助”功能么!
通常,在重点功能模块中,都会包含一个“帮助”按钮。我们一起分析一下。
1.
所有的“帮助”按钮触发后都会调用同一篇“文档”。
2.
所有的“帮助”按钮的某些属性一致,如
text
属性都是“帮助”。
3.
所有的“帮助”功能的测试逻辑都是一样的,只是测试内容不同。
好的,我们可以这样理解,
1
、
2
、
3
可以作为属性来描述这个功能测试的类。每个类的
实例化对象——“各个功能模块中的帮助按钮的测试方法”
,都会继承
1
、
2
、
3
的特点。
设计测试方法:
1.
click
“帮助”按钮。
2.
判断是否弹出帮助文档
3.
在被测试模块的页面上获取功能名称作为帮助链接内容的预期检查结果。
4.
通过预期检查结果判断在帮助文档的当前实际显示结果是否正确。
到这里我们完成了一类的功能的测试方法的设计,或者我们可以叫它测试组件。
可以根据此,来完成所有可继承的测试方法。
通常做到这里,会遇到一个严重的问题,可继承测试方法的丰富,也可以说是复杂,让测试开发团队之间的推广形成一定的障碍。
我是这样解决的
——
再编写一个测试驱动函数,用来判断页面中的属性内容,自动的判断需要调用哪写测试方法进行测试。就不需要测试开发人员去了解现在复杂的测试方法了。
比如,当测试逻辑层代码选中了某个功能,则我们的测试驱动函数通过描述对象编程,会判断这个功能页面是否包含“帮助”按钮,从而判断出是否调用我们之前设计的测试方法。