每个软件项目都涉及成功实施和部署项目的某种“过程”和“实践”。 随着项目规模和规模的增加,复杂程度也以指数方式增加。 领导团队应尽一切努力以某种方式开发,测试和发布软件,以便以增量方式进行发布,从而对客户已经可用的软件产生最小(或没有)影响。
在本文中,我将介绍有关测试自动化的CI / CD最佳实践,以帮助您加快上市进程。
在上一篇文章“ 什么是持续集成和持续交付?”中 ,我们已经介绍了CD / CD 。 我们在哪里讨论了他们的目的? CI / CD管道中涉及的贸易工具。 在测试/验证阶段发现的每个错误都经过严格的开发,集成,测试和关闭过程。 如果此活动是手动完成的,则可能会花费大量的工时和验证工作,因此理想的是在CI / CD中具有“测试自动化”功能 。
CI / CD中的“部署管道”和测试自动化的作用
一个自动化系统,称为CI / CD中的Deployment Pipeline ,可以自动测试服务器上可用的增量版本。 由于整个过程是自动化的,因此与手动测试相比,总的周转时间(TAT)将大大减少。
在大多数情况下,不可能完全自动化测试。 可能有一些需要手动干预的测试场景,或者需要手动观察来确定测试是否通过的场景。 尽管自动化是CI / CD管道不可或缺的最佳实践,但确定测试方案是否自动化将被认为是CI / CD至关重要的最佳实践,如果测试方案是自动化的,则可以获得更好的结果。
尽管使用自动化测试有很多好处,但在CI / CD管道中使用测试自动化的一些主要好处如下:
- 更快的错误关闭-问题检测->问题修复->问题关闭。
- 有效利用现有的整体资源,例如测试人员,测试基础结构等。
- 能够并行执行测试。
- 测试计划和执行的一致性。
- 自动化测试用例执行所需的最低技术技能要求。
如何在CI / CD管道中实现最佳的测试自动化?
尽管CI / CD管道中测试自动化的范围可能因一个项目而异,但CI / CD的某些最佳实践可应用于任何项目,而不论其规模和规模。
增量变化与及时沟通
开发人员可以采用大爆炸式方法来开发新功能或解决测试团队报告的问题。 这意味着开发人员将使用该选项,从而一口气推动功能实现。 尽管完成了实现工作,但是这种方法还是存在一些问题。 主要缺点是很难隔离问题(如果实现存在问题
一个更明智的方法是将功能分解为不同的子功能,并为每个功能使用唯一的功能标志 。 该技术不仅有助于隔离潜在的问题,而且在需要时可用于进行增量功能构建。 当最终功能(由许多子功能组成的组合)被推到主线/生产分支时,这也降低了出现集成问题的可能性。
在某些情况下,功能之间存在相互依赖关系,即功能“ A”依赖于功能“ B”,在这种情况下,任何开发人员都必须等待100%完成依赖关系的功能。 通过正确使用存根和功能标志,两个功能开发人员都可以避免死锁情况,因为存根将用于计划中/正在进行的实现。 一旦所需的功能准备就绪,开发人员就必须摆脱基于存根/虚拟的实现,该实现只是一个已知接口的实现的占位符。
这项开发活动需要精心计划并在开发团队之间进行及时互动,以充分利用CI / CD管道中的测试自动化。 遵循这种方法的任何纪律都会影响您的总体测试进度。
识别可以自动化的测试
如前所述,不太可能100%的测试可以自动化,因为至少在某些测试中,与自动化测试相比,手动测试会更有效。 由于测试自动化是CI / CD管道的核心,因此实现那些可以自动化的测试用例对于CI / CD是至关重要的最佳实践。
可以自动化的两大类测试:
频繁执行的测试:如果此类测试由测试人员“手动”执行,则可能会出错,因为生产率可能会降低,因为测试人员一天必须多次执行相同的测试。 以必须要进行浏览器兼容性测试的Web产品为例。 某些测试案例可能涉及在不同浏览器/设备/操作系统组合上测试Web应用程序时捕获其屏幕截图。 为这些组合中的每一个拍摄屏幕截图可能是一项繁琐的任务。 因此,自动化的跨浏览器测试可以使测试人员腾出时间来编写有效的测试用例 。
需要知识并依赖特定测试人员集合的测试:如果项目关键阶段没有可用资源,则仅具有测试执行所需领域知识的资源(开发人员/测试人员)的依赖可能会带来风险。 因为只有该测试人员才知道测试的前提条件和程序,所以他的缺席会影响整个项目的可交付成果。 通过将测试自动化集成到CI / CD管道中可以避免这种情况,从而不会对项目截止日期造成不利影响
在许多其他情况下,可以使用自动化测试,其目的应该是利用工具和测试平台(可扩展)来帮助您实现这一大胆的目标。
一键迁移
如果具有一键式功能将代码从一个应用程序环境迁移到另一个应用程序环境,则可以大大减少将代码更改移至生产环境的工作。
结构良好的CI / CD管道应进行一键式迁移,因为它可以减少不同操作之间的摩擦(在代码迁移中)。 选择具有此功能的优良云基础架构以及高效,优雅地使用测试自动化可以优化开发和运营流程。 只需单击一下即可推动您的开发,非常适合作为CI / CD的最佳实践。
利用并行测试作为CI / CD管道的最佳实践
CI / CD的另一个最佳实践是并行测试执行。 一旦确定了需要自动化的测试,下一步应该是在测试方法中纳入“并行执行”因素。 将测试自动化作为CI / CD管道的最佳实践已经可以加速整个过程,但是如果将其与并行测试结合使用,则结果会更好。 您可以同时执行多个自动化测试,这可以更快地产生结果。
如果在一台计算机上执行测试,则无法从并行测试中获得最佳吞吐量。 这种情况会占用机器上的关键资源,例如CPU,GPU等,这可能会减慢机器上运行的其他测试的执行速度。 因此,执行测试的基础结构非常重要。 对于测试Web应用程序/网站,拥有内部测试部署和执行基础结构可能不是理想的解决方案(就成本和可伸缩性而言)。 这是LambdaTest出现的地方,可帮助您在包含2000多种浏览器和浏览器版本的云上在线Selenium Grid上使用TestNG,Pytest等测试自动化框架执行并行测试 。
从先前执行的项目中学到的东西
每个软件项目都有不同的阶段,即项目计划,需求收集,实施,测试,产品部署等。每个阶段都涉及学习,这些学习可以用于更好地计划和实施下一个项目。 即使项目的性质有所不同,您仍然可以利用过去项目中的一些最佳实践,从而可以加快当前项目的每个阶段。 另外,为避免重复其他项目中犯的错误。
您应该记下用于加速流程的测试自动化技术,这是CI / CD的最佳实践。 您应该让团队成员(即开发人员,测试人员)参与进来,以探讨可以重用测试自动化最佳实践的可能性,这样您和您的团队就不必重新发明轮子了。 例如,可能使用了某些测试框架,这些框架帮助我在较短的时间内获得了更好的测试结果。 记录这些学习内容,因为这可能有助于设计合理的测试管理策略 。
为什么绝对需要文件?
在某些情况下,项目需求会随着项目执行过程的变化而变化。 同样,测试自动化策略应以计划短期目标和长期目标为目标的方式设计。
尽管一段时间内可能会对测试计划或测试策略进行更改,但团队至少应将某些流程标准化。 标准化可能意味着短名单中的特定测试框架,确定适合您预算和要求的云基础架构,建立一支胜任的自动化团队来处理测试脚本(使用Python / C#/ Java /其他编程语言)。 您还应该有一个备份计划(Plan-B),以防组织中的日程表或整体业务发生任何变化。
记录这些内容很重要,以便可以在任何时间点进行引用。 除了上面已经提到的指针外,文档还应包括一个部分,突出显示与执行测试策略相关的“风险和假设”。 例如,将以4名自动化工程师作为资源计数来创建测试计划/测试策略。 但由于某些不可预见的情况,您可能需要缩减团队规模。 因此,通过查看与项目关联的所有不同参数来创建防呆测试策略。 强调测试策略的文档应该是自由流通的文档,即用重要的时间表和里程碑进行更新,并且应该进行版本控制,以便重新访问该文档以跟踪进度。
用于代码开发和维护的中央存储库
在任何项目中,团队中都会有很多开发人员推送他们的代码,这些代码可能是功能实现或错误修复。 同样,开发人员将执行拉取请求,以从服务器获取最新的代码更改。 在中央存储库中维护源代码至关重要,并且被认为是CI / CD管道的最佳实践之一。 这样开发人员就可以使用生产服务器上可用的最新源代码来使更改保持最新。
修订/版本控制系统对于跟踪更改,识别差异以及维护简化任务以跟踪应用程序构建的环境也很重要。
使用版本控制回滚
在某些情况下,测试团队可能会遇到一些以前的软件版本中未发现的问题; 可能的原因可能是受测试的发行软件中推送的修复程序的副作用。 执行RCA(根本原因分析)有时可能会很耗时,并且您不能在生产环境中长时间失去有价值的功能。
在这种情况下,推动该修复程序的开发人员应该能够回滚其更改,以使发布不会停止,并且他还有更多的时间重新查看其实现。 没有版本控制系统,这种无缝回滚是不可能的。 回滚并不仅限于源代码; 它可以扩展到文档,演示文稿,流程图等。
![测试自动化](https://i-blog.csdnimg.cn/blog_migrate/a2cc84e7541d193e8ca403991e186459.png)
临时环境模仿生产环境
无论用于跟踪代码更改的版本控制工具如何,在所有开发环境中都经常使用开发和测试环境。 开发团队可以为不同的客户组使用不同的“开发分支”,但是代码仍将推送到生产服务器/登台服务器。 为了提高效率,过渡环境应理想地反映生产环境。 我观察到的一个常见错误与实时路况有关。 通常,登台环境会错过生产环境用于处理负载的实时流量。 以下是登台环境使您的组织失败的13个原因 。
这种方法使将工作代码从登台服务器部署到生产服务器变得容易。 实际上,开发人员还应该具有灵活性,他们可以通过单击按钮来创建和设置新环境。 有一些工具,例如Jenkins,可以帮助实现相同目的。 使用开发团队和DevOps团队通用的工具对于简化CI / CD流程的最佳实践至关重要。
让相关的利益相关者参与测试代码的开发
让正确的利益相关者参与测试自动化计划,开发和执行变得至关重要。 由于团队中的开发人员可以为测试工程师实现的测试代码增加更多的价值,因此最好让他们参与测试用例的实现。 开发人员对软件开发的体系结构,编码技术和最佳实践有更好的了解。 经验丰富的QA工程师可能对测试基础结构,测试框架等有很好的了解。因此,与QA工程师合作的开发人员可以减少测试用例开发中的工作量和时间,从而加快CI / CD管道的测试自动化。
在紧急情况下,开发团队可以在不参与测试团队的情况下处理自动化代码,因此不会延迟实施自动化测试。 但是,建议让相关的利益相关者,尤其是质量保证工程师和开发人员参与测试用例的实现。
结合反馈,以在CI / CD管道中提供可靠的测试自动化策略
测试策略文档为如何计划和执行测试自动化以及其他与测试相关的活动制定了公平的计划。 除了更新测试策略(在需要时以及需要时)之外,反馈循环还应用于及时更新CI / CD管道中测试自动化的代码。
反馈可用于了解用户的痛点并获得有关自动化测试提供的基础架构的总体用法的详细信息。 例如,测试自动化工程师和DevOps团队可能会在短暂的测试过程中对基础架构有所了解。 这些观察结果可能与用于捕获日志/将Python和Selenium中实现的自动化测试代码捕获到用于测试/执行与测试执行相关的云基础架构的方法有关。
所有这些反馈都应记录在文档中,并且相关的反馈应作为最佳做法纳入CI / CD自动化管道,以使测试代码与当前要求保持同步。
CI / CD管道测试自动化中的频繁代码承诺具有微敏捷性
开发人员根据规范中提到的要求开始开发。 一旦实现完成,开发人员将对代码执行单元测试,并修复在这一轮测试中遇到的问题。 由于测试是独立测试,因此他应该能够解决独立于集成的问题。 本地测试完成后,开发人员会将代码推送到代码存储库。 在大多数开发环境中,通常将代码推送到“开发部门”,一旦批准并测试了代码,便可以将其推送到“生产部门”。
因此,应该鼓励和激励开发人员更加频繁地推动代码更改,以便轻松跟踪更改。 团队中的开发人员应认真遵循CI / CD的这一重要最佳实践,以便您能够在与CI / CD管道中的开发和测试自动化有关的活动中实现微敏捷性。
记住,它是CI + CD!
如果我们引用CI / CD流程的最佳实践,则交流与协作是关键Struts,因为有多个团队(产品规划,开发团队,验证团队,DevOps团队等)必须协同工作才能使项目成功。 因此,与这些领域中最优秀的领导者对CI / CD过程进行基准测试很重要。 它被认为是CI / CD管道的关键最佳实践,可为优化提供敏锐的意见和建议。
CI和CD是两个独立的过程,但是不能将它们称为不可分割的过程。 执行CI流程的任何延迟或延迟都可能妨碍CD流程的输出。 尽管可以使用自动化来提高CI / CD过程的效率,但是在很多方面自动化可能无效。
另外,请记住,在任何项目中,都不会发生孤岛活动,因为总会有人依赖您的活动结果。 为此,项目利益相关者之间需要适当的沟通。 例如,您的质量保证工程师可能正在研究某些测试用例,而这些测试用例并不能满足所有要求。 如果执行了这样的测试,您可能无法获得良好的测试覆盖率,因为在测试用例/测试套件实现中会漏掉重要的场景。
通过首先执行较小的测试用例,使其保持简单和井井有条!
我在许多项目中都见证过,当涉及到CI / CD管道的测试自动化时,我们常常忘记以系统的方式对测试用例进行优先排序。 这就是我的意思! 作为CI / CD的最佳实践,始终建议先执行较小和简单的测试用例,然后再执行较长和复杂的用例。
这样,您可以确保以独立方式进行功能测试方面的单个测试用例覆盖范围和性能。 设计测试用例以检查多个模块之间的交互的复杂测试用例可能会在以后出现!
团队内部和团队之间的透明度
许多项目的开发和质量检查团队位于不同的地区。 除了需要确保每个团队成员同步的高度协调之外,更好的透明度还可以使事情变得更好。 在这里CI可以非常有效,因为它为团队的主要利益相关者带来了非常需要的透明度。
有了CI,团队就可以更好地了解测试的总体状态以及可以采取哪些措施来提高测试效率。 这就是如何促进集体智慧的使用,以改善团队和项目。 必须让所有人都在同一页面上工作,尤其是在远程工作时。 作为CI / CD流程的最佳实践,项目管理工具可能非常有效。 使用项目管理工具,每个人都会改变其他团队成员所进行的活动,还必须完成任务的截止日期。 这是为您的软件测试团队提供的19种最佳协作工具 。
为CI / CD处理选择正确的工具
上述所有技巧和可行见解将帮助您使用CI / CD管道的最佳实践来加快测试自动化的步伐。 尽管最后,起搏CI / CD管道在很大程度上取决于工具。 CI / CD有许多可用的工具,但是您应该根据预算,要求和经验选择合适的工具。 一些常用的CI / CD工具是Jenkins,Travis CI,Gitlab,TeamCity,Codeship,Circle CI等。
在对任何特定工具归零之前,我们强烈建议您先看一下该工具的优缺点,因为在开发过程中CI工具的任何更改都可能会影响您的交付成果和截止日期。
![测试自动化](https://i-blog.csdnimg.cn/blog_migrate/3b5025a6e67d76a30bb6b3670f3bfebf.png)
CI / CD工具与LambdaTest上的在线Selenium网格集成
谈到CI / CD工具,这是一个额外的技巧,LambdaTest提供了一个Selenium网格,该网格与您可能正在使用的每个CI / CD工具兼容,因此您可以加快跨浏览器的测试工作。
结论
测试自动化是整体测试策略不可或缺的一部分,但必须谨慎计划和执行。 在测试自动化的许多方面(尤其是与基础结构相关),您可以在不投资内部测试基础结构的情况下灵活地使用现有资源。 由于可靠性和可伸缩性方面的原因,基于云的测试可以简化您的总体测试自动化策略。 这些增强功能不仅可以激励团队成员,还可以使您从CI / CD流程的最佳实践中获得最大的收益。
![测试自动化](https://i-blog.csdnimg.cn/blog_migrate/16d1fd7317f610234d7a24e4b5fdaee8.png)
翻译自: https://www.javacodegeeks.com/2019/03/practices-pipeline-speed-test-automation.html