当前位置: 欣欣网 > 码农

研发效能最佳实践:基于自动化测试的实践实现交付效率提升的研究丨IDCF

2024-02-29码农

点这里 👇 星标关注,获取最新资讯!

作者:刘伟伟

研发效能(DevOps)工程师(中 级)认证学员

摘要

本文通过实践案例分析,探讨了自动化测试在提升软件交付效率中的作用,并提出了自动化测试流程制度建设与工具建设的策略。文章指出,自动化测试的实施需要明确目标,选择合适的工具,建立有效的流程制度,并通过数据度量和持续改进来实现交付效率的提升。

目录

第一章 引言

第二章 自动化测试的实践与挑战

2.1 自动化测试与DevOps的关系

2.2 为什么要实施自动化测试

2.3 自动化测试实践的目标与现状

2.4 自动化测试的实施计划

第三章 自动化测试的未来发展趋势

第四章 结论

第一章 引言

随着软件开发的复杂性增加,DevOps的诞生与流行,作为DevOps中的自动化测试已经成为提升软件交付效率的重要手段。然而,自动化测试的实施并非一帆风顺,需要面对许多挑战,如目标确定、工具选择、流程制度建设、度量指标确定等。本文将通过实践案例分析,探讨这些问题并提出相应的解决策略。

第二章 自动化测试的

实践与挑战

2.1 自动化测试与DevOps的关系

自动化测试与DevOps有着密不可分的关联,二者相互强化,共同提升软件交付的质量与效率。在DevOps的文化中,测试不再是软件开发生命周期中的一个孤立阶段,而是贯穿整个流程,从需求分析到产品上线的各个阶段,确保了质量的持续把关。而自动化测试在此过程中扮演了关键角色,它通过一系列自动化的手段,对软件进行快速、高效的测试,从而加快了迭代速度,提高了交付频率,同时保持了软件质量[1]。
具体来看,自动化测试在DevOps中的重要性体现在以下几个方面:

(一)加速反馈循环:在DevOps模式下,快速反馈是核心优势之一。自动化测试能够通过连续的构建、测试和部署,加速从开发到运营的反馈循环,开发团队可以更快地获得关于软件质量的信息,并及时进行调整优化。

(二) 支持持续集成/持续部署:自动化测试是持续集成(CI)和持续部署(CD)的重要支撑,它确保了在代码集成到主分支后,能够快速运行测试,及时发现集成错误,从而提高整体的集成质量[2]。

(三) 确保发布质量:在DevOps的持续交付过程中,自动化测试保证了传递给用户的质量,通过自动化的方式,在代码推送到生产环境之前进行严格的测试,降低了因匆忙发布存在缺陷的软件而带来的风险。

(四)促进协作:在DevOps的文化中,开发、测试、运维之间的协作和沟通至关重要。自动化测试工具和平台的引入,有助于打破信息壁垒,促进不同部门间的沟通与协作[3]。
总的来说,自动化测试是DevOps文化中不可或缺的一部分,它通过实现快速迭代、高质量交付和高效协作,促进了软件组织的敏捷性和市场竞争力。

2.2 为什么要实施自动化测试

自动化测试是在软件测试领域中非常重要的一环,它对于提升测试效率、保证软件质量、加速交付过程等方面发挥着至关重要的作用。

(一)提升测试效率:在快节奏的软件开发环境中,自动化测试可以大大提高测试效率。通过自动化执行测试用例,可以节省大量的人工操作时间,特别是在处理大量重复性或繁琐的测试任务时,自动化测试的优势尤为明显。

(二)保证软件质量:自动化测试可以帮助团队确保软件质量,通过持续地运行测试用例,可以在软件开发的早期阶段发现和修复错误,从而降低后期的修复成本。此外,自动化测试还可以提供一致和可靠的测试结果,有助于团队对软件质量进行准确的评估。

(三)加速交付过程:在DevOps文化和持续集成、持续部署(CI/CD)的实践背景下,自动化测试成为了加速软件交付过程的关键因素。通过自动化测试,开发团队可以快速得到反馈,及时优化调整,从而实现快速迭代和持续交付。

支持回归测试:自动化测试非常适合于回归测试,可以确保在软件更新或修复后,相同的测试可以重复执行,从而确保更改没有引入新的错误。

(四)提高测试覆盖率:自动化测试可以通过执行大量的测试用例来提高测试的覆盖率,从而更好地检查和验证软件的功能和性能。

(五)提升测试的可维护性:自动化测试脚本易于维护,特别是当测试用例发生变化时,自动化测试可以更容易地进行更新和调整。

(六)提升测试的可复用性:自动化测试用例可以重复使用,这对于回归测试特别有价值。通过自动化,测试人员可以确保在软件更新或修复后,相同的测试可以用相同的方式重复执行,从而确保更改没有引入新的错误。

(七)提升测试的客观性:自动化测试可以提供更为客观和一致的测试结果,因为同样的测试用例每次都会按照同样的步骤执行,不受人为因素影响。

(八)提升测试的非干扰性:自动化测试可以在不影响用户正常工作的情况下进行,尤其是在夜间或系统空闲时段运行,从而避免了因测试而造成的服务中断或用户体验下降。

(九)提升测试的准确性:自动化测试可以减少由于人为因素导致的误差,如遗漏测试某些场景或错误地记录测试结果。

2.3 自动化测试实践的目标与现状

当公司确定自动化测试在DevOps中的地位,以及对交付效率及软件质量提升的期望,决定推进自动化测试的实践,希望在自动化测试实践下达成以下目的:提升软件交付效率、节省测试资源投入、提高软件交付质量。

不过在实践过程中遇到了很多挑战,公司在推进自动化测试的实际现状如何呢?

(一)开发人员跟测试人员的比例为非常悬殊,开发人员多,测试人员少的现状一直制约着自动化测试的推进;

(二)单元测试一直没有实际开展,开发人员更多是执行单接口测试,通过在本地出发单接口请求测试程序代码是否逻辑正常、开发功能无异常;

(三)接口文档缺失,公司在多年的信息化建设过程中,建设了非常多的系统,这些系统有采购的,有自建的,有合作开发的,有些系统的接口文档是比较完善的,但更多的情况是缺少接口文档,测试人员在开发接口自动化测试脚本时,缺少必要的输入,;

(四)公司成立以来,未进行过接口自动化测试及UI自动化测试,自动化测试领域是空白的,大家都没深入做过自动化测试,人员能力有限,会的人少;

(五)公司已完成建设需求交付管理及流水线系统。

2.4 自动化测试的实施步骤

基于公司的现状以及对DevOps的认知,首先选择把自动化测试金字塔中的三层模型变更为四层模型,将接口测试拆分为单接口测试与多接口场景测试,由开发人员执行单元测试与单接口测试,测试人员执行多接口场景测试及UI自动化测试,此处未严格规定只能如此执行,开发人员实际上也可以执行多接口场景测试,作为自动化测试的推进者,提供工具、执行流程及培训。

其次工具选择上更多选择能够集成至流水线上的工具,单元测试采用Junit+Mockito,单接口测试采用线上接口管理工具,多接口场景测试选择流水线中现成工具,UI自动化测试采用以RPA为主,SeleniumUI为辅的选型。通过这些工具的使用,提升了很多方面。

最后自动化测试流程制度建设与工具建设,作为自动化测试任务的推进者,此外还必须包括运营,并确定度量指标,通过数据体现自动化测试过程,并确定待提升的点,做的好进行表扬,做的不好进行改善,通过数据进行分析,持续改善。

以下是实施自动化测试的详细步骤。

2.4.1 确定实践目标

在刚开始推进自动化测试时,最重要的是明确目标,想通过自动化测试实现什么目标,只有目标明确,才能有的放矢。故此最后确定的目标是提升软件交付效率、节省测试资源投入、提高软件交付质量,同时在实践的过程中注重培养团队能力,提升个人技术水平及工具使用熟练度,只有自动化测试脚本的开发速率足够快,自动化测试的投入产出比才更有价值,毕竟最终目的之一是为了提高交付效率。

在实践目标的确定上,切记不要好高骛远,目标不能定的太高,不然期望越高,失望越大。在设定实践目标时,应该保持现实和务实的态度,避免设定过高的目标。这里面临的第一个挑战是领导对自动化测试的期望太高,总认为一上自动化测试,就能够提升多少交付效率,提高多少质量,发现多少缺陷,但实际上并没有。自动化测试首先被应用的场景是回归测试,本身回归测试就不会发现很多缺陷,不能因为缺陷发现的少就否定自动化测试的价值。

还有另外一个挑战,针对公司内部信息化系统的建设,在软件交付过程中一直是缺少回归测试的,如果在自动化测试实践应用在回归测试,就会认为自动化测试阶段是多余的,是不需要做的,这里是观念不同导致的,之前没做不代表就不需要做,只是之前省略掉该步骤,这里其实隐含的另一个挑战,是对上线内容生产缺陷的重视度不够,只有敬畏生产环境,敬畏生产缺陷,在软件交付中才能够做到尊重生产环境,认真对待每一个缺陷,尽可能地预防和修复它们,以保证产品的质量和用户的满意度,提高用户体验。

2.4.2 组建实践团队

一个好汉三个帮,单打独斗是无法实践DevOps的,尤其是做不好自动化测试,所以在实践开始前,组建一个高效的自动化测试团队需要综合考虑多个因素,包括团队成员的选择、团队结构的规划、团队文化的塑造等。

团队成员的选择:选取开发、测试、测开人员组建自动化测试团队。这时候其实有很多成员其实对自动化测试了解不足,这个没有关系,只要态度上是积极的,对自动化测试有热情即可。这里面临的挑战是团队成员参与度不够,技术能力不足。

参与度不够是因为自动化测试的实践是兼职参与,团队的成员有自己的本职工作,只能够参与部分工作,所以解决该问题重点是确定统计指标,在什么时候完成多少工作内容,完成那些工作内容。

技术能力不足只能通过加强培训,并在实践中学习,在学习中实践的方式解决该挑战。

2.4.3 选择合适的工具

选择合适的自动化测试工具是提升测试效率、保证软件质量的关键步骤。在自动化测试工具市场中,有多种工具可供选择,每种工具都有其独特的优势和适用场景。以下是在选择自动化测试工具时需要考虑的一些关键因素:工具集成能力、易用性和学习曲线、是否开源或具有二次开发能力、对编码能力的要求及社区活跃度。

工具集成能力:考虑跟流水线的集成,跟用户中心的集成等,只有集成在流水线之后,才能切实有效的自动化触发执行,有效提升交付效率;

易用性和学习曲线:易用性对于团队来说是一个重要因素。一些工具设计得非常用户友好,而其他工具可能需要更多的技术专长来设置和使用;

是否开源或具有二次开发能力:这里仅为了符合公司规定,确保具有独立自主的系统能力,能够自主决定如何定制化系统;

对编码能力的要求:根据团队中成员的编码技能来选择工具也很重要。虽然有些工具声称不需要编码技能,但拥有一定程度的编码知识通常有助于更有效地利用自动化测试工具;

社区活跃度:一个活跃的社区和良好的支持对于解决使用过程中可能遇到的问题至关重要;

最后确定采用的工具如下:

单元测试采用Junit+Mockito组建组合使用,线上结果扫描采用流水线集成SonarQube实现线上化管理及数据采集;

单接口测试采用契约管理线上管理工具,优点是工具开源,后续可整合对接至流水线,同时兼顾接口文档管理及在线接口测试管理功能;

多接口场景测试采用Magic接口自动化测试工具,本工具跟流水线工具一块被引入,跟流水线天然集成,虽然有些兼容性问题,但能够通过代码的定制化开发提升优化,使用该工具,天然集成流水线,形成流程闭环;

UI自动化测试采用以RPA为主,Selenium为辅的方式,RPA支持可视化页面元素确定采集,有效降低页面元素定位难度,同时可视化组建托拉拽的实现,有效降低脚本开发难度,但无法兼容更多应用场景,此处通过采用Selenium方式进行补充。

选择最合适的自动化测试工具需要根据项目的具体需求和团队的技术能力进行综合评估。尝试工具的试用版本、评估其社区支持以及进行小规模的试点项目,都是确保所选工具能够有效地满足项目需求的不错方式。

2.4.4 实践试点

自动化测试的推广采取试点的方式进行。基于各系统的开发敏捷团队及接受程度选择2个系统进行试点,确保试点的成功并能从中学习和积累经验。

试点项目之一是团队对自动化测试的引入非常有兴趣和热情,愿意尝试新方法并提供反馈。

试点项目之二是系统问题较多,团队正积极通过各种方式实现生产缺陷的降低,故此积极引入自动化测试,希望自动化测试能够降低系统上线风险,提高交付质量。

通过实践试点,总结经验教训,分析试点的成功和失败之处,为今后更广泛的自动化测试推广提供宝贵的参考和指导。

通过实践试点的方式,自动化测试能够在特定的环境下先行实施,从而降低风险并提高成功率。同时,试点项目积累的经验和数据,将为自动化测试在整个组织中的推广提供坚实的基础。

2.4.5 流程制度建设

制度建设,如果是做个demo的话,那选择工具开发完脚本上线运行即可,但为了自动化测试持续不断地运行,需要流程制度的建设,只有将流程固定下来,形成闭环,才能持续运转,持续改善。

流程制度是自动化测试中非常有价值的智力资本,通过梳理流程,将自动化测试有机整合至软件交付流程,为自动化测试提升长久的生命力,通过规范制度的建立,将自动化测试实践的规范内容通过制度的形式确定下来,确保测试过程的标准化和一致性,提高测试效率和质量,通过将这些实践内容制度化,并辅以适当的团队结构和治理模式,可以确保自动化测试的有效实施和持续优化。这不仅有助于提高软件测试的质量和效率,还能支持更快的发布周期和更好的决策制定。

这里面临的挑战是无法协调开发、测试的资源投入,现有交付流程下,开发跟测试之间的工作内容已经确定,此时再增加一项自动化测试的内容,让开发人员及测试人员编写自动化测试脚本,执行自动化测试用例,表面上看降低了交付速率,但实际提升了软件交付质量,提高了交付效率,综合来看还是能够有效提升效率的,不过在协调各团队成员时,需要通过有力的数据对比,领导的支持等方式实现流程的固化,规范制度的建立。

2.4.6 度量与改善

自动化测试的一次实践并不是终点,而是开始。

自动化测试实践的度量对于评估测试过程的效果、定位问题以及指导未来的改进至关重要。有效的度量指标可以帮助团队了解自动化测试的覆盖范围、效率和质量,进而采取措施进行改善。以下是确定的度量指标及其改善方法:

测试用例自动化执行占比: 自动化测试的工作如何跟测试阶段进行整合,并评估自动化测试的占比,需要通过自动化执行占比来评估自动化的程度,并能够通过该指标确定每个系统及每个测试人员自动化执行的占比。为了增加覆盖率占比,可以设计更多的自动化测试用例,特别是针对关键功能和高风险区域。

自动化脚本bug发现率: 指标显示了自动化测试执行发现的有效bug数,并占所有有效bug数的百分比。为了提高这个比率,可以优化自动化测试脚本,使其更能模拟真实用户行为,或者在不同的测试环境中执行自动化测试。

自动化测试脚本执行次数: 指标显示自动化测试脚本的执行了多少次,反映自动化测试投入产出比,只有执行次数达到一定数量后,产出才会大于投入,说明该场景的测试脚本开发是有价值的。

自动化测试脚本执行时间: 指标记录了执行单个自动化测试用例所需的时间。执行时间过长可能意味着需要优化测试脚本或改进测试环境。通过重构脚本、减少冗余操作或利用更高效的服务,可以降低执行时间。

自动化测试用例异常率: 指标反映了自动化测试用例执行失败的比例。过高的异常率可能表明系统不稳定或测试用例需要更新。通过监控系统状态、优化测试脚本和维护测试用例,可以降低异常率。

通过这些度量指标,团队可以系统地评估自动化测试的效果,识别改进领域,并采取具体措施以提高测试效率和质量。持续的优化和调整对于保持自动化测试的有效性至关重要。

第三章 自动化测试的

未来发展趋势

DevOps的本质是为了实现快速、高效且有价值的交付,对自动化测试实践的思考同样逃不开该本质目的,我们在自动化测试实践时,同样思考还能够采用哪些新思维新技术实现自动化测试的高效交付。在研究行业发展趋势及新技术之后,认为自动化测试的未来发展趋势将紧密与人工智能(AI)、机器学习(ML)、大数据、云计算等技术的发展相结合,以便应对日益复杂的软件系统和持续变化的测试环境。随着互联网和物联网设备的激增,以及移动应用程序和云计算服务的广泛应用,自动化测试的需求将持续上升。

(一)人工智能和机器学习: AI和ML技术将在自动化测试中发挥更大作用,例如通过智能分析测试数据、自我修复测试脚本以及预测软件故障等。这将进一步提高测试的准确性和效率,同时减少人工干预的需要。

(二)大数据和云计算: 大数据将使得自动化测试能够处理和分析海量数据,而云计算则提供了一种弹性可扩展的服务平台,使得测试过程可以更加灵活和高效。结合容器化和无服务器架构,自动化测试将能更好地适应现代软件开发中的微服务体系和持续集成/持续部署(CI/CD)流程。

(三)移动应用程序和互联网应用程序: 随着移动设备和Web服务的普及,针对移动应用程序和Web应用程序的自动化测试将变得更加重要。这包括使用模拟器和真实设备进行的测试,以及针对不同操作系统和浏览器的兼容性测试。

(四)安全性和隐私: 在自动化测试中,安全性和隐私保护将变得至关重要。测试过程中需要确保数据的安全传输和存储,同时验证应用程序是否遵循相关的安全标准和隐私法规。

(五)虚拟现实和增强现实: 随着虚拟现实(VR)和增强现实(AR)技术的发展,针对VR/AR应用程序的自动化测试也将成为一个新兴领域。

(六)无代码和低代码测试工具: 无代码测试工具将允许非技术人员通过图形界面和拖放组件等方式快速创建测试用例,而低代码工具则允许开发者以少量代码快速搭建测试脚本。这将加速测试过程的自动化,并降低测试门槛。

综上所述,自动化测试的未来发展趋势将是一个持续进化的过程,它需要测试人员不断适应新技术,采用创新的测试方法和工具,以保障软件质量,提高测试效率,并满足现代软件开发的需求。

第四章 结论

自动化测试在DevOps实践中的实施,虽然面临着许多挑战,但通过采取有效的应对策略和实际路径,可以有效地提升软件交付效率和质量。自动化测试的实施需要明确目标,选择合适的工具,建立有效的流程制度,并通过数据度量和持续改进来实现交付效率的提升。通过实践案例分析,本文证明了自动化测试在提升软件交付效率中的作用,并为自动化测试的实施提供了参考。

参考文献

[1]【自动化工具对中国DevOps实践的影响】 黄璜、张贺、邵栋著 2019年10月

[2]【面向DevOps的软件工程新技术专题前言】‌荣国平、白晓颖、岳涛著 2019年10月

[3]【DevOps中的测试实践】 腾讯WeTest平台 2020年12月

与其临渊羡鱼,不如退而结网,用力拥抱梦想!!!

【研发效能(DevOps)工程师 职业技术认证】

掌握端到端的研发效能知识体系,是想要成为高级管理者的必备技能!

八期班-3月20日,正式开班! 立即报名,扩展职业发展与晋升之路!