软件测试52讲学习总结-04 | 为什么要做自动化测试?什么样的项目适合做自动化测试?

发布于 2021-05-10 00:33 ,所属分类:软件测试工程师学习资料

浅谈自动化

作为一个测试人员,手工测试的工作是没有太多坏处的,当然,如果一直点来点去那么自身确实得不到更好的提高,这时候选择学习自动化测试是一件很有必要的事情,一来将自己从繁重的重复工作中解放出来,从事一些更有挑战的工作,二来能积累技术知识,厚积薄发完成飞跃。


具体什么是自动化测试,如何认识自动化测试呢?

针对这个问题,我自己也一直在思考,通过百度搜索、贴吧查看、各个gongzhong号好文章推荐阅读,对此也有了一定的了解。


顾名思义,自动化测试是,把人对软件的测试行为转化为由机器执行测试行为的一种实践,对于最常见的GUI(图形用户界面)自动化测试来讲,就是由自动化测试工具模拟之前需要人工在软件界面上的各种操作,并且自动验证其结果是否符合预期。


自动化测试的本质是先写一段代码,然后去测试另一段代码,所以实现自动化测试用例本身属于开发工作,需要投入大量的时间和精力,并且已经开发完成的用例还必须随着被测对象的改变而不断更新,你还需要为此付出维护测试用例的成本。

自动化测试的优势:

  1. 自动化测试可以替代大量的手工机械重复性操作,测试工程师可以把更多的时间花在更全面的用例设计和新功能的测试上;

  2. 自动化测试可以大幅提升回归测试的效率,非常适合敏捷开发过程;

  3. 自动化测试可以更好地利用无人值守时间,去更频繁地执行测试,特别适合现在非工作时间执行测试工作时间分析失败用例的工作模式;

  4. 自动化测试可以高效实现某些手工测试无法完成或者代价巨大的测试类型,比如关键业务7×24小时持续运行的系统稳定性测试和高并发场景的压力测试等;

  5. 自动化测试还可以保证每次测试执行的操作以及验证的一致性和可重复性,避免人为的遗漏或疏忽。


自动化测试的劣势:

  1. 自动化测试并不能取代手工测试,它只能替代手工测试中执行频率高、机械化的重复步骤。你千万不要奢望所有的测试都自动化,否则一定会得不偿失。

  2. 自动测试远比手动测试脆弱,无法应对被测系统的变化,业界一直有句玩笑话“开发手一抖,自动化测试忙一宿”,这也从侧面反映了自动化测试用例的维护成本一直居高不下的事实。其根本原因在于自动化测试本身不具有任何“智能”,只是按部就班地执行事先定义好的测试步骤并验证测试结果。对于执行过程中出现的明显错误和意外事件,自动化测试没有任何处理能力。

  3. 自动化测试用例的开发工作量远大于单次的手工测试,所以只有当开发完成的测试用例的有效执行次数大于等于5次时,才能收回自动化测试的成本。

  4. 手工测试发现的缺陷数量通常比自动化测试要更多,并且自动化测试仅仅能发现回归测试范围的缺陷。

  5. 测试的效率很大程度上依赖自动化测试用例的设计以及实现质量,不稳定的自动化测试用例实现比没有自动化更糟糕。

  6. 实行自动化测试的初期,用例开发效率通常都很低,大量初期开发的用例通常会在整个自动化测试体系成熟,和测试工程师全面掌握测试工具后,需要重构。

  7. 业务测试专家和自动化测试专家通常是两批人,前者懂业务不懂自动化技术,后者懂自动化技术但不懂业务,只有二者紧密合作,才能高效开展自动化测试。

  8. 自动化测试开发人员必须具备一定的编程能力,这对传统的手工测试工程师会是一个挑战。




适合做自动化的项目


第一,需求稳定,不会频繁变更


自动化测试最怕的就是需求不稳定,过高的需求变更频率会导致自动化测试用例的维护成本直线上升.刚刚开发完成并调试通过的用例可能因为界面变化,或者是业务流程变化,不得不重新开发调试。所以自动化测试更适用于需求相对稳定的软件项目.


第二,研发和维护周期长,需要频繁执行回归测试。


软件产品的生命周期一般都比较长,通常会有多个版本陆续发布,每次版本发布都会有大量的回归测试需求如果短期的一次性项目,就算从技术上讲自动化测试的可行性很高,但从投入产出比(ROI)的角度看并不建议实施自动化,因为千辛万苦开发完成的自动化用例可能执行一两次,项目就结束了。


第三,需要在多种平台上重复运行相同测试的场景。


这样的场景其实有很多,比如:对于GUI测试,同样的测试用例需要在多种不同的浏览器上执行;对于移动端应用测试,同样的测试用例需要在多个不同的Android或者iOS版本上执行,或者是同样的测试需要在大量不同的移动终端上执行.


第四,某些测试项目通过手工测试无法实现,或者手工成本太高。


对于所有的性能和压力测试,很难通过手工方式实现。比如,某一个项目要求进行一万并发用户的基准性能测试(Benchmark test),难道你真的要找一万个用户按照你的口令来操作被测软件吗?又比如,对于7×24小时的稳定性测试,难道你也要找一批用户没日没夜地操作被测软件吗?这个时候,你就必须借助自动化测试技术了,用机器来模拟大量用户反复操作被测软件的场景。当然对于此类测试是不可能通过GUI操作来模拟大量用户行为的,你必须基于协议的自动化测试技术.


第五,被测软件的开发较为规范,能够保证系统的可测试性。


从技术上讲,如果要实现稳定的自动化测试,被测软件的开发过程就必须规范。比如,GUI上的控件命名如果没有任何规则可寻,就会造成GUI自动化的控件识别与定位不稳定,从而影响自动化测试的效率.


第六,测试人员已经具备一定的编程能力。


如果测试团队的成员没有任何开发编程的基础,那你想要推行自动化测试就会有比较大的阻力。这个阻力会来自于两个方面:前期的学习成本通常会比较大,很难在短期内对实际项目产生实质性的帮助,此时如果管理层对自动化测试没有正确的预期,很可能会叫停自动化测试;测试工程师通常会非常热衷于学习使用自动化测试技术,以至于他们的工作重点会发生错误的偏移,把大量的精力放在自动化测试技术的学习与实践上,而忽略了测试用例的设计,这将直接降低软件整体的质量。



相关资源