负载测试

news/2024/12/16 11:31:45/文章来源:https://www.cnblogs.com/winterde/p/18609672

本文为英文资料翻译中文,来自Grafana的官网[1],供学习了解,感兴趣的可以阅读原文

负载测试曾经是指定 QA 团队的严格职责——开发人员编写代码,然后将其交给 QA,以查看其在压力下的表现。但如今这种情况很少见,因为在更快、更迭代的软件开发周期中,开发和运营变得越来越一致。

因此,您可能会在团队中听到更多关于负载测试的讨论,但您知道负载测试包含哪些内容以及它如何使您的组织受益吗?在这里,我们将帮助您了解负载测试并解释为什么它是软件生命周期的重要组成部分。

什么是负载测试?

负载测试是一种软件测试,它会在系统(应用程序、API 或网站)上放置模拟工作负载,以查看其性能。它可以帮助组织确保其系统能够处理预期的工作负载,同时保持稳定、高质量的用户体验。团队还会执行负载测试,以应对可能导致系统速度变慢、崩溃或产生其他类型错误的流量高峰。

负载测试可能有多个目标,但通常您要查看系统如何响应正常和高峰使用情况。这包括它如何处理不断变化的用户数量、交易和数据量。然后,您可以将测试结果与应用程序和系统指标进行可视化和关联,以全面了解系统的性能。

负载测试的类型

负载测试是什么类型的测试?

负载测试是性能测试的一个子集,通常用于检查系统如何响应正常使用和峰值使用。您需要检查响应时间缓慢、错误、崩溃和其他问题,以确定系统在性能受到影响之前可以容纳多少用户和事务。

如今,测试人员通常依靠专门的基于云的自动化工具(如Grafana Cloud k6)来使用虚拟用户和模拟数据量测试系统,以了解额外负载如何影响性能。他们监控和测量响应时间、吞吐量和资源利用率,以检测在系统部署到生产环境之前需要解决的潜在瓶颈或扩展问题。

负载测试与性能测试

虽然负载测试和性能测试相关,但它们是不同类型的测试。

正如我们所讨论的,负载测试模拟用户活动来确定系统处理增加的流量或负载的能力。

性能测试是一个总称,用于衡量应用程序的整体性能。这可能包括测试速度、可扩展性、可靠性和资源利用率,以确定需要改进的领域。性能测试包括负载测试,但也包括其他类型的测试,例如浏览器性能测试和综合监控。

负载测试有多少种类型?

您可以在应用程序上执行多种不同的负载测试。请考虑以下测试类型,它们对应于不同的目标和负载配置文件:

  • 烟雾测试:以最小负载验证系统功能。
  • 平均负载测试:了解系统在典型流量下的运行情况。
  • 压力测试:了解系统在高峰流量时的负载运行情况。
  • 峰值测试:了解系统在流量突然大量增加的情况下如何运行。
  • 断点测试:逐步增加流量以发现系统断点。
  • 浸泡测试:发现系统在较长时间的负载下是否或何时会出现性能下降。

负载测试的总体目标决定了您可能需要的负载测试类型。您选择的测试类型将决定您如何规划和构建负载测试。但每个应用程序、组织和测试项目都有所不同。

我们对负载测试的建议是始终从简单开始并经常测试。您可以随时迭代和扩展测试套件。

负载测试中的压力测试是什么?

压力测试是一种常见的负载测试类型,用于评估系统在负载比平时更重时的表现。压力测试也可能被称为高峰时段测试、激增测试或规模测试。

压力测试可验证系统在高于正常使用量的情况下的稳定性和可靠性。系统可能会在异常时刻承受高于正常水平的工作负载,例如流程截止日、发薪日、高峰时段、工作周结束以及许多其他可能导致频繁高于平均水平的流量的场合。

负载测试工具

最好的负载测试工具是什么?

最好的负载测试工具是最适合您特定需求的工具。也就是说,选择始终是主观的。基础设施和应用程序需求可能千差万别,负载测试的重点将影响您的决定。

不过,在选择最佳负载测试工具时,你仍应该关注一些关键功能:

  • 易于使用的 API 和 CLI
  • 可以使用熟悉的脚本语言构建测试
  • 自动化测试
  • 高性能和可扩展性
  • 支持多种数据存储
  • 适用于其他类型测试的更广泛的功能

JMeter 是一个负载测试工具吗?

Apache JMeter 是最受欢迎的负载测试工具之一,已经流行了一段时间。该开源项目于 1998 年首次发布,完全由Apache 基金会用 Java 构建,并引起了人们的兴趣,因为它是当时流行的商业工具的免费替代品。

JMeter 负载测试

与Grafana k6一样,JMeter支持多种协议,并提供测试结果的详细摘要,帮助用户分析系统性能并确定后续步骤。

总体而言,JMeter 非常适合传统软件测试团队或喜欢 GUI 驱动测试工具的团队。虽然 JMeter 用户可以使用代码扩展测试脚本,但大多数脚本都是通过 GUI 完成的。相比之下,Grafana k6 等工具专为跨职能工程团队以及希望将负载测试集成到 DevOps 工作流或 CI/CD 管道中的团队而设计。

根据JMeter 网站,该 Java 应用程序最初是为测试 Web 应用程序而设计的,但后来扩展到其他类型的软件测试。它模拟不同类型的负载,以便您可以看到对系统性能的潜在影响。测试人员可以使用代码执行脚本,但 JMeter 中的大多数脚本都是在 UI 中完成的。

负载测试工具:开源

JMeter 可能已经证明开源可以与专有产品竞争,但它并不是唯一一家这样做的公司。以下按字母顺序列出了 10 种值得考虑的流行开源负载测试工具:

  • ApacheBench
  • Apache JMeter
  • Artillery
  • Gatling
  • Grafana k6
  • Locust
  • Siege
  • Taurus
  • The Grinder
  • Tsung

负载测试工具:免费与商业

开源工具是一种构建概念验证的出色且经济高效的方法。对于进行简单、不频繁测试的小型团队来说,它也非常有效。但是,为应对复杂的用户场景而频繁进行测试的团队应该考虑超越基础的强大解决方案。在一定规模下,管理流程所需的专业知识水平会变得太高。

以下按字母顺序列出了 10 个最受欢迎的付费负载测试解决方案:

  • Akamai CloudTest
  • BlazeMeter
  • Grafana Cloud k6
  • Headspin
  • LoadRunner
  • LoadNinja
  • LoadView
  • NeoLoad
  • New Relic
  • Radview WebLOAD
    当然,这不一定是非此即彼的选择。许多组织使用开源和专有工具的组合来满足其负载测试需求。无论如何,在将任何工具嵌入到您的测试策略之前,请务必计算各种选项的总拥有成本。

API 的负载测试工具

对 API 进行负载测试的团队可以缩短加载时间并提高整体性能。他们还可以通过避免停机和提高运营效率来降低故障风险并帮助降低成本。许多工具在设计时都考虑到了 API 负载测试,其中包括 BlazeMeter、Grafana k6、JMeter、Postman 和 Taurus,仅举几例。

通常,API 负载测试从评估小型、独立的组件开始。随着每次相应的迭代,测试范围会不断扩大,直到获得更完整的端到端 API 工作流程视角,以及它与其他 API 的交互方式。

负载测试示例

负载测试的例子有哪些?

负载测试对任何应用程序都有好处,涵盖了广泛的用例,但以下是团队可能进行负载测试的一些常见应用程序示例:

  • 电子商务网站。在此场景中,测试人员模拟用户浏览产品、将商品添加到购物车并完成购买。他们还考虑了不同类型的用户,例如新客户和回头客,以及不同类型的浏览行为,例如搜索特定产品或浏览类别。
  • 银行应用程序。测试器模拟用户执行不同类型的交易,例如资金转账、余额查询和加载应用程序。它们包括不同类型的用户,例如个人和商业客户,以及不同类型的交易量。
  • 医疗保健应用。虚拟用户(患者、医疗保健提供者等)可访问医疗记录、安排预约和请求处方。测试应解决不同类型的使用模式,例如高峰预约时间。
  • 视频流媒体平台。在对视频流媒体平台进行负载测试时,团队会模拟大量用户观看视频、搜索内容以及与平台功能互动的情况。这可以考虑免费和付费订阅者以及不同的观看行为,包括在不同设备和不同分辨率下进行流媒体播放。
  • 除了这些类型的网站和应用程序之外,团队还可能对其他系统组件进行负载测试,例如 API。

负载测试和压力测试示例

如前所述,负载测试是一种软件测试,它将模拟工作负载放在系统(应用程序、API 或网站)上,以查看其性能。压力测试是一种特定类型的负载测试,用于评估系统在工作负载比平时更重时的性能。

压力测试过程中的步骤通常与前面概述的负载测试步骤非常相似 - 它们只是涉及更高的负载量。

k6 负载测试示例

Grafana k6 是一款开源 (OSS) 负载测试工具。团队可以使用 k6 测试系统可靠性和性能,并更快地发现问题。Grafana Cloud k6 是 Grafana k6 的托管和完全管理版本。

k6 的最大优势之一是其基于代码的脚本以及迎合开发人员体验的事实。

k6 围绕四个主要支柱构建:

  • 使用户能够编写脚本并配置他们的工作负载:虽然 k6 是用 Go 编写的,但 k6 用户使用 JavaScript 概述他们的工作负载,k6 使用其goja 解释器运行JavaScript。k6 还支持各种开源技术、工具和协议,并允许通过其扩展实现定制和灵活性。
  • 规划和执行测试:用户通过可配置选项定义他们希望复制的特定执行场景。然后,k6 创建执行计划并根据用户的要求执行。
  • 收集软件性能的测量数据,例如响应时间: k6 收集测量数据,然后将其分类并聚合为指标,例如响应时间。
  • 将结果转发给用户:测试结束摘要为用户提供即时且可操作的见解。

如何进行在线负载测试

一般来说,网站负载测试的目的是模拟真实用户流量,以提高可靠性并防止潜在故障。测试团队可以从各种网站测试方法中进行选择,例如:

  • 后端与前端性能测试
  • 基于协议、基于浏览器或混合负载测试
  • 组件测试与端到端测试

如何进行负载测试?

负载测试的目标是在给定情况下模拟系统上一定数量的用户活动 — — 无论是普通的一天,还是预期的活动高峰(即在线零售商的假日促销),或者您想了解可以将系统整体压力提升到何种程度。

根据要测试的系统或应用程序以及总体目标和要求,执行负载测试的具体过程可能会有所不同。但是,要进行简单的负载测试,您可能会使用负载测试工具(例如 Grafana k6 或 JMeter)来创建和运行测试脚本。然后,测试本身通常会遵循以下流程示例:

  • 增加脚本的活动直到达到所需的模拟用户数量和吞吐量。
  • 在规定的时间内维持该负荷。
  • 根据测试用例,在设定的时间段后完全停止测试或让测试逐渐减少。

负载测试的步骤是什么?

虽然在负载测试过程中遵循的具体步骤可能有所不同,但测试人员通常会执行一系列步骤,包括以下示例中概述的步骤:

  • 定义测试要求和范围:这需要选择要测试的特定特性、功能或用户旅程。无论测试哪个系统,团队都应该知道具体的用户数量和每个流程的典型吞吐量。
  • 创建测试脚本:使用 Grafana k6 等负载测试工具,团队将构建一个自动执行负载测试的脚本。
  • 运行脚本:脚本将持续运行,直到达到定义的用户数和吞吐量。然后,该负载将维持一段指定的时间,然后测试停止或逐渐减少。
  • 分析测试结果:根据生成的测试结果,测试团队可以判断其系统的性能和资源消耗在满负荷期间是否保持稳定。在某些情况下,系统在此期间可能表现不佳或不稳定 - 这表明可能存在需要您识别和解决的潜在问题。另一方面,即使系统表现良好并承受了典型负载,团队也可能选择执行进一步的测试(例如压力测试),以评估其在高于平均水平的条件下的表现。

负载测试的好处

如果您的公司构建软件、API 或应用程序(或以上所有),则现代负载测试是必要的。

负载测试可以提高组织的整体绩效,因为团队可以:

  • 快速行动并确保发布的质量。
  • 正确评估新的或改变的基础设施。
  • 预防或降低因软件或API问题导致的风险。
  • 尽量减少失败的成本。
  • 为高峰事件和需求高峰准备应用程序。
  • 提供快速、可靠的卓越用户体验。
  • 确保团队能够满足服务水平协议 (SLA)。
    整个组织内的团队都应采用负载测试,因为测试过程中参与测试的人越多,产品就越可靠、性能就越高。当您的产品运行良好时,您的用户也会做出良好的反应,这对您的业务和整个组织都有好处。

参考文献

  1. https://grafana.com/load-testing/#what-is-load-testing

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

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

相关文章

算法之链表

链表 移除链表元素 对于链表来说,删除头节点和中间节点具体操作不一样是因为想要删除一个中间节点,必须要知道该节点的前一个节点,而头节点没有前一个节点。使用虚拟头节点,统一节点的删除操作,用一个虚拟头节点的next指向head,这个链表中的每个元素都会有前一个节点,从…

算法之数组

数组 二分查找 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 题解:如果等于nums[middle],返回middle;否则返回left或者low。移除元素 在排序数组中查找target的开始位置和结束位置。 二分法不…

年会筹备大揭秘:看板软件如何助力团队协作?

看板软件以其直观、灵活和高效的特点,成为企业年会准备的得力助手。通过看板软件,企业可以更加高效地组织和管理年会筹备工作,确保活动的顺利进行,并为企业文化的传播和员工凝聚力的提升做出贡献。看板软件以其直观、灵活和高效的特点,成为企业年会准备的得力助手。通过看…

【每日一题】20241216

我做出了选择。也许不是好的选择,但选择了就要承担后果。【每日一题】已知函数 \(f(x)=\sin|x|+2|\sin x|\),则 \(f(x)\) 在 \((-2\pi,\pi)\) 的零点个数为________. 已知函数 \(f(x)(x\in\mathbf{R})\) 满足 \(f(-x)=2-f(x)\).设方程 \(f(x)-\frac{x+1}{x}=0\) 的 \(m\) 个…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

原生鸿蒙系统是我国首个实现全栈自研的操作系统,全面突破操作系统核心技术,真正实现了国产操作系统的自主可控。在这样的背景下,RUM 推出的用于监控原生鸿蒙的 SDK 为鸿蒙应用的开发者提供了更进一步的便利,对衡量用户体验关键的指标进行全面的分析和追踪。作者:杨兰馨(楠…

零基础学习人工智能—Python—Pytorch学习(十二)

前言 本文介绍使用神经网络进行实战。 使用的代码是《零基础学习人工智能—Python—Pytorch学习(九)》里的代码。 代码实现 mudule定义 首先我们自定义一个module,创建一个torch_test17_Model.py文件(这个module要单独用个py文件定义),如下: import torch.nn as nn import…

700PB数据的数仓依然“快稳省”!ByteHouse这本白皮书揭秘关键(内附下载链接)

12月10日,《火山引擎ByteHouse云数仓产品白皮书》在线上发布。在数字经济蓬勃发展的今天,企业面临着数据量爆炸性增长、数据分析需求日益复杂的双重挑战。传统的数据仓库解决方案已经难以满足企业对数据处理速度和灵活性的高要求。为了应对这些挑战,火山引擎于2021年正式推出…

子查询关联条件字段没有指定表的别名导致的查询结果不正确的问题

子查询关联查询问题,子查询关联条件字段没有指定表的别名导致的查询结果不正确的问题首先介绍一下表结构和背景;有两个数据库表,供应商XX任务主表和供应商等级变更记录表; 等级表里面有多个任务,两张表是通过同名称的字段,supplier_id关联; ①SQL是XX任务表关联供应商等…

Xinference环境搭建推理测试

引子 写了很多篇开源大模型的环境部署与推理搭建,截止到目前,开源大模型已经发展较为完善。个人觉得,产品和项目维度来看更多的是如果去落地实现,也就是大模型的最后一公里的应用开发。最近看到Xinference一个开源很火的推理框架。OK,那就让我们开始吧。 一、框架介绍 Xin…

前端工程化_CSS 工具链_学习笔记

本文主要介绍了 CSS 工具链,可以看出工具链的出现都是为了解决语言的问题,文中就介绍了预处理器和后处理器,预处理器主要介绍了 sass,并举了星空这个例子,sass 是通过与预编译器编译成 css 后给 html 使用;后处理器则介绍了 postcss,其中 postcss 和 babel 类似,都有很…

车载以太网TSN设计及测试解决方案

智能汽车电子电气架构全面向中央+区域式发展,车载通信新技术是新架构技术栈的重要组成部分。车载以太网时间敏感网络TSN技术凭借其低延时、高可靠的特点获得多家OEM的认可。依赖多年技术研发及数十个项目的实践积累,经纬恒润可为客户提供全面、专业且本土化的TSN设计与测试解…

看板软件:跨境电商圣诞营销加速器

看板软件在跨境电商中发挥着多重作用,特别是在圣诞节这一关键销售时期。通过清晰有序的任务管理、灵活适配的自定义功能、高效的信息整合与数据分析、以及精准有效的营销策略应用,看板软件显著提升了跨境电商团队的协作效率和销售能力。圣诞节作为全球最重要的购物节日之一,…