围绕自动化测试开展持续集成(2)

发表于:2013-11-28来源:InfoQ作者:殷坤点击数: 标签:自动化测试
众所周知,没有自动化测试的持续集成是伪持续集成。但笔者了解的很多做持续集成的项目都存在着自动化测试用例很不充分的问题。 上述持续集成案例

众所周知,没有自动化测试的持续集成是“伪”持续集成。但笔者了解的很多做持续集成的项目都存在着“自动化测试用例很不充分”的问题。

上述持续集成案例中是如何做到充分自动化测试的呢?笔者认为有如下几个要点,希望可以引发大家的思考:

  1. 测试团队负责产品的持续集成;.
  2. 先推行自动化测试后实施持续集成;
  3. 把自动化测试用例通过率和增长率作为迭代的关键度量指标;

  兼容性测试

  现在软件需要兼容的环境越来越多,包括操作系统、应用服务器、数据库、浏览器,像上面案例中的产品还要兼容主流虚拟化服务(比如,VMware 、XenServer、KVM)的各种版本。如果全靠人工测试来保证兼容性,是不太现实的事情。

  兼容性测试有个特点,就是如果不兼容,往往在一些主要流程上就能明确的体现出来,一般不用深入到每个业务细节,也不用靠人来主观分析。因此也非常适合通过自动化测试来完成。

  下面分享一个笔者在撰文的前一天刚刚遇到的实际案例(如下图所示)。

  这个一个最基本的用户维护界面,里面包括必填信息和可选信息(比如,生日)。在一次自动化测试中,Web UI层面的“用户信息修改”用例出现了如下异常:

  Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'ext_date' at row 1

  这个功能后台业务接口是有单元测试用例对应的,并且也做了一些边界值测试(比如,“生日”属性为空),但遗漏了另外一个边界条件(空字符串),而恰恰如果界面不选择“生日”,传到后台的就是空字符串。Web UI层面最基本的测试用例恰恰弥补了这个缺憾。

有些人可能会质疑:如果界面不选择“生日”,传到后台的也是空(null),那么这个Web UI测试用例不也一样发现不了这个Bug嘛。

确实如此,但换个角度想一下,如果这样的话,这个“Bug”即使遗漏出去,也永远不会被用户发现。

这正体现了Web UI层面自动化测试的意义——比其它层面的自动化测试更代表用户!

  写到这里,可能会有敏锐且尖锐的读者继续提出质疑:“这么表面的缺陷在手工测试阶段一定会发现的,怎么会轮到通过Web UI自动化回归测试来发现呢?”

  我们来回顾一下上面的异常信息“Caused by: com.mysql.jdbc.MysqlDataTruncation…”。是的,这个缺陷只有在使用MySQL数据库时才出现,而日常开发和手工测试使用的都是Oracle数据库。

  我们把在各种组合环境下的兼容性测试交给自动化用例来完成。因此,如果有兼容性方面的Bug,也是“得来全不费工夫”!

  稳定性测试

  稳定性测试可以分为“服务端稳定性测试”和“客户端稳定性测试”。其中服务端(比如,应服务器、数据库等)的稳定性测试是最常见的,笔者这里不做赘述。

  RIA(Rich Internet Applications)技术的广泛应用为Web用户提供越来越赞的使用体验。与此同时,也比传统应用占用更多的客户端(浏览器)资源。所以对此类应用的客户端稳定性测试也是非常关键的。

  验证客户端的稳定性需要两个条件:长时间的不间断操作、监控浏览器资源占用。

  我们通过对Web UI自动化测试用例的循环执行可以模拟长时间的不间断操作。另外,在自动执行的同时,自动获取并记录浏览器资源占用,就可以达到验证客户端稳定性的目的。

  如果系统前端代码出现内存泄露(比如,弹出页面关闭后未销毁生成的DOM对象),Web UI自动化用例长时间运行后生成的浏览器内存占用报告就会如下图所示:

  而正常应该是整体呈水平趋势的锯齿状图形。如果出现上述情况,其表现出来的现象是用户感觉操作响应越来越慢,严重的情况下会导致浏览器宕掉。

  至此,本系列文章就结束了。下面用三句短话总结一下本系列的主要内容:

  Web自动化测试困难的根本原因是什么;

  如何才能更容易的成功实施Web自动化测试;

  要么不断提升、持续证明自动化测试的价值,要么就变成鸡肋!

  最后分享笔者这几年在实施自动化测试和持续集成工作中的一些心得体会:

  在设计某个功能“自动化测试应该怎么实现”之前,一定要先全面、仔细的分析“手工测试时是怎么做的”;

  当提到自动化测试的“测试设计”时,不光要考虑“测试用例设计”,一定还要考虑“自动化测试方案或框架的设计”

  敢于面对各种质疑和挑战,并用持续的改善作为回应;

  对于开发团队来说“不改善,尤可活”,对自动化测试来说“不改善,就等死”;

  不断发掘自动化测试对各个团队的附加价值,只有这样才能得到来自四面八方的支持;

  自动化测试的目的是节省成本,所以如果发现某个项目、模块或功能在进行自动化测试时的投入产出比还不如人工测试,就应该果断暂停;

  当有人用“自动化测试的返工成本”来刻意刁难测试团队时,不妨请他考虑一下研发阶段的返工吧;

  对测试用例失败的原因进行归类(比如,缺陷、环境错误、用例未更新等),并据此生成测试报告,非常有助于提高测试结果分析的效率;

原文转自:http://www.infoq.com/cn/articles/develop-continuous-integration-around-automation-test?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk