敏捷自动化测试(5)

发表于:2015-02-28来源:uml.org.cn作者:不详点击数: 标签:
从这种角度来看,录制脚本是下策,上策应该是让测试脚本大幅简化,并且具备良好的可读性和可维护性,以达到人工编写很容易的程度。 以上只是笔者

  从这种角度来看,“录制”脚本是“下策”,“上策”应该是让测试脚本大幅简化,并且具备良好的可读性和可维护性,以达到人工编写很容易的程度。

  ——以上只是笔者的一点差异化见解,对业界优秀的测试工具没有任何冒犯之意!

  (二)降低测试脚本对技术实现依赖度的实现思路

  Web页面开发中的技术实现细节主要包括UI框架的选择及版本升级、页面样式设计、页面布局设计,因此我们的主要目标就是降低测试脚本对这些因素的依赖。

  为了便于测试脚本的解析和组织管理,目前还不能直接写形如“点击(保存)按钮”这样的纯自然语言,但可以设计成接近自然语言的领域专用语言(DSL:Domain Specific Language),本文采用XML来实现这种DSL。比如:

<event id="[button]保存"  name="click"/>

  这种超级清晰、简短的测试脚本与实际海量的页面源码之间有一条鸿沟,我们可以通过“封装”来屏蔽。下面以ExtJS的Button控件为例来示意如何完成这种封装:

  Button的界面展现如下:

  实际生成的页面源码DOM结构如下(省略部分非关键属性):

<div id="button-1032" class="x-btn x-box-item x-btn-default-small 
        x-noicon x-btn-noicon >
    <em id="button-1032-btnWrap">
        <button id="button-1032-btnEl" class="x-btn-center"
                 autocomplete="off" role="button">
            <span id="button-1032-btnInnerEl">Cancel
            <span id="button-1032-btnIconEl" class="x-btn-icon "/>
        </button>
    </em>
</div>

  我们封装所要做的主要工作就是解析出测试脚本中定义的关键信息(button、保存、click),结合对应页面源码的DOM结构,翻译成W3C标准的定位方式(如,XPath)。通过XPath就可以定位到页面上的任何控件。

  对于测试脚本(),翻译后的XPath可以是(//button/span[text()='Cancel'])。

  同理,其它测试脚本还可以包括:

  树节点展开/关闭

<event id="[treeNode]部门" name="open"/>
<event id="[treeNode]部门" name="close"/>

  Grid翻页

<event id="[grid]人员列表" name="nextPage"/>

  它们的封装实现比Button稍微复杂一些,但原理是一样的。

  (三)增强测试脚本浏览器兼容性的实现思路

  这个就比较简单了,只要选用标准化程度高、厂商支持度高、扩展性强的第三方底层实现即可,笔者推荐采用Selenium WebDriver。

  通过上面的介绍,有些读者或许会有个疑问:“如果一个Web应用没有采用任何UI框架、而且编码又极为不规范,那么你这种方案岂不就不适用了?”

  答案是肯定的。但笔者认为此类Web应用如果想要发展下去,其瓶颈还停留在开发环节,对其进行自动化回归测试的投入产出比不是很大。

  此外,为了进一步提高Web应用的可测试性,笔者在实际工作中总结了一些前台页面开发的最佳实践,供大家参考:

  1、页面采用单帧实现

  如果页面上的frame/iframe嵌套很多的话,控件的定位会比较麻烦,并且影响展现速度。

  2、兼容Firefox

  Firefox有很多强大插件,如Firebug、FirePath,非常有助于在开发、测试过程中的调试问题。

原文转自:http://www.uml.org.cn/Test/201307154.asp