微服务测试怎么做,看看这篇文章就懂了!

开发团队越来越多地选择微服务架构而不是单体结构,以提高应用程序的敏捷性、可扩展性和可维护性。随着决定切换到模块化软件架构——其中每个服务都是一个独立的单元,具有自己的逻辑和数据库,通过 API 与其他单元通信——需要新的测试策略和新的测试工具。

测试微服务是微服务应用程序过程的关键部分:您需要确保您的代码不会在单元内中断,微服务中的依赖项继续工作(并快速工作),并且您的 API 符合定义的协议,然而,由于许多微服务采用持续交付模式构建以一致地构建和部署功能,因此开发人员和 DevOps 团队需要准确可靠的测试策略才能对这些功能充满信心。

那么微服务存在哪些不同类型的测试,它们如何适用于软件的其他领域,它们有什么好处?众所周知的“测试金字塔”可以为接下来这些测试提供一个测试框架。

根据软件工程原理的著名作者 Martin Fowler 的说法,“‘测试金字塔’是一个隐喻,将软件测试分组到不同粒度的桶中。”

1.png

金字塔的不同层次定义为:

  • 单元测试:测试服务的一小部分,例如类。

  • 组件测试:验证单个服务的行为。

  • 集成测试:通过测试服务的适配器来验证服务是否可以与基础设施服务(例如数据库和其他应用程序服务)进行交互。

注意:

某些版本的测试金字塔会切换组件测试和集成测试的顺序。

端到端测试:验证整个应用程序的行为。

结合多种微服务测试策略可以提高测试覆盖率和对软件的信心,同时也使整体维护更易于管理。

单元测试

单元测试旨在确保服务的最小部分在微服务设计阶段确定的规范内按预期执行。由于微服务将应用程序功能分解为数百个可测试的小型功能组件,因此单元测试会单独且独立地处理每个组件。最好在一个类或一组相关类的级别上进行单元测试。

单元测试可以通过使用测试替身(例如 fakes、stubs、mocks、dummies 和 spies)来切断组件的依赖关系。例如,测试人员可以模拟您的依赖项的响应并“假设他们执行 [X]”,其中 [X] 是正确响应、失败响应等。

组件测试

组件测试验证给定服务是否正常运行。由于范围仅限于整个微服务架构的一部分,组件测试通过隔离系统内的服务来检查所选微服务(可以由几个类组成)的端到端功能,将其依赖项替换为测试双打和/或模拟服务。

您可以为将被划分为测试用例的每个组件创建测试环境。它可能涉及测试资源行为,例如性能测试、确定内存泄漏、结构测试等。

集成测试

集成测试验证独立开发的组件/微服务在连接时是否正常工作。它测试组件之间的通信路径和交互并发现错误。

集成测试的编写和运行变得更加困难和耗时。因此,拥有出色的生产 QA(质量保证)实践将有助于确保顺利进行。

合同测试

在测试金字塔中调用合约测试至关重要。接触测试通过确保它们可以相互通信来检查独立单元(如两个微服务)的兼容性。合同测试测试 API 的工作方式,这是微服务相互交互的方式。

合约测试检查这些微服务的边界和交互,并将它们存储在合约中,然后可以将其用作双方未来如何交互的标准。它要求双方就允许的交互集达成一致,并允许随着时间的推移而演变。

端到端测试

端到端测试(E2E 测试)是最终测试阶段,涉及从头到尾测试应用程序的工作流程以实现完整的用户旅程。

这些测试可以自动化,但 E2E 测试仅针对超关键流进行。它在微服务架构中不能很好地扩展,因为它需要启动许多微服务并将它们连接起来,这对于自动化和维护是具有挑战性的。因此,它仅用于测试特定微服务之间的关键交互。

要使用的微服务测试工具,包括按需登台环境

开发人员和 QA 团队对微服务测试工具有不同的偏好,尤其是对于这些不同类型的测试。以下是一些流行的概要。许多是按需登台环境,它们是动态创建的,由 CI/CD 管道触发。使用按需登台,一旦开发人员完成登台环境,登台环境以及任何配置、环境或安装不一致都会被破坏。

releasehub
该平台是一个按需登台环境,具有可访问的协作共享功能。您可以将应用程序的存储库连接到 Release,然后为每个拉取请求和每次代码推送的更新创建临时环境。此外,可以为集成、传统登台或 QA/UAT 用例创建环境。开发人员和 QA 可以完全访问环境以进行测试和调试,并且产品团队、设计团队和利益相关者可以看到功能的发展并尽早并经常提供反馈。

WebApp.io(以前的 LayerCI)**
WebApp.io 是一个代码审查自动化平台,允许为全栈 Web 应用程序提供按需审查环境。您可以创建自定义拉取请求。一旦您创建了堆栈的一个副本,您可以立即复制它以自动运行 e2e 测试并集成到 CI/CD 工作流中。WebApp 将自动在 GitHub、GitLab 或 BitBucket 中注释您的拉取请求。

Vercel
Vercel 是一个用于前端框架、无服务器功能和静态站点的云平台,旨在与预先存在的内容和数据库集成。它托管的网站和 Web 服务可即时部署、自动扩展且无需监督,所有这些都无需配置。它还提供边缘位置托管和缓存。它类似于 Amazon Web Services (AWS) Lambda 或 Netlify。

Pact
Pact 是一个代码优先的消费者驱动的合同测试工具,适用于编写代码的开发人员和测试人员。它使用合同测试来测试 HTTP 和消息集成——验证应用程序间消息是否符合共同理解的方法,并记录在合同中。这种合同测试方式减少了大型单元测试。

Apache JMeter
Apache JMeter 是测试人员常用的基于 Java 的性能测试工具。它是一个开源平台,可以用作负载测试工具,用于分析和测量 Web 应用程序的性能。

Hoverfly
Hoverfly 是一个自动化的、开源的 API 通信模拟工具,用于专门的集成测试。用户可以测试 API 在速率限制和/或网络延迟等场景中的反应。

Grafana
Grafana 提供免费的指标可视化和分析。仪表板让开发人员可以查看时间序列数据,以观察微服务在实时流量中的响应方式。

Gatling
Gatling 是一个用 Scala 编写的负载测试工具。它可以在多个平台上运行模拟,然后报告活跃用户数量和响应时间等指标。

结论
微服务的测试、调试和维护部分通常是使用微服务架构中最具挑战性但必不可少的部分。希望以上信息可以帮助您了解不同的测试类型和工作的最佳工具。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

文档获取方式: 

加入我的软件测试交流群:822269834免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:一文读懂智能指针

C11 引入了 3 个智能指针类型&#xff1a; 当使用智能指针时&#xff0c;我们首先需要包含 memory头文件&#xff0c;这个头文件包含了 C 标准库中智能指针的定义。 1.std::unique_ptr<T> &#xff1a;独占资源所有权的指针。 2.std::shared_ptr<T> &#xff1a;共…

「Verilog学习笔记」信号发生器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 方波的实现&#xff0c;较为简单&#xff0c;只需要设置一个计数器&#xff0c;使输出保持10个时钟为0&#xff0c;跳变为20&#xff0c;再保持10个时钟。依次循环。可以按…

RTMDet原理与代码解析

paper&#xff1a;RTMDet: An Empirical Study of Designing Real-Time Object Detectors official implementation&#xff1a;https://github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet 本文的创新点 Backbone and Neck 在backbone的basic building block中采…

2023年【R1快开门式压力容器操作】考试资料及R1快开门式压力容器操作复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 R1快开门式压力容器操作考试资料参考答案及R1快开门式压力容器操作考试试题解析是安全生产模拟考试一点通题库老师及R1快开门式压力容器操作操作证已考过的学员汇总&#xff0c;相对有效帮助R1快开门式压力容器操作复…

2023年【危险化学品经营单位安全管理人员】考试内容及危险化学品经营单位安全管理人员最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试内容是安全生产模拟考试一点通生成的&#xff0c;危险化学品经营单位安全管理人员证模拟考试题库是根据危险化学品经营单位安全管理人员最新版教材汇编出危险化学品经营单位安全管…

Java核心知识点整理大全12-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

【多线程】Thread类的使用

目录 1.概述 2.Thread的常见构造方法 3.Thread的几个常见属性 4.启动一个线程-start() 5.中断一个线程 5.1通过共享的标记来进行沟通 5.2 调用 interrupt() 方法来通知 6.等待一个进程 7.获取当前线程引用 8.线程的状态 8.1所有状态 8.2线程状态和转移的意义 1.概述 …

使用向日葵开机棒进行远程开机

文章目录 1\. 前言2\. 说明3\. 开机棒设置4\. 电脑端设置4.1. 电脑端允许网卡唤醒4.1.1. 关闭设备节能4.2. 将电脑端设备加入设备列表 5\. 手机端5.1. 添加开机棒5.2. 绑定主机5.2.1. 添加成功的主机 6\. 唤醒 1. 前言 如果我们出差在外或者人不在实验室&#xff0c;如果可以使…

【极客技术】真假GPT-4?微调 Llama 2 以替代 GPT-3.5/4 已然可行!

近日小编在使用最新版GPT-4-Turbo模型&#xff08;主要特点是支持128k输入和知识库截止日期是2023年4月&#xff09;时&#xff0c;发现不同商家提供的模型回复出现不一致的情况&#xff0c;尤其是模型均承认自己知识库达到2023年4月&#xff0c;但当我们细问时&#xff0c;Fak…

【Spring篇】JDK动态代理

目录 什么是代理&#xff1f; 代理模式 动态代理 Java中常用的代理模式 问题来了&#xff0c;如何动态生成代理类&#xff1f; 动态代理底层实现 什么是代理&#xff1f; 顾名思义&#xff0c;代替某个对象去处理一些问题&#xff0c;谓之代理&#xff0c;那么何为动态&a…

Zabbix-Liunx服务器内存使用率测试

要在Python 2.7中运行内存消耗脚本并安装psutil&#xff0c;您需要先安装pip。以下是完整的步骤&#xff0c;包括如何在Python 2.7环境中安装pip&#xff0c;然后安装psutil&#xff0c;以及最后如何运行内存消耗脚本。 步骤1: 安装pip 在Python 2.7中安装pip&#xff1a; 首先…

积分球吸收光谱测量的领域有哪些?

积分球吸收光谱测量是一种常用的吸收光谱测量方法&#xff0c;它通过将样品放置在积分球的入口处&#xff0c;球内的光线经过多次反射后形成均匀的照度分布&#xff0c;然后使用光度计或光谱仪对光线进行测量&#xff0c;可以获得样品的相关参数。 在积分球吸收光谱测量中&…