jjzjj

Eolink实践 | 基于DevOps的持续测试策略

小林coding 2024-06-23 原文

DevOps 如今在企业中显的尤其重要。想要获得成功我们就需要制定好的测试策略来实践。

什么是 DevOps 测试策略?

DevOps 的一个重要组成部分是持续集成/持续交付(CI/CD)。在CI和CD之间,应该是持续测试。
如果不进行持续测试,将会出现:

  • 缺陷的泄漏
  • 软件延期交付
  • 客户不满意

DevOps测试策略的好处

可以提供更快的反馈

提供更快的反馈。我们都不希望看到开发人员不得不回到他们在1-2周前编写的代码中去修复一个bug。我们希望他们得到更快的反馈,这样他们就可以立即解决问题。我们可以更快地释放投入到其他工作。

可以覆盖更多平台

通过实施扩展自动化测试的策略来覆盖更多的平台。这可能具有挑战性,因为移动和网络平台都是分离的。但是,当我们使用正确的测试自动化工具时,可以确保在更快的时间内覆盖更多的平台。

尽量减少测试执行时间限制

最后,减少测试执行的时间限制。执行时间需要更短。当我们大规模并行运行,并使用正确的工具时,我们可以加快上线的时间。

开发DevOps测试策略的最佳实践

对于大多数企业来说,理想的状态是持续测试并制定出测试策略的最佳实践。

进行规模的自动化测试

为了建立一个成功的DevOps测试策略,需要在 Web 和移动设备上扩展测试自动化。

扩展Web测试

扩展移动测试

拓展API 自动化测试

随着项目发展,API 数量越来越多,每次迭代涉及到的回归测试任务也越来越重。API 自动化测试功能能够让测试人员仅通过界面来创建 API 自动化测试,一键发起自动化测试并实时得到测试结果,提高回归测试效率。

  • 0 代码 API 自动化测试:能够让测试人员仅通过界面来创建 API 自动化测试,不需要学习 如何编写代码。

  • 通过 Javascript 编写复杂的测试用例:提供了 Javascript 脚本模式。可以通过非常简单的 脚本来编写复杂的 API 测试用例,实现自动化测试中复杂的流程跳转、数据加解密、验签等目的。

  • 可进行 API 之间参数传递:无需学习变量和脚本语法,通过界面可以直接设置复杂的参数传递规则,如将注册后的 Token 传递给登录 API,将登录后的 Cookie 传递给后续 API 进行 鉴权等。

  • 可直接对 JSON、XML 等结果进行校验:无需编写脚本解析复杂的 JSON、XML 结果,系统自带的强大的结果校验工具能够让测试人员快速对数据进行校验。

  • 支持对数据库进行操作:测试过程中可以直接对数据库进行操作,方便在测试之前写入测试数据、测试中校验数据、测试后清空脏数据等。

  • 支持 定时 / Open API 发起自动化测试:系统会记录每一次的请求历史,可以看到详细的测 试时间、请求及返回信息等。

  • 自动生成测试报告:每次测试都可以生成详细测试报告,支持在线查看和离线下载;报告中会显示 API 的请求时间、请求参数、返回结果、校验结果、错误原因等信息,方便对 API 进行排查。

  • 自动将 API 文档变更同步到测试用例中:当 API 文档发生变化时,可以一键将最新的 API 文档内容同步到测试用例中,减少维护测试用例的时间成本。

自动化所有测试类型

要制定一个成功的策略,就需要跨所有测试类型实现自动化。功能测试和非功能测试,性能、可访问性和单元代码覆盖率等等。

维护稳定的测试自动化套件

CI内部和CI外部的自动化是敏捷和DevOps的核心。确保自动化持续增加价值 -> 并满足上述目标 -> 需要一个稳定的测试自动化套件。

自动化套件必要时进行不断的审查、审核、维护和重构。

随着产品代码的更改,测试也会随之更改。确保团队正在研究测试场景并在需要时对其进行更新。

要解决这种情况,明智的做法是通过自动化测试框架让软件在进入生产阶段之前完成自动化测试。实现自动化的一种方法是通过将测试驱动开发(TDD)与行为驱动开发(BDD)的组合分层,以确保可测试性、更高的效率和促进协作。

从长远来看,拖延解决问题是有风险的。因此,不应该让DevOps中的问题恶化,因为它可能会迅速升级。如果使用大量手动测试而不是应用自动化测试,就会出现这样的场景。

为了控制快速的DevOps生命周期,测试自动化是一个基本的必要条件。在现有条件下,有必要考虑广泛和允许关键的变更来增强测试自动化过程。需要优化总体测试策略以获得满意的结果。

使用高级报告和分析

每个测试活动的核心都有一份测试报告。报告越详细、越有可操作性,开发人员就越能更快地找出故障的根本原因并向前推进。
确保使用强大的报告平台作为整个测试活动的一部分。

让整个团队参与测试

如果没有整个团队的参与,DevOps测试策略是不会成功的。
为了对每个pull请求和代码更改进行大规模的自动化测试,我们需要:

  • 业务测试人员进行探索性和结构化的手工测试——利用无代码自动化测试。
  • 测试中的软件开发人员创建基于功能和非功能代码的自动化测试脚本
  • 软件开发人员创建单元并构建验收测试

成功实施 DevOps 测试策略所需的工具

  • Docker –容器化工具

  • Git –版本控制系统(VCS)工具

  • Jenkins –持续集成(CI)工具

  • Jira –敏捷的团队协作工具

  • Nagios –连续监控工具

  • Puppet –配置管理和应用程序部署工具

  • Eolinker - API测试和API自动化测试

3个由 API 驱动的 DevOps 策略

为了充分利用 DevOps 管道,需要将其与适用于企业的 API 策略相平衡。下面,我们将回顾 API 如何加速常见的 DevOps 策略。

API 信息管理

  • 为 HTTP、HTTPS 协议的 API 提供文档管理;
  • 手动创建 API 文档;
  • 自动从代码中识别注解生成 API 文档;
  • 针对 API 文档进行版本管理,支持一键切换、对比历史版本;
  • 支持 API 变更通知,当 API 发生变化时通知相关团队成员;
  • 支持 API 在线评论,可以直接针对 API 文档进行评论并通知相关成员;

API 测试管理

  • 一键对 API 发起测试
  • 支持请求参数类型:表单、JSON、XML、Raw、Binary、Query、Rest、其他自定义类型
  • 支持对 API 测试进行时间分析
  • 支持对 API 进行鉴权
  • 支持编写脚本改变测试的内容
  • 支持将测试数据保存为测试用例方便后续调用
  • 支持一键批量测试所有测试用例并得到返回结果

API 研发流程管理

  • 支持 API 状态变更通知:支持将 API 设置为已发布、设计中、待确定、开发、对接、测试、完成、异常、维护、废弃等状态,并且根据每种状态设置状态变更操作,比如当 API 变为测试状态时通知测试人员;
  • 支持 API 变更通知,当 API 发生变化时通知相关团队成员;
  • 支持 API 在线评论,可以直接针对 API 文档进行评论并通知相关成员;
  • 支持 API 统计,能够了解整个项目内的 API 状态分布、bug 情况、迭代情况等;
  • 支持创建 API 迭代计划,了解当前迭代计划中包含的 API 信息以及当前的研发、测试状态等;


API 在 DevOps 中的重要性

企业不断寻找新方法来降低成本和提高效率,同时保持产品质量。API 可实现自动化、推动一致性、效率和成本节约。

提高运营效率

自动化帮助公司从运营过程中消除人为错误和成本。即使是一项记录良好、清晰、可重复的任务,如果由人完成,也会产生不同的结果。另一方面,自动化此任务可确保每次都以相同的方式执行。这种一致性提高了操作的可靠性和效率。

实现业务连续性和灾难恢复

手动灾难恢复计划不是确保业务安全的理想选择。手动流程总是为错误留有余地。API 使公司能够自动化灾难恢复流程并提高效率。

通过 API 实现的自动化允许公司在灾难期间访问所有必要的工具。这包括由虚拟化平台中公开的 API 驱动的复制工具。

结论

DevOps 实践可以在系统失败和成功之间产生差异。团队可以利用 API 来消除从头开始新项目所需的时间和资源。此外,API 策略可以帮助公司通过使用云 API 来采用云原生方法,通过版本控制系统驱动 DevOps 管道,并解决遗留系统问题。

了解更多有关API的内容,可以访问:www.eolink.com

有关Eolink实践 | 基于DevOps的持续测试策略的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  8. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  9. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  10. ruby-on-rails - 如何调试 cucumber 测试? - 2

    我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element

随机推荐