自动化功能测试,或用户界面(UI)测试,以难以维护而著称,而且没有足够的能力找出缺陷。然而,在大多数情况下出现故障的原因不是测试工具或者测试框架,而是个别测试本身跟踪设计不良。

  下面有七个功能测试设计技巧,让UI测试更加可维护和更强力。

  不要只是点击 要检查后续状态

  很多自动化测试工具包含一个特性,是可以自动记录一系列动作,然后回放。尽管这样的记录/回放功能在创建测试时容易驾驭,但是单纯的记录/回放动作会导致不良测试。具体而言,记录/回放测试并不会检测应用中操纵元素后的应用状态。

  点击、键入、选择以及其他的功能都会以某种方式改变应用的状态。好的测试会在应用中操作元素后检查本身的结果。如果自动化测试跟随一个链接,要让测试检查结果页是否正确。如果测试生成一个报告,要检查报告内容是否正确。

  等待,请勿停止

  通常,一个应用在结果可以用测试检查之前需要一些时间。这一点在Ajax在Web浏览器调用中尤为普遍。简单地进行测试停止或者在检查这样的结果之前休眠几秒是很吸引人的,但是停止或者休眠是不良实践,如果应用用过长时间返回,然后测试会生成错误失败。如果应用更快地返回,然后测试在转移的过程中是浪费时间。

  取代停止或者休眠,让测试等待应用的具体方面出现了。这不仅仅让测试减少错误失败的倾向,而且也导致了更强的测试,因此测试根据生成的测试等待方面,实际等待检查应用结果。

  使用分离定位 不是索引

  做测试的时候要是像“点击这个页面上的第三个链接”或者“选择列表上的第五个元素”这样更好了。代替根据索引操纵应用的具体方面,为这样的元素找出或者创建识别符值得努力。

  如果命令链接改变了,或者命令列表改变了,测试会导向一种预期外的路径,维护这样不可预知的测试相当难。

  用正则表达式检查排列次序

  应用以正确的序列显示给用户非常重要。无论是表格的列数还是列表的元素,或者是页面本身的文本,自动化测试检测事物正确的排列很重要。

  这有一堆事情应该以“一”、“二”、“三”的顺序出现。测试可以使用类似的正则表达式检查出这些事情序列。下面是一个使用简化的正则表达式“glob”的例子,“glob”在Selenium以及其他自动化测试工具中可用:

以下是引用片段:
| getText | glob:one*two*three |
| click | sort_thing |
| getText | glob:three*two*one |