测试自动化的 10 个最佳实践
*以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/qavI7z8IAy8qaiQvuQgURQ
虽然大家都知道坚果是非常健康和有营养的,但是,当你尝试吃它的时候,我猜测过程都不会很顺利。
现实就是那么相似,我们都知道测试自动化对软件开发有好处(就像坚果对我们的身体一样!),很遗憾很多公司在不考虑细微差别的情况下就赶着上线测试自动化。如果您不遵循一些规则,您可能会弄巧反拙。
为了避免这种情况,我尝试收集了 10 个测试自动化的最佳实践建议以供大家参考。
计划先行
无规矩不成方圆,做测试也是如此。自动化测试需要策略,策略需要详细的规划。计划在开发阶段将需要哪些测试和测试次数,目的是修复遇到的bug,还有发生错误的根本原因。开发完成之后,任然需要计划回顾,也就是常说的复盘会议,目的是减少重复错误的发生。
必工欲善其事必先利其器
自动化测试的本意是利用工具帮助测试工程师脱离繁杂而重复的细节,并加快测试过程。说到测试自动化的工具,包含了编写测试脚本、运行测试过程、汇总报告、分析问题、跟踪问题、修复bug和方便内部团队沟通的工具。
关于开发人员使用的测试框架,我曾经在其它的推文里介绍过一款 Google 开源的 C++ 测试框架,有兴趣可以点击下方链接了解一下。
《C++ 测试框架 GoogleTest 初学者入门篇 丙》
可见需要的工具名目众多,而且分阶段配合,也非常需要集成到统一的平台并便于成员理解各个阶段的作用和相互协调。
那么有哪些平台已经在做这些事情呢?
比如,Katalon、LambdaTest、Perfecto、Zebrunner等。
在项目早期就开始
团队首要任务其实是为了获取成果和企业赚取收益,团队产出的项目成果越早推向市场,越有机会为团队创造效益,毕竟剩下来的都是成本,软件行业最大的成本就在于劳动力的开销了。如果项目bug发现得越早并且修复完整,那么成果就容易得到主管层的认可,产品上市的门槛算是迈过了。
bug发现越早,留给工程师修复的时间也就越多,严重的问题更适合在项目早期就发现,后续跟进的同事也能对此类问题了解更全面。否则,等到工程代码堆积如屎山,待到何时休?唯有项目难产了。
合理利用虚拟环境和真实应用环境
软件的运行在发布到用户手里之前,可以在虚拟的环境里测试,虽然仅可以对功能测试,但是费用是非常廉价的,任何规模的企业都可以使用。
如果还需要测试产品的性能,获取实时数据,比如传感器、部件、网络信号强弱、电量等,必须要使用到真实的应用环境才可以达到目标。真实的应用环境往往需要购买特定的设备配合测试,这些设备还要考虑定期维护保养,所以成本也是一个很重要的因素了。
为了平衡测试目标和成本因素,虚拟环境和真实应用环境测试需要合理安排,做到平衡。
手动自动相互配合
凡是求个度,适度就是好,包括测试自动化。现时情况下,很多因素的作用,测试只能手动执行,所以将它们自动化是没有意义的,否则就是画蛇添足了。
首先,脚本无法模仿人类的所有行为和反应。其次,如果计划的测试只需只执行一次,那么没有必要为此写个自动化脚本,等写完脚本,花都谢了。
那么哪些测试非常适合实施自动化呢?下面做了个列表:
需要实施自动化的测试场景: |
---|
大量重复动作 |
操作大量数据 |
需要注意力比较集中的操作 |
需要兼顾各种运行平台的功能,比如不同操作系统、浏览器、硬件等 |
比较常用的功能 |
回归测试
在添加新功能后需要执行一轮测试用以检查功能是否正常工作,这样的测试就叫回归测试。
回归测试是需要重复执行的,所以自动化地执行并一遍又一遍地运行就显得很必要了。一般建议在回归测试套件种添加冒烟测试、完整性测试和测试用例,方便在测试周期中发现更多的bug。
端到端(E2E)测试
端到端 (E2E) 测试是从终端用户的角度出发,模拟他们在实际环境下使用应用程序的交互过程,可以确保应用程序按照产品要求运行和正确处理各种用户任务。E2E 测试自动化了用户的关键操作,使得软件的错误可以被快速发现和立刻修复,所以对软件发布时间的加快有很好的推动作用。
切忌独揽所有环节
试想下,你的团队里如果创建脚本、运行测试和维护它们的都是一个人,那么你的团队工作速度必然难以快速响应,改代码的速度也会受到影响,更可怕的是如果这人请病假或者离职了会导致所有的测试流程完全暂停,风险是很高的。所以提倡测试流程共享所有权。
如果每个成员都充分了解项目的测试阶段,他们或许可以为流程做出更多贡献。测试工程师如果都能共享测试脚本,那么其中优秀的知识和技能也能被传播到其他成员。还有,共享测试会使到测试过程更加透明。
预期和结果对比,效率最大化
上面提到测试需要计划,比如目标是什么类型的测试,预估编写测试脚本的工时,运行测试时长,重新发布测试版本软件要多久,再次启动测试过程,测试过程的覆盖率是多少等等,最终会有个总体的时间预估。
在测试工作结束后,对比一下预期的计划和实际的花费,为下一阶段的工作做好调整,目标是实现效率的最大化。
保持更新
测试的目的是为了筛选出问题,如果过时的测试导致假阳性或者假阴性的结果,会增加工程师分析和修复错误的时间,减低工作效率,最终还可能误导工程师发布带病的版本软件。虽然通过自动化测试提高了测试的覆盖率,但这是以测试结果准确为前提的。
所以在回归测试中,要及时删除过时的测试例程,更新对应的功能测试。