大厂都用DevOps!十分钟带你了解自动化在DevOps中的运用

Hi,大家好。DevOps、CI/CD、Docker、Kubernetes……好像全世界都在谈论这些技术,以至于你觉得即将到达NoOps阶段。别担心,在工具和各种最佳实践的浩瀚海洋中感到迷失是正常的,是时候让我们来分析一下DevOps到底是什么了。

一、DevOps介绍

1、简介

DevOps是一系列软件开发实践,强调开发人员(Dev)和运维人员(Ops)之间的沟通合作,通过自动化流程和工具,使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps强调一种打破固有的开发和运维人员之间壁垒的文化,强调开发、测试、运维等环节之间的沟通合作。DevOps 是讲敏捷开发实践扩展到运维阶段的一种实践方法,强调软件构建、部署、交付等的流程化。DevOps也是一系列的工具链,从编码、构建、测试、打包、发布到配置、监控等,基于一系列的基本原则和实践的方法论,形成一套工具化、自动化的工具链。它使他们能够构建,测试和部署应用程序,同时大大缩短产品上市时间。DevOps让软件过程既“快”又“稳”。快和稳体现在部署频率、交付周期、平均修复时长、变更失败比例这4个维度上。

质量保证是瀑布开发过程中不可或缺的一部分,但在DevOps中仍然占有重要地位。DevOps的过程永远不会花费大量时间在编码和发布之间进行全面的测试创建。这也意味着团队将不断努力,以有效,快速地指定,构建,测试和部署软件。

测试量的增加也增加了对测试自动化的要求。DevOps需要测试自动化的备份,以保持敏捷和高效。测试自动化对于保持完整的质量控制并保持发布速度至关重要。无论如何,CI / CD管道中无法避免对自动化测试的依赖。

2、好处

测试自动化具有许多优势,企业可以利用这些优势来简化其DevOps实践

  • 消除人为错误的可能性;
  • 在测试运行期间不需要人工干预;
  • 获得更快的反馈;
  • 更多设备覆盖;
  • 自动化确保质量的一致性;
  • 自动重新配置;

尽管具有多个优点,但是自动化测试可以完全取代手动测试吗?好吧,答案不是肯定的。但是,最好的方法应该是尽可能自动化同时仅对不太关键的应用程序功能进行手动测试。这包括更新测试脚本,审阅,完成一次性测试以及测试可用性等。

持续实施测试自动化可以更轻松地根据历史数据量化自动化程度。但是,对测试领域不熟悉的人可以使用此标准公式来计算测试自动化的估计ROI。

测试自动化成本=工具成本+创建脚本的人工成本+自动化测试维护的成本

如果您多次使用自动测试,则每次使用后ROI都会相加。因此,如果自动化评估低于手动测试,则继续执行该策略,并找到尽可能多的自动化领域。

二、各测试阶段分析

1、单元测试

单元测试的重点是没有调用数据库,也没有Web服务的代码。由于关注范围较窄,而且对外部服务或系统没有依赖性,因此这些测试非常快。

单元测试仅专注于确保所有路径都通过代码并得到正确验证。考虑一种工资核算算法,该算法设计用于计算每小时工作的工人的工资。该算法将通过考虑工时数和小时费率来计算工资。但是,这种算法将需要多种类型的情况,包括:

  • 标准工作时间(0–40小时)
  • 加班时间(小时数大于40到公司每个时期的最大小时数)
  • 纠正错误(负小时,负工资,超过最大小时数)

使用广泛接受的工具(包括NUnit,RSpec和JUnit等)来验证这种情况。通过使用公认的工具(包括NUnit,JUnit和RSpec等)进行单元测试,可以有效地验证这种情况。

2、集成测试

集成测试可以验证组件之间的行为。它包括检查数据库调用,Web服务或其他API交互之间的行为。

与单元测试相比,由于要处理大量的“仪式”以建立连接,进行身份验证以及处理网络和服务延迟,因此集成测试的速度较慢。集成测试应包含在更重要的验证中,而不是粒度验证中。

3、功能测试

功能测试旨在从功能上验证系统的一部分。与集成测试不同,功能测试要慢得多,因为它们贯穿用户界面的长度和广度。可以理解,它们比单元测试要慢得多。

由于性质脆弱而缓慢;让功能测试处理高价值案例是可行的。让功能测试处理过多的低级操作会大大缩短产品上市时间。

只有在交付团队之间密切配合的情况下,才能有效覆盖测试范围。确保有效的测试还可以确保在测试覆盖范围内避免任何形式的重复。防止重复测试对业务至关重要,以便可以使用昂贵的工具来解决特定问题。

那么,在什么情况下测试自动化最可行?

  • 在要求测试关键的功能期间,用户可以清楚地看到其故障;
  • 劳动密集型和重复性零件;
  • 具有导致问题历史的功能测试;
  • 测试需要大量数据的组件;
  • 压力/负载测试;
  • 针对不同的版本,数据集和浏览器进行测试;

4、自动化测试

企业需要尽可能地使测试阶段自动化,以确保所需的集成交付阶段能够有效地满足时间表。为了有效实施DevOps实践,团队需要在开发的早期阶段开始测试阶段,并在其整个生命周期中保持连续。通过从开始阶段检测问题就可以轻松实现所需的发布频率,当这些问题更容易解决且不花大钱时。

但是,您需要在开发周期的各个阶段使用不同的测试方法。您在不同项目上需要的不同类型的自动化测试包括回归,单元,性能,集成,负载,可访问性,安全性和生产监控以及功能测试等。

三、自动化与DevOps

1、有什么意义?

为了适应频繁交付的速度,测试工作需要更加高效,这就使得自动化测试成为必须。说到自动化测试,就不得不说一说测试金字塔。金字塔由下至上大致分为单元测试、接口测试、界面测试,在金字塔越底层发现问题解决成本越低,而越向上一层,解决成本越高,效率也会越低。所以,按照金字塔原理,在最底层单元测试方面,我们要做得足够充分,这里的充分并不仅仅是用例数量多、覆盖率高,更是要求测试质量要高。如果在界面测试发现了问题,我们需要从界面到接口、模块等等,需要多方配合进行问题定位。如果在单元测试发现问题,就是模块本身的问题,问题定位与解决速度就快的多。而自动化测试,可以使测试效率与质量都得到提升。不过自动化测试对测试人员的自动化测试能力、测试工具等都有一定的要求,是需要一定投入的,不过后期收益也是显而易见的。

2、如何推进?

在敏捷开发的生命周期中,我们通过每一次迭代来丰富和更新产品,以使其最大限度地符合客户对系统的需求。而测试的关注点在开发阶段,保证产品达到上线标准。引入 DevOps 之后,我们不仅关注产品的质量,同时也关注产品价值的及时验证。因此,我们不仅要测试左移,在开发、甚至设计阶段就发现问题并及时验证,还要测试右移,通过监控产品在生产环境的运行数据,来验证产品价值及时获得反馈,从而不断改进产品。

我们在推进 DevOps 工程的同时,也在不断探索应该如何在DevOps下更好的完成测试工作。在 DevOps 中,测试不仅仅用来及早发现产品问题,验证产品质量,更成为验证产品价值并获得反馈,以达到持续改进产品的目的。而测试也不再是测试人员的专属工作,整个团队都应该对质量负责,DevOps 更是对自动化测试提出来更高的要求,作为团队成员,每个人都应该提高测试技能,而测试人员应该更加关注自动化测试技能的提升,团队成员共同努力,才能更好的发挥测试的价值。

3、所需资源?

DevOps 工具都是开放源代码,并支持从容器构建和编排到微服务网络,配置管理,CI / CD 自动化,全栈监视等更多功能。以下列举一些当今最受欢迎的 DevOps 工具:

  • Kubernetes:无需手动发布微服务,Kubernetes可以自动化生产中的容器组的部署,维护和扩展
  • Docker:Docker 是一个免费的开放源代码平台,用于以轻量级容器的形式构建,发布和运行应用程序。容器打包了程序运行所需的二进制文件,库,配置文件和依赖项。
  • Jenkins:DevOps 理念的很大一部分是寻找更有效地自动化和部署新迭代的方法。此目标的一部分是创建简化的持续集成和持续交付(CI / CD)管道。Jenkins 是一个开放源代码自动化服务器,带有数百个插件,可自动完成软件项目的构建,部署和测试。
  • ELK Stack:ELK Stack 是由 Elastic 维护的Elasticsearch,Logstash和Kibana三个开源项目的结合。使用这三个组件,开发人员可以从任何来源获取和记录数据,并创建有用的可视化文件。
  • Prometheus:Prometheus 服务器通过抓取 HTTP 端点来收集时间序列指标,并生成与该数据进行交互的系统,从而提供深度查询,可视化,存储和其他功能。
  • Istio:Istio 是一种开源服务网格,基于 Envoy 构建,将其开放给插件和可扩展性选项。

4、总结

DevOps的过程依赖于自动设置,配置和部署,以确保更快地交付更新所有这些使自动化测试成为CI / CD的关键部分,因为在部署之前需要对每个代码提交进行正确的测试。测试自动化有助于在错误仍然很小的情况下以更快的速度查找和修复错误。它可以在几天甚至几小时内响应客户需求的同时降低风险。

自动化测试的优势在DevOps中提供了令人难以置信的高效率。但是,测试的一般实践仍未赶上现代技术的步伐。凯捷(Capgemini)的一项研究表明,大中型企业没有完全使用自动化。这项研究是通过采访500位高级IT主管进行的。该研究还显示,只有24%的测试用例是通过自动测试执行的。

测试自动化对于DevOps确保及时交付高质量交付物至关重要。但是,它永远无法完全消除对手动测试方法的依赖。正确的策略应该是在自动和手动测试之间取得最佳平衡,以得出最佳结果。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/17547.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习随记(5)—决策树

手搓决策树:用决策树将其应用于分类蘑菇是可食用还是有毒的任务 温馨提示:下面为不完全代码,只是每个步骤代码的实现,需要完整跑通代码的同学不建议花时间看;适合了解决策树各个流程及代码实现的同学复习使用。 1 数据…

【Redis7】Redis7 持久化(重点:RDB与AOF重写机制)

【大家好,我是爱干饭的猿,本文重点介绍Redis7 持久化(重点:RDB与AOF重写机制)。 后续会继续分享Redis7和其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 …

每天看一个fortran文件(7)之寻找cesm边界层高度计算代码

自从我把我的代码移到了单独的F90 中,从tphysac.F90中调用后。我发现有很多的变量我没办法调用了,特别是边界层中原先已经算好的变量,比如说我想调用原来模式中的pblh,但是那是在vertical diffusion.F90中计算的,在tphysac中根本调…

[python] 协程学习从0到1,配合案例,彻底理解协程,耗费资源不增加,效果接近多线程

文章目录 前言1.python 生成器1.1 python 生成器概述1.2 关键字yield/yield from1.3 next/send函数1.4 StopInteration异常1.5 利用生成器实现生产者-消费者模型1.6 生成器和协程的关系 2.生成器协程调度器3.python事件驱动编程4.实现协程调度器5.python 协程生态 前言 多进程…

ShardingCore安装笔记

由于本人采用Visual Studio的nuget管理器安装ShardingCore经常出现网络错误的问题,所以采用离线包的方式安装插件。 nueget包下载地址:NuGet Gallery | ShardingCore 7.7.1.8 ShardingCore使用版本7.7.1.7 1、下载各种依赖文件,并存放到系…

JAVA11新特性

JAVA11新特性 概述 2018年9月26日,Oracle官方发布JAVA11.这是JAVA大版本周期变化后的第一个长期支持版本,非常值得关注.最新发布的JAVA11将带来ZGC HttpClient等重要特性,一共17个需要我们关注的JEP,参考文档http://openjdk.java.net/projects/jdk/11/ 181:基于嵌套的访问控制…

HashMap 底层原理///HashMap详解

HashMap超详细探讨 总述从集合出发探讨HashMapCollection接口继承树Map接口继承树 从Map接口来,一步一步深入其中Map接口概述Map接口:常用方法Map接口 Map实现类之一:HashMapHashMap的存储结构HashMap源码中的重要常量JDK 1.8之前JDK 1.8总结…

《花雕学AI》28:革命性的 ChatGPT for SEO——让您的排名飙升 50%!

引言: 如果您想写篇有吸引力的文章,或者您是一个博客和网站的拥有者,那么您一定知道 SEO(搜索引擎优化)的重要性。SEO 可以帮助您提高相应的流量、转化率和收入,但是 SEO 也是一个复杂和耗时的过程&#x…

S3C6410 中的 cascaded irqdomain 之 gpio

文章目录 VIC 中断 与 gpio 中断 的硬件拓扑图描述linux cascaded irq domainirq domain 初始化时获取 IRQ number(软件中断号) 时中断发生时如何调试linux irq domain 实例 VIC domain 与 gpio domain 的硬件拓扑语言描述VIC 与 INT_EINTx 的关系INT_EINTx 与 GPIO的关系INT_E…

数电中需要注意的问题

逻辑函数表达式之间的相互转换 (更多请详见PPT)若题目要求用: 与非门实现逻辑函数,则画卡诺图圈出值为1的然后化简 或非门实现逻辑函数,则画卡诺图圈出值为0的然后化简 与或非门实现逻辑函数,则画卡诺图圈…

c++ 构造函数与析构函数

c构造函数: (1)构造函数名必须与类名相同 (2)无返回值 (3)访问权限符一般设置为public (4)无自定义构造函数,编译器提供默认构造函数,构造函数只调用一次 c析构函数: (1)析构函数与类名相同,前面加~符号 (2)析构…

纯比例控制为什么会存在稳态误差,用纯增益系统举例

warning: 本文仅为个人思考,非常不严谨甚至可能会出现严重错误,请读者仔细甄别,若本文真的存在严重错误,恳请评论区纠正,我看到将会考虑修改或者删除文章 纯比例控制存在稳态误差是由其本质(控制逻辑&#…

精炼计算机网络——物理层(一)

文章目录 前言2.1物理层的基本概念2.2 数据通信的基础知识2.2.1 数据通信系统的模型2.2.3 信道的极限容量 2.3 物理层下面的传输媒体2.3.1 导引型传输媒体2.3.2 非导引型传输媒体 总结 前言 经历了两篇文章的学习,相信读者们一定对计算机网络有了一个基础的了解。接…

一个新的ubuntu

1 安装cmake 方法一:现成的教程 ubuntu安装cmake_yuanzhoulvpi的博客-CSDN博客 方法二:自己总结的 安装openssl系统:sudo apt-get install libssl-dev 安装:sudo apt-get install build-essential 以上是防止安装cmake时缺少文…

PS磨皮插件portraiture最新版磨皮工具

Portraiture是一款智能磨皮插件,为Photoshop和Lightroom添加一键磨皮美化功能,快速对照片中皮肤、头发、眉毛等部位进行美化,无需手动调整,大大提高P图效率。全新4版本,升级AI算法,并独家支持多人及全身模式…

I2C工作流程

FM33A0XX的I2C接口只用作主机,且不支持多主机,因此挂在总线上的其他设备都是从机。总线上总是由主机提供同步时钟SCL,SDA数据流方向可以是主机发送从机接收,或者从机发送主机接收。 数据发送流程 1、主机发起 START 时序 2、主机…

C++之基础总结

目录 POD类型左值和右值静态全局变量(static)类型转换const/constexprconstconstexpr C中的关键字union基础知识点编译与函数参数入栈总结一些常见用法归纳: POD类型 平凡的和标准布局的——貌似和深度探索C对象模型中关于按位拷贝冲突 平凡的定义:符合…

Camtasia2023最好用的电脑屏幕录制软件

Camtasia2023是市场上最好的录像机和屏幕录制软件之一。强大的软件视频编辑程序的Camtasia 适用于Windows和iOS。 它支持多种流行的媒体格式,并对您创建的视频提供令人印象深刻的控制范围。3000多万专业人士在全球范围内使用Camtasia展示产品,教授课程&a…

文字的显示

文字的显示 文章目录 文字的显示1.文字编码方式2.英文和汉字的点阵显示3.显示中文“中”和“A”show_font.c结果 1.文字编码方式 数字>代表什么->显示为什么 GBK国标拓展 下列代码用不同编码方式保存utf-8.c ansi.c #include <stdio.h>int main(int argc ,char *…

网络编程之 Socket 套接字(使用数据报套接字和流套接字分别实现一个小程序(附源码))

文章目录 1. 什么是网络编程2. 网络编程中的基本概念1&#xff09;发送端和接收端2&#xff09;请求和响应3&#xff09;客户端和服务端4&#xff09;常见的客户端服务端模型 3. Socket 套接字1&#xff09;Socket 的分类2&#xff09;Java 数据报套接字通信模型3&#xff09;J…