文章转载自:自动化测试的意义及常见误区
自动化测试的成本高,效果差,是一个相对的,而针对某些具体项目,是必须要接入自动化测试的。
首先说一些什么时候会需要自动化测试。
首先咱们讨论这个问题之前要带着一个疑问:决定要不要做自动化测试的因素有哪些?
应该说时间才是一个衡量比重比较大的因素。
假如一个项目从立项到结束只有一个月的时间,而这一个月的时间可能相当长的时间都是用来看需求文档,改需求文档,编写测试用例等,真正留给测试的时间是不多的。所以这个时候如果强行要做自动化测试,可能用例设计还没有完成,后面跟随改动头就更大了。
所以对于时间成本和工作效率而言,手工测试绝对是第一选择。
但是呢,一旦项目稳定下来,就要考虑接入自动化测试了。因为这个时候项目比较稳定,做自动化就可以参照着手工用例去做了。
抛去了时间,就要考虑成本和效率了。
那么讲到这里,也就明白了自动化测试的一些特点:
1、自动化测试是为了确保项目可以正常上线,项目的主流程没有bug,而手工测试就是为了发现很多很多的bug。
2、从理论上来说,自动化是可以覆盖到所有的手工测试的流程的,但是相应的如果每一次测试都用自动化,靠着公司的一到两个自动化工程师,成本和效率反而会打折扣,跟不上迭代的速度。这也就是题主说的自动化成本高,效果差的反映。
3、如果是一名自动化测试人员,自身的价值绝对不是简单用脚本来体现的。无论搭建环境、搭建web框架、开发应用程序,都是能力的体现,说白了,自动化测试工程师是要发挥创造力的工作。
那么说什么样的项目直接就可以拿来做自动化测试呢?
自动化测试之所以能在很多大公司实施起来,就是有它适合自动化测试的特点和高的投资回报率。
• 产品型项目。产品型的项目,每个项目只改进少量的功能,但每个项目必须反反复复的测试那些没有改动过的功能。这部分测试完全可以让自动化测试来承担, 同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。
• 增量式开发、持续集成项目。由于这种开发模式是频繁的发布新版本进行测试,也就需要频繁的自动化测试,以便把人从中解脱出来测试新的功能。
• 能够自动编译、自动发布的系统。要能够完全实现自动化测试,必须具有能够自动化编译,自动化发布系统进行测试的功能。 当然,不能达到这个要求也可以在手工干预的情况下进行自动化测试。
• 回归测试。回归测试是自动化测试的强项,它能够很好的验证你是否引入了新的缺陷,老的缺陷是否修改过来了。在某种程度上可以把自动化测试工具叫做回归测试工具。
• 多次重复、机械性动作,将烦琐的任务转化为自动化测试。自动化测试最适用于多次重复、机械性动作,这样的测试对它来说从不会失败。比如要向系统输入大量的相似数据来测试压力和报表。
• 需要频繁运行测试。在一个项目中需要频繁的运行测试,测试周期按天算,就能最大限度的利用测试脚本
那么说不适合做自动化测试的项目是什么特点呢?
• 定制型项目(一次性的)。为客户定制的项目,维护期由客户方承担的,甚至采用的开发语言、运行环境也是客户特别要求的,即公司在这方面的测试积累就少,这样的项目不适合作自动化测试。
• 项目周期很短的项目。项目周期很短,测试周期很短,就不值得花精力去投资自动化测试,好不容易建立起的测试脚本,不能得到重复的利用是不现实的。
• 业务规则复杂的对象。业务规则复杂的对象,有很多的逻辑关系、运算关系,工具就很难测试。
• 美观、声音、易用性测试。人的感观方面的:界面的美观、声音的体验、易用性的测试,也只有人来测试。
• 测试很少运行。测试很少运行,对自动化测试就是一种浪费。自动化测试就是让它不厌其烦的、反反复复的运行才有效率。
• 软件不稳定。软件不稳定,则会由于这些不稳定因素导致自动化测试失败。只有当软件达到相对的稳定,没有界面性严重错误和中断错误才能开始自动化测试。
• 涉及物理交互。工具很难完成与物理设备的交互,比如刷卡的测试等。
相信讨论到这里,题主的疑惑肯定是解决的非常清晰了。下面咱们就延伸的说一说,谈谈手工测试与自动化测试的区别以及目前行业内外对于自动化测试存在的一些误区
一、手工测试与自动化测试的区别
1、手工测试与自动化测试并不是对立的
很多人会误以为有了自动化测试就不需要手工测试了,手工测试做的好也用不到自动化测试,其实不然。二者并不是对立的,什么手段效率高,就用什么手段。自动化测试发展了这么多年,也没有把手工测试给取代。
2、手工测试的特点
手工测试有较强的异常处理能力,能通过人为的逻辑判断效验当前的步骤是否正确,同时用例的执行具有一定步骤跳跃性,能够步步跟踪,细致定位问题。
如果修正缺陷所需时间稍长,那么想将手工测试应用于回归测试将变得异常困难。这是因为需要测试的测试用例太多。
难以对不可视对象或对象的不可视属性进行测试。
3、自动化测试的特点
执行的对象是脚本,能通过人为的逻辑判断效验当前的步骤是否正确实现,用例步骤之间关联性强,不像手工测试用例那么跳跃。另外也是用来保证产品主体功能正确和完整,让测试人员从繁重的工作中解脱出来。
可以更好的利用资源。在夜间执行自动测试用例。测试具有移植性和可重复性。好的测试脚本往往具有较好的平台移植性。可以更快地将软件推向市场。因为自动测试节省了大量的时间。但是自动化测试要求的先期投入比较大,而且要求人员必须经过严格的培训。
4、自动化测试与手工测试的关系
自动化测试不能完全替代手工测试,自动化测试的目的仅仅在于让测试人员从繁琐重复的测试流程中解脱出来,把更多的时间和精力放在更有价值的测试中,例如探索性测试。
二、自动化测试的12个认识误区
1、自动化的软件测试与手工的软件测试过程一样
自动化测试所需要的技巧与手工测试所需要的技巧是不一样的。
通常,你的项目经理会被那些测试工具销售们迷惑,认为自动化的软件测试就是简单地按一个录制的按钮,产生测试脚本。而事实上并没有那么简单。
区分自动化测试所需要的技巧与手工测试所需要的技巧是非常重要的。最重要的是,自动化测试工程师需要掌握软件开发技巧,没有接受任何培训的手工测试人员,或者没有编程背景的手工测试人员,在实施自动化测试时会碰到很多困难。
2、自动化测试一定会马上大量减少测试人员数量
自动化测试不会马上大量减少测试人员数量。因为开展自动化测试初期需要投入一定的人力进行自动化测试脚本开发,并逐渐将自动化测试脚本用于日常的测试中,逐步减少手工测试人员从事重复劳动的时间和人数。为了缩短自动化测试脚本的开发时间,可以考虑将自动化测试脚本的开发工作借助外包的力量来早日实现大规模的自动化测试。
3、测试自动化就是录制和回放
仅仅录制得到的不是有效的自动化脚本。
很多项目经理仍然把测试自动化等同于使用录制回放工具。而事实上,录制得到的脚本通常是不可重用的脚本,脚本中充满了硬编码的值,这些值应该被参数化,否则脚本仅仅适用于一个测试情况,脚本还应该加入条件判断、循环等结构,以便增强测试脚本的灵活性。
4、自动化测试找不到bug
自动化测试不直接找bug,而是通过解放有经验的测试工程师的生产力,让其从重复的回归测试中解放出来,从事新的测试方法和测试手段的研究。通过自动化测试解放出测试人员的时间和精力来间接地找到更多、更深层次的新bug,将产品质量再提高一个档次。
5、自动化测试工具是“万能”的
很多人一听到自动化测试,就认为自动化测试工具可以完成一切测试工作,从测试计划到测试执行再到测试结果分析,都不需要任何人工干预。显然,这是一种理想状态,现实中还没有哪个测试工具有这个能力,并且将来也不会有。在现实中有关的测试设计、测试案例,以及一些关键的测试任务还是需要人工参与的,即自动化测试是对手工测试的辅助和补充,它永远也不可能完全取代手工测试。
6、自动化测试工具容易使用
对于这一点,很多测试工程师有同样的错误观点,认为测试工具可以简单地通过捕获(录制)客户端操作生成脚本,且脚本不加编辑就可用于回放使用。事实上,自动化测试不是那么简单的,捕获的操作是否正确,以及脚本编辑是否合理都会影响测试结果。因此,自动化测试需要更多的技能,也需要更多的培训。
7、自动化能提供百分百的测试覆盖率
并非所有内容都可以被自动化地测试到。不可能覆盖所有可能的输入,所有可能的组合和路径。
自动化测试可以增加测试的广度和深度,但是仍然无法达到100%的测试覆盖率,因为没有足够的时间或资源。
8、忘记了测试的最终目标:找到BUG
在自动化测试中,同样要注意把边界值分析、等价类分析、基于风险的测试方法、挑选最合适的测试用例等技术应用起来。
通常在自动化测试过程中,我们都忙着搭建自动化框架和编写测试脚本,但是我们往往忘记了测试的本来目的:找bug。
项目经理可能雇佣了最好的自动化开发人员来搭建框架,使用了最新最好的自动化开发技术,创建了成千上万的自动化测试脚本。但是如果BUG仍然被遗漏了,那些本该被自动化测试脚本捕捉到的BUG,结果没有被捕捉到,那么你的自动化测试仍然会被认为是失败的。
9、所有测试用例都可以自动化
不是所有的测试用例和测试步骤都可以转化为自动化测试。在自动化测试投入较多的行业,领先企业的自动化测试率有的能达到80%左右,但仍有20%左右的测试用例需要手工来进行。在国外,通常从开发第一版测试用例时,就同步进行自动化测试脚本的开发,所以自动化测试率普遍比中国企业高。
10、只有性能测试才需要自动化
自动化测试不光进行性能测试,更被大量应用于功能测试验证,在国外超过半数的自动化测试脚本都是用于功能验证测试的。
11、测试工具可适用于所有的测试
每种自动化测试工具都有它的应用范围和可用对象,所以不能认为一种自动化测试工具能够满足所有测试的需求。针对不同的测试目的和测试对象,应该选择合适的测试工具来对它进行测试。在很多情况下,需要利用多种测试工具或者开发自动化测试框架才能达到自动化测试的目的。商业和开源的测试工具能够用来进行自动化测试,但是我们需要根据自身产品的特点,开发自动化测试框架,在框架中提供常用的测试用例,加快测试速度,达到测试用例复用,这是今后测试自动化发展的道路。
12、自动化测试能发现大量新缺陷
发现更多的新缺陷应该是手工测试的主要目的,不能期望自动化测试去发现更多新缺陷。事实上,自动化测试主要用于发现原来的缺陷。自动化测试用于回归测试,而大量的新业务测试更多地还是依赖手工测试。
除了以上列举的常见误区外,还有其他不同的认识误区。自动化测试认识误区的产生,归根到底最本质的原因是由于对自动化测试不现实的期望,也就是期望过高造成的。
如果没有建立一个正确的软件测试自动化的观念,认为测试自动化可以完全代替手工测试,或者认为测试自动化可以发现大量新缺陷,或者不愿在初期投入比较大的开支等,则自动化测试一定会让我们大失所望。