devops 微服务拆分(devops和运维的关系)
devops 微服务拆分(devops和运维的关系),本文通过数据整理汇集了devops 微服务拆分(devops和运维的关系)相关信息,下面一起看看。
一、当前软件发展趋势。在开头,我们将简要介绍近年来企业发展中的一些重要概念,从而介绍持续测试的主要思想。两个最重要的概念是DevOps和微服务。两者都是当前软件开发中的最佳实践和方法论,旨在为企业提供更高的灵活性,提高运营效率。
1.1 DevOps
DevOps是一套实用的方法论和文化,主张打破原有的组织和限制。职能团队开始拥抱和接受DevOps倡导的高度协作思维,整合R&D、测试、运维、交付。随着DevOps和敏捷的日益普及,无论是互联网公司还是传统软件公司都开始拥抱敏捷,实践DevOps。CI(持续集成)和CD(持续交付)作为DevOps的最佳实践,越来越受到重视。
1.2微服务架构微服务架构源于DevOps的思想和实践,是一种软件架构风格。服务架构带来了一系列的好处,比如可部署性、可靠性、可用性等等。虽然原则上任何架构都可以用来实践DevOps,但是微服务架构正在成为构建连续部署(CD)系统的标准架构风格。因为每个服务的规模都很小,所以它允许通过不断的重构来实现单个服务的架构,从而减少大型项目早期设计的需要,并允许软件尽早发布并持续交付。微服务和DevOps是天然的共同体,两者结合实现了软件开发行业的转型。
二。自动化测试测试自动化随着敏捷和微服务架构的引入,CI/CD已经成为构建和部署的标准,即使在没有微服务架构的项目中也是如此。为了确保已定义的流程和事务按预期工作,测试是必不可少的。然而,为了应对现代软件产品的频繁变更和发布,传统的手工测试方法在人员和效率上都存在严重不足,因此自动化测试已经成为现代软件研发过程中的关键组成部分。自动化测试是持续集成和持续交付的核心。没有有效的自动化测试保证,持续集成和持续交付只是一个没有灵魂的外壳。
2.1测试分类测试可以根据不同维度进行分类。
根据测试方法是否为人工测试,可分为自动测试和人工测试;根据测试的目的,可以分为功能测试、性能测试和负载测试。在本文中,马丁福勒被用来根据层次分类对测试进行分类。
Martin Fowler描述了测试金字塔分为三个层次:单元、服务和UI。虽然每个人对此的具体描述不同(有人将三层分别定义为单元、接口和集成测试;也有人把整个金字塔分为4-5级),但金字塔自下而上的结构是大家认可并遵循的。
1)单元测试
单元测试是对代码单元(通常是类/方法)的测试。单元测试的价值在于可以提供最快的反馈,逻辑单元可以在开发过程中得到验证。好的单元测试有助于改进现有的设计。在团队能够掌握TDD的前提下,单元测试可以辅助重构,有助于提高代码的整洁度。
2)接口(服务/API)测试
接口测试是对业务接口的测试,主要测试内部接口功能是否完整。比如内部逻辑是否正常,异常处理是否正确。接口测试的主要价值在于接口定义相对稳定,不像接口或者底层代码会频繁变化,所以接口测试更容易编写,用例的维护成本也相对较低。做好接口层面的测试准备是比较划算的。
3)集成(UI)测试
集成测试从用户的角度验证产品功能的正确性,测量端到端的流程,添加用户场景和数据,验证整个流程是否健康流畅。集成的商业价值是最高的,它验证了一个完整的过程。然而,因为需要验证整个流程,所以环境部署、用例准备和实施的成本很高
2.2微服务架构给测试带来的挑战。微服务架构在解决了应用规模和应用开发规模的问题之后,也带来了一些新的问题,比如微服务的数量越来越多,服务之间的调用关系复杂等等。复杂的依赖导致即使是资深项目开发人员也无法一下子理清所有的关系。
与传统的单一应用相比,微服务在测试策略上有所不同。简单来说,在微服务架构中,测试的层次更多,需要测试的服务和应用也更多。手动执行所有测试效率低下,跟不上互联网快速迭代的要求。这时候就需要引入自动化测试来减轻测试团队的压力,提高测试效率和质量。
2.3自动化测试说到自动化测试,功能测试人员可能会认为它高端复杂。
我们先来看看一般的功能测试是如何进行的:设计并编写一个用例文档,描述测试步骤和预期结果;测试人员根据测试用例的描述一步步操作,然后判断实际结果是否与预期一致。如果是,则测试通过;否则,测试失败。
自动化测试应该做的和功能测试是一致的。分层理论与自动化测试方法相结合,产生了三个层次的自动化:单元测试自动化、界面测试自动化和UI测试自动化。当然,不同层次的自动化关注点是不同的。所以从测试行为的本质上来说,功能测试和单元自动化测试、界面自动化测试、UI自动化测试没有区别。唯一的区别就是一个是人执行的,一个是代码或者工具执行的。
2.4自动化测试分层1)单元自动化测试
单元测试自动化是指检查和验证软件中最小的可测试单元,调用被测服务的类或方法,根据类或方法的参数输入相应的数据,得到返回的结果,最后断言返回的结果是否符合预期。如果它们相等,测试通过;否则,测试失败。
因此,单元测试侧重于代码的实现和逻辑。单元测试是最基本的测试,也是一个测试中最小的单元。它的对象是一个函数对象,也可以包含输入和输出。它针对的是函数功能或函数内部的代码逻辑,但不包含业务逻辑。
一般这类测试都是由R&D人员完成,需要借助unittest框架,比如java中的Junit和TestNG,python中的UnitTest。
2)接口的自动测试
自动接口测试,主要验证模块之间的调用返回,不同系统和服务之间的数据交换。接口自动化通常在业务逻辑级别进行测试。根据接口文档是RESTful还是RPC?调用被测试的接口,构造相应的请求数据,得到返回值,是成功还是失败。不管输入的参数是什么,我们都会得到一个结果,最后断言返回的结果是否等于预期的结果。如果它们相等,测试通过;否则,测试失败。
所以接口测试重在数据。只要数据正确,大部分功能都会做出来,剩下的无非就是如何在页面上显示数据。
常见的接口测试工具有postman、jmeter、loadrunner等。
3)集成(UI)自动化测试
UI层是用户使用产品的入口,所有功能都是通过这一层提供给用户的。目前大部分测试工作都集中在这一层,更接近用户的行为,模拟用户点击一个按钮,在输入框中输入一些指令。有时候用户可能看到登录成功了,但是UI自动化并不知道它刚刚做的点击是否有效。所以找“证据”。比如成功登录后页面右上角会显示“欢迎光临,xxx”,这是登录成功的有力“证据”。当UI自动登录成功时,获取此数据进行断言,如果断言相等,则测试通过;否则,测试失败。
所以UI自动化的重点是用户操作,UI上的各种组件是否可用。常见的测试工具有UFT、机器人框架、Selenium、Appium等。
4)分层比例的最佳实践
每一种自动化测试都有自己的侧重点和优缺点,在实际工作中不可能达到一个平均分。所以我们需要制定一个合理的测试策略来组织和分配,包括测试的每个部分投入多少,测试用例的比例。
测试金字塔中还有另外一个维度的信息,如上图所示。
向上,更接近QA、业务/终端用户,向下,更接近开发;越高,测试执行越慢,越低,测试执行越快。走的越高,测试成本越高(越耗时,失败时信息越模糊,越难追踪),走的越低,测试成本越低。根据测试金字塔模型和投入产出比,我们知道回报率越低,回报率越高。所以要用大量的单元测试和全面的接口测试来覆盖产品提供的基本逻辑和功能,用少量的集成(UI)测试来验证前端接口的功能。
据说Google是业界最好的实践,Google在自动化分层上的投入是:单元测试(Unit):占70%;服务:占20%;集成(UI): 10%。
三。自动化测试的最佳实践对于公司现阶段的大部分团队来说,纺锤体模型更符合实际的测试模式。在新项目中,因为时间限制或者开发人员的习惯,单元测试一开始没有做好准备。一些遗留项目可能没有很多单元测试。
在上面的例子中,通常的做法是首先关注中间层的测试,原因有两个:
第一,中间层的投入产出比较高,可以达到很高的自动化率;其次,它有助于加强开发人员和测试人员之间的协作,提高测试质量。这一层需要开发人员和测试人员共同定义,因为开发人员知道内部实现的细节,测试人员知道业务场景。
3.1纺锤型向金字塔型过渡当项目进行一段时间后,各层的试验比例有必要过渡到理想的金字塔型。这时,应注意以下三个方面:
培养与测试沟通的能力;关注所有员工的产品设计和代码质量;让用例逐渐下沉,最后逐渐过渡到理想类型。
3.2测试质量评价关于测量,不要用单一指标来评价测试和产品质量。比如用例的通过率,代码覆盖率等。不能独立评价产品质量。
在评估测试质量时,我们应注意以下几个方面:
首先是用例的比例,也就是每一层用例的比例是多少。第二是测试覆盖率。三是测试总运行时间,因为优化后总运行时间肯定越来越少。第四是代码质量指数,反映代码的质量和干净程度。四。自动化测试面临的挑战引入自动化测试可以给团队带来很多好处。当然,自动化测试也有自己的缺点和挑战。最大的挑战是变更,因为变更会导致测试用例的失败,所以需要不断调试自动化脚本。如何控制成本,降低成本,是对自动化测试工具和人员能力的挑战。
另一个值得注意的是,自动化测试并不能完全取代人工测试,一些人工探索性测试也是必不可少的。我们一直在不懈的努力和探索。本文是自动化测试最佳实践系列文章的第一篇,主要关注自动化测试的现状和金字塔模型。后续系列文章将继续介绍我们的自动化测试实践,包括自动化测试平台的核心功能、持续测试的方法和工具等。
更多devops 微服务拆分(devops和运维的关系)相关信息请关注本站,本文仅仅做为展示!