我们的测试为什么不够敏捷

发表于:2013-11-27来源:InfoQ作者:殷坤 标签:敏捷测试
我们的测试为什么不够敏捷.测试是为了保证软件的质量,敏捷测试关键是保证可以持续、及时的对软件质量情况进行全面的反馈。由于在敏捷开发过程中每个迭代都会增加功能、修复缺陷或重构代码,所以在完成当前迭代新增特性测试工作的同时,还要通过回归测试来保证历史功能

  测试是为了保证软件的质量,敏捷测试关键是保证可以持续、及时的对软件质量情况进行全面的反馈。由于在敏捷开发过程中每个迭代都会增加功能、修复缺陷或重构代码,所以在完成当前迭代新增特性测试工作的同时,还要通过回归测试来保证历史功能不受影响。为此我们期望:

  测试范围足够广:

  测试用例要覆盖所有功能;

  要在各种可能的环境下作兼容性测试;

  系统的稳定性、性能都要测试;

  测试频率足够高:

  相关厂商内容

  京东“宙斯杯”创新应用大赛开始了,100万奖金等你拿哦!

  每日构建产生的版本要保证可用;

  每个迭代都需要对历史功能做回归测试;

  释放前或上线后如果打了补丁,就需要回归;

  但实际情况往往不遂人愿:

  实际测试周期变短:

  上线时间提前确定,研发进度延期,测试计划被迫延后;

  最后阶段经常会临时增加测试任务;

  所有人都知道还需要再经过一轮测试,但时间没有了;

  有效测试资源稀缺:

  临时从其他项目抽调的测试人员不能立刻有效的开展测试工作;

  “搞不清楚”本项目的研发人员到底是不会做测试还是不愿做测试;

  因此由于客观上的资源和时间限制,完整的、及时回归测试在人工测试情况下,往往是不可能完成的任务。团队内部也会产生各种争执:

  提交给测试的版本为什么研发人员不先做通过性测试?

  这次代码改动量不大,有必要再花那么多时间回归么?

  当初不是承诺这次修改肯定不会影响以前的功能么?

  怎么不早说要支持Chrome浏览器,现在哪还有时间测试啊?

  怎么能让现场出现这种低级的Bug,打补丁后为什么不仔细回归一遍?

  争执越演越烈,最终有团队成员爆发了:“这简直不是人干的活!”。

  您怎么看待这句话呢?

  其实话糙理不糙,用更理性的语言翻译一下就是“有些工作不应该以人工的方式来完成”,比如:

  大量机械的、重复性的回归测试;

  结果的正确性不依赖主观判断的测试;

  需要模拟大量数据、大量并发量的测试;

  需要不间断执行的测试(比如7*24小时持续执行);

  需要短时间内完成的大量测试用例执行(比如完整的功能回归测试);

  通过自动化测试可以极大的提升回归测试、稳定性测试以及兼容性测试的工作效率,在保障产品质量和持续构建等方面起到举足轻重的作用。特别是在敏捷开发模式下,自动化测试是必不可少的。

  目前业界的商业/开源自动化测试工具有很多,比如,功能测试工具有QTP、Selenium等,性能测试有LoadRunner、JMeter等。其工作原理无非都是通过“测试脚本”和“测试数据”来完成“测试过程”,并比较“测试结果”,进而形成“测试报告”。

  本文不对这些测试工具的差异或优劣进行对比,只以作者目前采用的Selenium为例进行分析:敏捷开发模式需要自动化测试,但自动化测试本身的敏捷性又如何呢?

  Selenium是针对Web应用的开源自动化测试工具,通过编写模拟用户操作的脚本,它会打开浏览器对Web应用进行黑盒测试。可以方便的用于功能测试、兼容性测试、 稳定性测试及并发测试。目前已被主流浏览器厂商广泛支持,同时也是很多其它自动化测试工具(比如,RobotFramework)的底层核心技术。Selenium由IDE、Remote Control(简称RC)、WebDriver、Grid四个工程组成:

  Selenium IDE

  是一个用于录制/回放测试脚本的Firefox附加组件,录制的脚本可以生成基于Selenium RC的测试代码(Java、Ruby、C#等)。适用于快速入门,不太适用于实际较大的测试项目;

  Selenium RC

  RC由Server和Client组成两部分组成,Server负责加载/关闭浏览器以及作为HTTP代理来访问Web应用,Clinet支持多种编程语言和测试框架(TestNG、JUnit、NUnit等)。

  Selenium WebDriver

  WebDriver作为Selenium2的核心特性提供比RC更简洁易用的API,是官方推荐的RC替代方案。可以更好的支持动态网页,不需要再额外启动一个独立的Server。

  Selenium Grid

  是Selenium的一个扩展工具,可以很方便地同时在多台机器上和异构环境中并行运行多个RC或WebDriver用例。

  Selenium RC是通过在浏览器加载时“注入”JS函数来操纵后续的浏览器行为,Selenium WebDriver则通过直接调用各个浏览器内置的本地事件来达到这一目的。WebDriver目前已经作为W3C规范草案,提交由Google、Mozilla等浏览器厂商讨论。

  WebDriver规范定义一组与平台、语言无关的接口,包括发现和操作页面上的元素以及控制浏览器行为,主要用于支持Web应用的自动化测试。 WebDriver的核心是通过findElement方法返回DOM对象(WebElement),通过WebElement可以对DOM对象进行操作(获取属性、触发事件等)。其中findElement方法需要的元素定位器(Locator)支持ID、XPath、CSS、超链接文本等多种方式。

  “WebDriver”顾名思义就是“Web浏览器驱动”,它专注于解决如何通过外部命令(通常为测试用例)操作浏览器的问题。至于测试用例按照什么顺序执行、执行过程中如何传递数据、测试结果如何断言、如何报告,则可以通过集成其它优秀的专业测试框架(比如,TestNG)来实现(WebDriver没有必要重复造轮子)。

  下面用以“用户管理”为例,来看看用WebDriver实现的“增加”和“删除”测试脚本(只示意部分关键代码)。

  1、在用户列表页面点击“新增”按钮,跳转到新增用户页面:

  webDriver.findElement(By.xpath("//a[contains(@id,'addUserBtn')]//button")).click();.

原文转自:http://www.infoq.com/cn/articles/test-no-agile-enough?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)