DevOps工具不仅适用于DevOps。从头开始构建测试自动化基础架构的过程

第1部分:Web / Android


注意本文是原始文章“ DevOps工具不仅适用于DevOps的译文”的俄语翻译  。从头开始构建测试自动化基础架构。”但是,所有插图,链接,引号和术语均以原始语言存储,以避免翻译成俄文时造成含义失真。祝您学习愉快!



当前,DevOps专业是IT行业最受欢迎的专业之一。如果打开热门的求职网站并设置薪资过滤器,您将看到与DevOps相关的职位在列表顶部。但是,重要的是要了解这主要是指“高级”的职位,这意味着候选人具有较高的技能,技术知识和工具知识。它也伴随着与生产平稳运行相关的高度责任感。但是,我们开始忘记什么是DevOps。最初,它不是特定的人或部门。如果我们寻找该术语的定义,将会发现许多美丽而正确的名词,例如方法论,实践,文化哲学,一组概念等等。

我的专长是QA自动化工程师,但我认为它不仅应与编写自动测试或为测试框架开发体系结构有关。 2020年,还需要了解自动化基础设施。这使您可以根据目标,自己组织自动化过程,从启动测试到向所有相关方提供结果。因此,DevOps技能是这项工作的必备条件。所有这一切都很好,但是不幸的是,存在一个问题(破坏者:本文试图简化这个问题这是因为DevOps很复杂。这是显而易见的,因为公司不会为易做的事情付出太多……在DevOps的世界中,有许多工具,术语和实践需要掌握。在职业初期,这尤其困难,并且取决于积累的技术经验。


来源:http : //maximelanciauxbi.blogspot.com/2017/04/devops-tools.html

在这里,我们可能会完成介绍部分,并专注于本文的目的。 

这篇文章是关于什么的


在本文中,我将分享我在构建测试自动化基础结构方面的经验。在Internet上,您可以找到有关各种工具以及如何使用它们的许多信息源,但是我想在自动化的背景下专门考虑它们。我相信,许多自动化工程师都熟悉这样的情况:除了您自己之外,没有人运行已开发的测试,并且不在乎他们的支持。结果,测试变得过时,您必须花费时间来更新它们。同样,在职业开始时,这可能是一项艰巨的任务:正确地决定哪些工具应有助于解决该问题,如何选择,配置和维护它们。一些测试人员向DevOps(人员)寻求帮助,老实说,这种方法行之有效。在许多情况下,这可能是唯一的选择,因为我们没有所有依赖项的可见性。但是,正如我们所知,DevOps非常忙,因为他们应该根据组织/团队考虑整个公司的基础架构,部署,监控,微服务和其他类似任务。通常,自动化不是优先事项。在这种情况下,我们应该从头到尾尽力而为。这将减少成瘾,加快工作流程,提高我们的技能,并使我们能够更广泛地了解正在发生的事情。微服务和其他类似任务,具体取决于组织/团队。通常,自动化不是优先事项。在这种情况下,我们应该从头到尾尽力而为。这将减少成瘾,加快工作流程,提高我们的技能,并使我们能够更广泛地了解正在发生的事情。微服务和其他类似任务,具体取决于组织/团队。通常,自动化不是优先事项。在这种情况下,我们应该从头到尾尽力而为。这将减少成瘾,加快工作流程,提高我们的技能,并使我们能够更广泛地了解正在发生的事情。

本文介绍了最受欢迎和最受欢迎的工具,并展示了如何将其用于自动化基础结构的逐步构建。每个小组都由经过个人经验测试的工具代表。但这并不意味着您应该使用相同的名称。工具本身并不重要,它们会出现并变得过时。我们的工程任务是理解基本原理:为什么我们需要这组工具,以及在他们的帮助下可以解决哪些工作任务。因此,在每个部分的末尾,我都会留下指向您的组织中可能使用的类似工具的链接。

本文中没有的内容


再次,本文不是关于特定工具的,因此文档和特定命令的描述中不会插入任何代码。但是,在每个部分的末尾,我都会留下链接进行详细研究。

这是由于以下事实: 

  • 可以从各种来源(文档,书籍,视频课程)中轻松找到该材料;
  • 如果我们开始更深入地研究,我们将不得不写这篇文章的10、20、30部分(而计划2-3);
  • 我只是不想浪费您的时间,因为也许您想使用其他工具来实现相同的目标。

实践


我真的希望这种材料对每个读者有用,而不仅仅是被阅读和遗忘。在任何研究中,实践都是非常重要的组成部分。为此,我准备了一个GitHub存储库,其中包含有关如何从头开始做所有事情的逐步指南您还将等待作业,以确保您没有漫不经心地复制了已执行命令的行

计划


技术工具类
1个本地运行(准备Web / Android演示测试并在本地运行) Node.js,Selenium,Appium
2版本控制系统 吉特
3货柜化Docker,Selenium网格,Selenoid(Web,Android)
4CI / CD吉它实验室
5云平台谷歌云平台
6编排Kubernetes
7基础架构即代码(IaC)地形,Ansible

每个部分的结构


为了使叙述保持视觉效果,每个部分的描述如下:

  • ,
  • ,
  • ,
  • ,
  • .

1.



这只是准备在本地运行演示测试并验证它们是否成功通过的准备步骤。在实际部分中,使用了Node.js,但是编程语言和平台也不重要,您可以使用公司中使用的语言和平台。 

但是,我建议分别将Selenium WebDriver(用于Web平台)和Appium(用于Android平台)用作自动化工具,因为在接下来的步骤中,我们将使用专门设计用于这些工具的Docker映像。此外,参考职位空缺的要求,这些工具是市场上最需要的。

您可能已经注意到,我们仅考虑网络和Android测试。不幸的是,iOS是一个完全不同的故事(感谢Apple)。我计划在以下部分中演示与iOS相关的解决方案和实践。

自动化基础架构的价值


从基础架构的角度来看,本地启动是不值得的。您只能在本地浏览器和模拟器中验证测试是否在本地计算机上运行。但是无论如何,这是必要的起点。

基础设施当前状态的图示




学习链接



类似工具


  • 您希望与Selenium / Appium结合使用的任何编程语言-测试;
  • 任何测试;
  • 任何测试跑步者。

2.版本控制系统(Git)


技术简介


如果我说版本控制系统无论对于团队还是个人而言,都是开发中极为重要的部分,对于任何人来说都不是一个重大发现。基于各种来源,我们可以自信地说Git是最受欢迎的代表。版本控制系统具有许多优点,例如代码交换,版本存储,还原到以前的分支,监视项目历史记录,备份。我们不会详细讨论每个项目,因为我相信您已经熟悉并在日常工作中使用它。但是,如果突然之间没有,那么我建议暂停阅读本文,并尽快填补这一空白。

自动化基础架构的价值


在这里您可以提出一个合理的问题:“他为什么向我们介绍Git?每个人都知道并将其用于开发代码和自动测试代码。” 您绝对是正确的,但是在本文中,我们讨论的是基础架构,本节充当第7节“基础结构即代码(IaC)”的预览。对我们来说,这意味着整个基础设施(包括测试基础设施)都以代码形式描述,因此我们也可以对其应用版本控制系统,并为开发和自动化代码获得类似的优势。

我们将在步骤7中更详细地介绍IaC,但是即使现在您也可以通过创建本地存储库来开始在本地使用Git。当我们将远程存储库添加到基础结构中时,总体情况将会扩大。

基础设施当前状态的图示




学习链接



类似工具



3.容器化(Docker)


技术简介


为了演示容器化如何改变游戏规则,让我们回顾几十年前。在那些日子里,人们购买并使用服务器计算机来运行应用程序。但是在大多数情况下,启动所需的必需资源并不事先知道。结果,公司花了钱购买昂贵的功能强大的服务器,但是其中一些功能并未得到充分利用。

下一步发展是虚拟机(VM),它解决了在未使用的资源上花钱的问题。这项技术使在同一服务器内彼此独立运行应用程序成为可能,从而分配了完全隔离的空间。但是,不幸的是,任何技术都有其缺点。启动虚拟机需要使用CPU,RAM,存储的完整操作系统,并且取决于操作系统,您需要考虑许可证的成本。这些因素影响下载速度并使可移植性复杂化。

因此,我们来到了集装箱化领域。再次,这项技术解决了以前的问题,因为容器不使用完整的OS,这使您可以释放大量资源,并为可移植性提供了快速灵活的解决方案。

当然,容器化技术并不是新技术,而是在70年代后期首次引入的。在那些日子里,有大量的研究,基础工作和尝试。但是,正是Docker改变了这项技术,并使其易于大众使用。如今,当我们谈论容器时,在大多数情况下,我们指的是Docker。当我们谈论Docker容器时,我们指的是Linux容器。我们可以使用Windows和macOS系统来运行容器,但重要的是要了解在这种情况下会出现一个附加层。例如,Mac上的Docker会在轻量级Linux VM内静默启动容器。当我们讨论在容器内启动Android仿真器时,我们将回到该主题,这是一个非常重要的细微差别出现的地方,需要对其进行更详细的分析。

自动化基础架构的价值


我们发现容器化和Docker很酷。让我们在自动化的上下文中来看一下,因为每种工具或技术都应该解决问题。让我们指出在UI测试中测试自动化的明显问题:

  • 安装Selenium尤其是Appium时存在大量依赖关系;
  • 浏览器,模拟器和驱动程序的版本之间的兼容性问题;
  • 缺乏用于浏览器/模拟器的隔离空间,这对于并行启动尤为重要;
  • 如果您需要同时运行10、50、100甚至1000个浏览器,则很难管理和维护。

但是,由于Selenium是最流行的自动化工具,而Docker是最流行的容器化工具,因此有人尝试将它们组合起来以获得解决上述问题的强大工具,对于任何人来说都不应该感到惊讶。让我们更详细地考虑这样的解决方案。 

泊坞窗中的硒网格

该工具是Selenium领域中最流行的工具,用于从一个中央站点启动和管理多台计算机上的多个浏览器。首先,您必须注册至少两个部分:集线器和节点。集线器是一个中央站点,它接收来自测试的所有请求并将它们分发到适当的节点。对于每个节点,我们可以配置特定的配置,例如,指定所需的浏览器及其版本。但是,我们仍然需要自己照顾兼容的浏览器驱动程序,并将其安装在必要的节点上。因此,Selenium网格不会以其纯粹的形式使用,除非我们需要使用无法在Linux OS上安装的浏览器。对于所有其他情况,使用Docker映像运行Selenium网格集线器和节点是一种非常灵活且正确的解决方案。这种方法极大地简化了节点的管理,因为我们可以使用已经安装的兼容版本的浏览器和驱动程序来选择所需的映像。

尽管对稳定性存在负面反馈,尤其是在并行运行大量节点时,Selenium网格仍然是并行运行Selenium测试的最受欢迎的工具。重要的是要注意,在开源中,此工具的各种改进和修改不断出现,并遇到各种瓶颈。

卷筒纸

该工具是Selenium世界中的一项突破,因为它开箱即用,并且使许多自动化工程师的工作变得更加轻松。首先,这不是硒网格的另一种修改。相反,开发人员使用Golang语言创建了一个全新版本的Selenium Hub,该版本与适用于各种浏览器的轻量级Docker映像相结合,为测试自动化的发展提供了动力。此外,对于Selenium Grid,我们必须事先确定所有必需的浏览器及其版本,这在仅使用一个浏览器时不是问题。但是当涉及到几种受支持的浏览器时,由于“按需浏览器”功能,Selenoid是第一解决方案。我们所要做的就是用浏览器预加载必要的图像并更新配置文件,与硒素相互作用。当Selenoid收到测试的请求后,它将使用正确的浏览器自动启动正确的容器。测试完成后,Selenoid将删除容器,从而为以下查询释放资源。这种方法完全消除了我们经常在硒网格中看到的众所周知的“节点退化”问题。

但是可惜的是,Selenoid仍然不是灵丹妙药。我们具有按需浏览器功能,但是按需资源功能仍然不可用。要使用Selenoid,我们需要将其部署在物理硬件或VM上,这意味着我们需要提前知道需要分配多少资源。我相信这对于并行运行10、20甚至30个浏览器的小型项目来说不是问题。但是,如果我们需要100、500、1000甚至更多呢?一直保持和支付如此多的资源是没有意义的。在本文的第5和第6部分中,我们将讨论使您可以扩展的解决方案,从而显着降低公司成本。

适用于Android的Selenoid

在Selenoid作为Web自动化工具获得成功之后,人们希望为Android获得类似的东西。事情发生了-Selenoid在Android支持下发布。从高级用户的角度来看,操作原理类似于Web自动化。唯一的区别是Selenoid会使用Android模拟器启动容器,而不是使用浏览器容器。我认为,今天,它是用于并行运行Android测试的最强大的免费工具。

我真的不想谈论这个工具的负面影响,因为我非常喜欢它。但是与缩放相关的Web自动化仍然存在相同的缺点。除此之外,我们还需要讨论另一个限制,如果我们第一次调整仪器,可能会感到惊讶。要运行Android映像,我们需要一台具有嵌套虚拟化支持的物理机或VM。在实用指南中,我演示了如何在Linux VM上激活它。但是,如果您是macOS用户,并且想在本地部署Selenoid,则将无法运行Android测试。但是您始终可以使用配置好的“嵌套虚拟化”在本地启动Linux VM,并在内部部署Selenoid。

基础设施当前状态的图示


在本文的上下文中,我们将添加2个工具来说明基础结构。这些是用于Web测试的Selenium网格和用于Android测试的Selenoid。在GitHub手册中,我还将展示如何使用Selenoid运行网络测试。 



学习链接



类似工具


  • 存在其他容器化工具,但是Docker是最受欢迎的工具。如果您想尝试其他方法,请记住,我们审查用于并行运行Selenium测试的工具将无法立即使用。  
  • 如前所述,硒网格有很多修改,例如Zalenium

4. CI / CD


技术简介


持续集成的实践在开发中非常流行,并且与版本控制系统相当。尽管如此,我仍感到术语混乱。在本节中,我想从我的角度描述对该技术的3种修改。在互联网上,您可以找到许多具有不同解释的文章,如果您的意见不同,那是绝对正常的。最重要的是,您与同事处于同一波长。

因此,有3个术语:CI-持续集成(CD),CD-持续交付(CD)和CD-持续部署(CD)。 (此外,我将用英语使用这些术语每次修改都会为您的开发流程增加一些额外的步骤。但是连续这个词是最重要的。在本文中,我们指的是从头到尾发生的事情,没有中断或手动曝光。让我们来看看在这种情况下的CI&CD和CD。

  • 持续集成是发展的第一步。在将新代码发送到服务器之后,我们希望能够快速获得反馈,表明所做的更改一切正常。通常,CI包括启动静态代码分析工具和单元/内部API测试,这使您可以在几秒钟/分钟后获得有关我们代码的信息。
  • Continuous Delivery , /UI-. , CI. -, . -, test/staging — . , , .
  • Continuous Deployment , (release) production, . release , smoke — production . Continuous Deployment . - , , Continuous (). , Continuous Delivery.


在本部分中,我必须澄清,当我们谈论端到端UI测试时,这意味着我们必须将更改和相关服务部署到测试环境。持续集成-该流程不适用于此任务,我们必须小心执行至少持续交付实践。如果我们要在生产环境中运行它们,则在UI测试的上下文中,持续部署也很有意义。

在我们看一下架构变化的图示之前,我想先介绍一下GitLab CI。与其他CI / CD工具不同,GitLab提供了一个远程存储库和许多其他高级功能。因此,GitLab不只是CI。它包括开箱即用的源代码控制,敏捷管理,CI / CD管道,日志记录工具和指标收集。GitLab体系结构由Gitlab CI / CD和GitLab Runner组成。我从官方网站进行了简短描述:
Gitlab CI / CD是具有API的Web应用程序,该API将其状态存储在数据库中,管理项目/构建并提供用户界面。GitLab Runner是一个处理构建的应用程序。它可以单独部署,并通过API与GitLab CI / CD一起使用。为了运行测试,您需要Gitlab实例和Runner。








5.



在本节中,我们将讨论称为“公共云”的流行趋势。尽管上述虚拟化和容器化技术提供了巨大的好处,但我们仍然需要计算资源。公司购买了昂贵的服务器或租用了数据中心,但在这种情况下,有必要对我们将需要多少资源,是否将其全天候使用24/7以及用于什么目的进行计算(有时是不现实的)。例如,生产需要服务器全天候运行,但是下班后我们是否需要类似的资源进行测试?它还取决于要执行的测试类型。压力/压力测试就是一个例子,我们计划在几个小时后运行以获取第二天的结果。但绝对端到端自动测试,尤其是手动测试环境,不需要24小时服务器可用性。在这种情况下,最好按需接收所需的资源,使用它们并在不再需要时停止付款。此外,通过单击几下鼠标或运行几个脚本可以立即接收它们。为此,使用了公共云。让我们看一下定义:为此,使用了公共云。让我们看一下定义:为此,使用了公共云。让我们看一下定义:
“公共云定义为第三方提供商通过公共Internet提供的计算服务,从而使任何想要使用或购买它们的人都可以使用它们。“它们可能是免费的,也可以按需出售,从而使客户仅需为使用的CPU周期,存储空间或带宽付费即可。”

有一种观点认为,公共云很昂贵。但是他们的关键思想是降低公司成本。如前所述,公共云使您能够按需获取资源,并仅为使用时间付费。此外,有时我们会忘记员工获得薪水,而专家也是昂贵的资源。请记住,公共云极大地促进了基础架构支持,使工程师可以专注于更重要的任务。 

自动化基础架构的价值


端到端UI测试需要哪些特定资源?这些主要是虚拟机或集群(我们将在下一节中讨论Kubernetes)以启动浏览器和仿真器。我们希望同时运行更多的浏览器和仿真器,需要更多的CPU和内存,并且我们需要为此支付更多的钱。因此,在测试自动化范围内的公共云使我们能够按需启动大量(100、200、1000 ...)浏览器/仿真器,尽可能快地获得测试结果,并停止为如此疯狂的资源密集型功能付费。 

最受欢迎的云提供商是Amazon Web Services(AWS),Microsoft Azure,Google Cloud Platform(GCP)。该实用指南提供了使用GCP的示例,但一般而言,您将用于自动化任务的内容都没有关系。它们全部提供大致相同的功能。通常,选择供应商时,管理层将重点放在公司的整个基础结构和业务需求上,而这超出了本文的范围。对于自动化工程师来说,比较使用专门用于测试目的的云平台(例如Sauce Labs,BrowserStack,BitBar等)的云提供程序的使用将更加有趣。因此,让我们做同样的事情!我认为,Sauce Labs是最著名的云测试场,因此我将其用作比较。 

GCP与Sauce自动化实验室:

想像一下我们需要同时运行8个Web测试和8个Android测试。为此,我们将使用GCP并使用Selenoid运行2个虚拟机。首先,我们将使用浏览器募集8个容器。在第二个-具有模拟器的8个容器。让我们看一下价格:  


要使用Chrome运行一个容器,我们需要一台n1-standard-1机器。在Android的情况下,对于一个仿真器,这将是n1-standard-4实际上,一种更灵活,更便宜的方法是为CPU /内存设置特定的用户值,但目前与Sauce Labs进行比较并不重要。

以下是使用酱汁实验室的费用:


我想您已经注意到了差异,但是我仍然会提供一张表格,其中包含我们任务的计算结果:

所需资源蒙特利工作时间(上午8点至晚上8点)工作时间+可抢占
Web的Gcpn1-standard-1 x 8 = n1-standard-8$ 194.1823天* 12小时* 0.38 = 104.88 $ 23天* 12小时* 0.08 = 22.08 $
网络调味酱实验室虚拟Cloud8并行测试$ 1.559----
Android版GCPn1-standard-4 x 8:n1-standard-16$ 776.7223天* 12小时* 1.52 = $ 419.52 23天* 12小时* 0.32 = 88.32 $
适用于Android的酱汁实验室Real Device Cloud 8并行测试$ 1.999----

如您所见,成本差异巨大,尤其是如果您仅在工作的十二小时内运行测试。但是您可以通过使用抢占式机器来进一步降低成本。它是什么?
A preemptible VM is an instance that you can create and run at a muchower price than normal instances. However, Compute Engine might terminate (preempt) these instances if it requires access to those resources for other tasks. Preemptible instances are excess Compute Engine capacity, so their availability varies with usage.

If your apps are fault-tolerant and can withstand possible instance preemptions, then preemptible instances can reduce your Compute Engine costs significantly. For example, batch processing jobs can run on preemptible instances. If some of those instances terminate during processing, the job slows but does not completely stop. Preemptible instances complete your batch processing tasks without placing additional workload on your existing instances and without requiring you to pay full price for additional normal instances.

而且这还没有结束!实际上,我敢肯定没有人会连续12小时进行测试。如果是这样,那么您可以在不需要虚拟机时自动启动和停止它们。实际使用时间可能会减少到每天6小时。然后在我们的任务范围内付款将减少8个浏览器,每月最多11美元。那不是完美的吗?但是对于抢占式机器,尽管可以通过编程方式提供和处理这些情况,但我们必须小心并做好中断和不稳定操作的准备。这很值得!

但是我绝对不会说“永远不要使用云测试场”。它们有几个优点。首先,这不仅是虚拟机,而且是用于测试自动化的完整解决方案,具有一系列现成的功能:远程访问,日志,屏幕截图,视频记录,各种浏览器和物理移动设备。在许多情况下,这可能是必不可少的别致选择。当公共云只能提供Linux / Windows系统时,特别是IOS自动化测试平台特别有用。但是关于iOS的讨论将在以后的文章中进行。我建议始终从情况出发,从任务开始:在某些情况下使用公有云更便宜,更高效,而在某些测试平台上绝对值得花这笔钱。

基础设施当前状态的图示




学习链接



类似工具:



6.编排


技术简介


我有个好消息-我们快到文章结尾了!目前,我们的自动化基础设施包括Web和Android测试,我们使用支持Docker的工具通过Sitnium grid和Selenoid在GitLab CI上并行运行。此外,我们使用通过GCP创建的虚拟机来提升其中装有浏览器和模拟器的容器。为了降低成本,我们仅按需启动这些虚拟机,并在不执行测试时停止。还有什么可以改善我们的基础设施的吗?答案是肯定的!认识Kubernetes(K8s)!

首先,请考虑业务流程,集群和Kubernetes这两个词如何关联。在较高的层次上,业务流程是一个用于部署和管理应用程序的系统。为了自动化测试,此类容器化应用程序是Selenium grid和Selenoid。 Docker和K8相互补充。第一个用于部署应用程序,第二个用于业务流程。反过来,K8s是一个集群。群集的任务是将VM用作节点,这使您可以在一台服务器(群集)中安装各种功能,程序和服务。如果任何一个节点崩溃,那么其他节点将启动,以确保我们的应用程序平稳运行。除此之外,K8还具有与缩放相关的重要功能,因此,我们会根据负载和已建立的限制自动获得最佳资源量。

实际上,从头开始手动部署Kubernetes是一项完全不容易的任务。我将链接到著名的实用指南Kubernetes The Hard Way,如果您有兴趣,可以练习。但是,幸运的是,还有其他方法和工具。其中最简单的方法是在GCP中使用Google Kubernetes引擎(GKE),单击几下即可获得完整的集群。为了开始研究,我建议您使用这种方法,因为它可以使您专注于学习如何使用K8进行任务,而不是探索如何集成内部组件。 

自动化基础架构的价值


考虑一下K8提供的一些重要功能:

  • : multi-nodes , VMs;
  • : , ;
  • (Self-healing): pods ( );
  • : ,

但是K8仍然不是灵丹妙药。为了了解我们正在考虑使用的工具(硒网格,Selenoid)的所有优点和局限性,我们简要讨论了K8的结构。群集包含两种类型的节点:主节点和工作节点。主节点负责管理,部署和调度决策。工作节点是应用程序运行的地方。节点还包含一个容器启动环境。在我们的案例中,这是Docker,它负责与容器相关的操作。但是还有其他解决方案,例如集装箱运输。重要的是要了解缩放或自我修复并不直接应用于容器。这可以通过增加/减少容器的数量来完成,容器的数量又包含容器(通常每个容器一个容器,但根据任务的不同,容器的数量也可以更多)。高层层次结构是工作程序节点,工作节点在其中是pod,在其中上升了容器。

缩放功能是关键,可以同时应用于群集节点池内的节点和节点内的Pod。缩放有两种类型适用于节点和吊舱。第一种类型-水平-缩放是由于节点/吊舱数量增加而发生的。这种类型是更优选的。第二种类型分别是垂直的。缩放是通过增加节点/ pod的大小而不是其数量来完成的。

现在,在上述术语的范围内考虑我们的工具。

硒栅

如前所述,Selenium网格是一种非常流行的工具,它被容器化也就不足为奇了。因此,硒网格可以部署在K8中并不奇怪。如何执行此操作的示例可以在官方的K8s存储库中找到。和往常一样,我在本节末尾附加了链接。除此之外,该实用指南还介绍了如何在Terraform系列中执行此操作。还有一条有关如何使用浏览器缩放包含容器的容器数量的说明。但是,在K8上下文中,自动缩放功能仍然不是一项显而易见的任务。当我开始研究时,我没有发现任何实用的指导或建议。在DevOps团队的支持下进行了几项研究和实验之后,我们选择了一种方法,该方法是在一个容器中放置所需容器的浏览器,容器位于一个工作节点内。这种方法允许我们通过增加节点数量来应用水平缩放策略。我希望将来情况会改变,我们将看到越来越多的关于最佳方法和交钥匙解决方案的描述,尤其是在发布具有经过修改的内部体系结构的Selenium grid 4之后。特别是在发布具有重新设计的内部架构的Selenium grid 4之后。特别是在发布具有重新设计的内部架构的Selenium grid 4之后。

硒油

目前,在K8s中部署硒油是最大的失望。它们不兼容。从理论上讲,我们可以在吊舱内举起Selenoid容器,但是当Selenoid开始使用浏览器启动容器时,它们仍将位于同一吊舱内。这使得无法进行扩展,因此,群集内的Selenoid的工作不会与虚拟机内部的工作有所不同。故事的结尾。

Moon

开发人员在与Selenoid一起使用时意识到了这一瓶颈,并发布了一个更强大的工具Moon。该工具最初是为与Kubernetes一起使用而设计的,因此,您可以并且应该使用自动缩放功能。而且,我想说,这是目前唯一的Selenium世界中的一个工具,开箱即用,它具有本地K8s集群支持(不再可用,请参阅下一个工具)。Moon提供此支持的关键功能是: 
完全无状态。Selenoid在内存中存储有关当前正在运行的浏览器会话的信息。如果由于某种原因它的进程崩溃了,那么所有正在运行的会话都会丢失。相反,月球没有内部状态,可以跨数据中心复制。即使一个或多个副本出现故障,浏览器会话仍保持活动状态。
因此,Moon是一个很好的解决方案,但是有一个问题,它不是免费的。价格取决于会议次数。免费只能启动0-4个会话,这并不是特别有用。但是,从第五届会议开始,您将需要为每个会议支付5美元。各个公司的情况可能有所不同,但是在我们的情况下,使用Moon是没有意义的。如上所述,我们可以按需使用Selenium Grid启动虚拟机,也可以增加集群中的节点数。对于大约一个管道,我们启动了500个浏览器,并在测试完成后停止所有资源。如果使用Moon,则每个月必须额外支付500 x 5 = 2500美元,而且测试频率如何也无所谓。再说一次,我不会说“不要使用月亮”。对于您的任务,这可能是必不可少的解决方案,例如,如果您的组织中有很多项目/团队,并且每个人都需要一个庞大的公共集群。与往常一样,我在最后留下一个链接,并建议根据您的任务进行所有必要的计算。

Callisto:(请注意!这不是原始文章中的内容,仅包含在俄语翻译中

正如我所说的那样,Selenium是一种非常流行的工具,并且IT行业正在迅速发展。在我进行翻译时,网络上出现了一种新的有前途的Callisto工具(Hypress和其他杀硒剂)。它与K8s一起原生运行,并允许您在由Nodes分发的Pod中运行Selenoid容器。一切都立即可用,包括自动缩放。小说,但有必要进行测试。我已经设法部署了该工具并进行了一些实验。但是现在得出结论还为时过早,在长距离接收结果之后,也许我将在以下文章中进行回顾。到目前为止,我只留下了独立研究的链接。  







7. (IaC)



因此,我们进入了最后一节。通常,这项技术和相关任务不包括在自动化工程师的责任范围内。这是有原因的。首先,在许多组织中,基础架构问题在DevOps部门的控制之下,开发团队并不真正在乎管道的工作原理以及如何支持与之相关的一切。其次,说实话,“基础架构即代码(IaC)”的做法仍未在许多公司中应用。但这无疑已成为一种流行趋势,因此重要的是要参与到相关的流程,方法和工具中。或至少跟上事态发展。

让我们从使用这种方法的动机开始。我们已经讨论过,要在GitlabCI中运行测试,我们至少需要资源来运行Gitlab Runner。要使用浏览器/仿真器运行容器,我们需要保留VM或集群。除了测试资源外,我们还需要大量功能来支持开发环境,登台和生产,其中还包括数据库,自动调度,网络配置,负载平衡器,用户权限等。一个关键问题是支持所有这些所需的努力。我们可以通过多种方式进行更改和推出更新。例如,在GCP的上下文中,我们可以使用浏览器中的UI控制台并通过单击按钮执行所有操作。一种替代方法是使用API​​调用与云实体进行交互,或使用gcloud命令行实用程序执行必要的操作。但是,由于存在大量不同的实体和基础架构元素,手动执行所有操作变得困难甚至无法实现。而且,所有这些手动操作都是不可控制的。我们无法在执行之前将它们发送进行审查,无法使用版本控制系统并快速回滚导致事件的编辑。为了解决这些问题,工程师创建了并且正在创建自动的bash / shell脚本,它比以前的方法好不了多少,因为它们不那么容易以程序方式阅读,理解,维护和修改。

在本文和操作方法中,我将使用2个与IaC实践相关的工具。这些是Terraform和Ansible。一些人认为同时使用它们是没有意义的,因为它们的功能相似并且可以互换。但事实是,最初他们要面对完全不同的任务。代表HashiCorp和RedHat的开发人员在联合演示中证实了这些工具应该相互补充的事实。概念上的区别是Terraform是用于管理服务器本身的配置工具。 Ansible是一种配置管理工具,其任务是在这些服务器上安装,配置和管理软件。

这些工具的另一个主要区别特征是编写代码的样式。与bash和Ansible不同,Terraform使用基于所需最终状态的描述的声明式样式,这必须作为执行结果来实现。例如,如果我们要创建10个VM并通过Terraform应用更改,那么我们将获得10个VM。如果再次应用该脚本,则不会发生任何事情,因为我们已经有10个VM,并且Terraform知道它,因为它将基础结构的当前状态存储在状态文件中。但是Ansible使用一种过程方法,如果您要求他创建10个VM,则在第一次运行时,我们将获得10个VM,类似于Terraform。但是重新启动后,我们将已经有20个虚拟机。这是一个重要的区别。在过程式中,我们不存储当前状态,而只是描述必须完成的步骤顺序。当然,我们可以处理各种情况,对资源的存在和当前状态进行几次检查,但是浪费时间和努力控制这种逻辑没有任何意义。另外,这增加了犯错误的风险。 

总结以上所有内容,我们可以得出结论,对于供应服务器,Terraform和声明性表示法是更合适的工具。但是最好将配置管理工作委托给Ansible。解决了这一问题之后,我们来看一下自动化环境中的使用示例。

自动化基础架构的价值


仅了解将测试自动化基础结构视为公司整个基础结构的一部分很重要。这意味着所有IaC惯例都必须全局应用于整个组织的资源。谁对此负责,取决于您的流程。 DevOps团队在这些问题上更有经验,他们可以看到正在发生的事情的全貌。但是,质量保证工程师会更多地参与楼宇自动化和管道结构的过程,这使他们可以更好地了解所有必需的更改和改进机会。最好的选择是共同努力,共享知识和想法,以达到预期的结果。 

以下是在自动化测试和我们之前讨论的工具的上下文中使用Terraform和Ansible的一些示例:

1.通过Terraform描述VM和群集的必要特征和参数。

2.使用Ansible安装必要的测试工具:docker,Selenoid,Selenium Grid并下载必要版本的浏览器/模拟器。

3.通过Terraform描述将在其中启动GitLab Runner的VM的特性。

4.使用Ansible GitLab Runner和必要的相关工具进行安装,设置设置和配置。

基础设施当前状态的图示



研究链接:



类似工具




总结一下!


技术工具类自动化基础架构的价值
1个Local runningNode.js, Selenium, Appium
  • web mobile
  • ( Node.js)

2Version control systems Git

3ContainerisationDocker, Selenium grid, Selenoid (Web, Android)
  • ,

4CI / CDGitlab CI
  • /

5Cloud platformsGoogle Cloud Platform
  • ( )

6OrchestrationKubernetes/ pods:
  • /

7基础架构即代码(IaC)地形,Ansible
  • 开发基础架构的类似好处
  • 代码版本化的所有好处
  • 易于更改和维护
  • 完全自动化



思维导图:基础设施的发展


步骤1:本地


第二步:vcs


第三步:集装箱化 


步骤4:CI / CD 


步骤5:云平台


第六步:编排


步骤7:IaC


下一步是什么?


这就是本文的结尾。但总而言之,我想与您建立一些协议。

就您而言
正如一开始所说的那样,我希望本文具有实际用途,并帮助您将获得的知识应用到实际工作中。我再次添加了实用指南链接

但是即使在那之后,也不要停下来,练习,研究相关的链接和书籍,了解它在公司中的运作方式,寻找可以改进的地方并参与其中。祝好运

从我这边

从标题可以明显看出,这仅仅是第一部分。尽管事实证明它很大,但此处仍未公开重要主题。在第二部分中,我计划在IOS的背景下研究自动化基础架构。由于Apple限制只能在macOS系统上运行iOS仿真,因此我们缩小了解决方案的范围。例如,我们无法使用Docker来运行模拟器或使用公共云来运行虚拟机。但这并不意味着没有其他选择。我将尽力为您提供高级解决方案和现代工具的最新信息!

另外,我也没有提到与监视有关的很大的主题。在第3部分中,我将考虑用于监视基础结构的最受欢迎的工具,以及要考虑的数据和指标。

最后。将来,我计划发布有关构建测试基础结构和流行工具的视频课程。当前,Internet上有很多关于DevOps的课程和讲座,但是所有材料都是在开发环境中介绍的,而不是测试自动化的。在这个问题上,如果本课程对于测试人员和自动化工程师社区而言是有趣且有价值的,我真的需要反馈。提前致谢!

All Articles