JMeter 吞吐量示例

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

在此示例中,我们将演示吞吐量的概念作为使用 JMeter 执行测试的性能指标。我们还将简要了解 JMeter 的吞吐量常量计时器的用法。在了解吞吐量的语义之前,让我们先看看这个概念。

一、简介

Apache JMeter 是一种基于 Java 的开源工具,可让您对应用程序执行功能、负载、性能和回归测试。应用程序可能在 Web 服务器上运行,也可能是独立的。它支持在包含静态和动态资源的客户端-服务器和 Web 模型上进行测试。它支持用于执行测试的各种协议,包括 HTTP、HTTPS、JDBC、FTP、JMS、LDAP、SOAP 等。

快速浏览一些功能:

  • 它提供了一个全面的基于 GUI 的工作台来进行测试。它还允许您在非 GUI 模式下工作。 JMeter 也可以移植到服务器上,允许在分布式环境中执行测试。
  • 它提供了模板的概念,模板是为各种方案或协议预先定义的测试计划,可以直接用于创建您需要的测试计划。
  • 它使您能够使用强大的功能(如线程组、控制器、采样器、监听器等)在结构上构建测试计划。
  • 它通过有效的日志记录提供调试和错误监控。
  • 它通过变量的概念支持参数化测试。
  • 它支持创建不同风格的测试计划,包括 Web、数据库、FTP、LDAP、Web 服务、JMS、监视器等。
  • 它允许通过让不同的 JMeter 实例作为跨节点的服务器运行并从单个客户端应用程序访问来进行远程测试。
  • 它为您提供实时测试结果,涵盖延迟、吞吐量、响应时间、活动线程等指标。
  • 它使您能够基于正则表达式和许多其他功能执行测试。

1.1.什么是吞吐量?

吞吐量是属于性能类别的非功能性需求的一个组成部分,并以总数来衡量。给定时间内的事务或请求数或 TPS(每秒事务数)。它在某种程度上反映了服务器的能力。服务器在承受多少负载方面的能力。它是帮助评估应用程序性能的重要指标之一。最大吞吐量通常是可取的,尽管系统本身的性能不能仅基于更高的吞吐量。在测试应用程序性能时,还需要考虑某些其他指标,如响应时间、延迟等。从网络的角度来看,吞吐量也可以意味着没有。每秒传输或发送的字节数(b/sec 或 kb/sec)。对于典型的 Web 应用程序,吞吐量以每秒发送到 Web 服务器的请求数来衡量。

1.2. JMeter 中的吞吐量

众所周知,JMeter 是一种流行的应用程序负载测试工具,我们经常验证的性能指标之一是“吞吐量”。我们通过观察测试结果来衡量吞吐量。通过侦听器组件观察测试结果。以下侦听器组件将允许您测量或跟踪吞吐量值:

  • 聚合图
  • 综合报告
  • 图形结果
  • 总结报告

JMeter 还提供了一个有用的计时器组件来配置或设置一个恒定的吞吐量值来测试应用程序负载。它称为 JMeter 吞吐量常量计时器。

2. JMeter 吞吐量示例

我们现在将演示负载测试中吞吐量的使用。我们将对 100 个并发用户(线程)进行示例负载测试并评估吞吐量值。我们将在 JCG 主页(www.javacodegeeks.com)上进行负载测试。并发性将通过使用 ThreadGroup 元素的 Ramp-up Period 字段来控制。

在安装 JMeter 之前,请确保您已安装 JDK 1.6 或更高版本。使用 此处的 链接下载最新版本的 JMeter。在撰写本文时,JMeter 的当前版本是 2.13。要安装,只需将存档解压缩到您希望安装 JMeter 的主目录中。将 JAVA_HOME 环境变量设置为指向 JDK 根文件夹。解压缩存档后,导航到 <JMeter_Home>/bin 文件夹并运行命令 jmeter 。对于 Windows,您可以使用命令窗口运行。这将打开 JMeter GUI 窗口,您可以在其中构建测试计划。

2.1.配置用户和启动时间

我们将定义五个 ThreadGroup 元素,每个元素具有不同的启动时间。每个线程组将配置 100 个线程(用户)。每个线程组的加速周期分别为 0、15、25、35 和 45。 Ramp-up period 表示每个线程启动的持续时间。例如,对于 100 个线程,如果加速周期为 100 秒,则每个线程将在 (100/100) 1 秒后启动。每个线程组都有一个 HTTP 采样器,它会向 JCG 主页 (www.javacodegeeks.com) 发出请求。下图显示了配置有 100 线程和 ramp-period 为 0 的 ThreadGroup。

具有 100 个用户和零加速的线程组

ThreadGroup 名称是“用例 1”。 Number of Threads 字段设置为 100 。它表示 100 个用户, Ramp-Up Period 0 。这意味着所有 100 个线程将立即启动,没有任何延迟。同样,您可以配置接下来的四个线程组,并以“Use Case [2..5]”的格式命名。为每个线程组分别配置ramp-up period为15,25,35,45。将每个线程组的采样器命名为 UC[1..5]。如前所述,每个 HTTP 采样器都将指向 JCG 主页。确保在运行或执行测试时,每个线程组都同步执行,即一个接一个地执行。为此,选择 测试计划 元素并从其控制面板中选中 连续运行线程组 字段(参见下图)。

测试计划


2.2.观察测试结果

我们将使用聚合报告侦听器组件观察测试结果。右键单击 Test Plan 元素并选择 Add -> Listener -> Aggregate Report

单击开始图标运行测试。让我们观察执行的每个线程组的吞吐量值。

显示吞吐量的汇总报告

ramp-up period 为 0 的第一个线程组的结果。这意味着所有线程同时启动,因此会立即加载服务器。这不是一个实际场景,不应在生产环境中进行负载测试时进行试验。这具有相当高的吞吐量,但平均请求加载时间非常长 (12005)。因此,这不符合良好的性能输出。

第二个和第三个的结果提供了相当平衡的吞吐量和请求加载时间。这是因为我们为线程启动配置了合适的加速期(不是太低或太高)。第四和第五线程组的结果显示吞吐量下降,因为我们配置了更高的加速期。所以我们更平衡的性能输出来自第二个和第三个结果。请记住,我们只处理 100 个用户(线程),大量用户将需要较长的启动时间。测量应用程序的性能可能是一件非常棘手的事情。

需要思考的几点

如果你想在用户负载很重的情况下进行测试(比如,成千上万),可以充分利用 JMeter 的分布式测试方面。您可以让 JMeter 的实例在单独的实例上运行,并从单个客户端节点执行分布式测试。

可以在 JMeter 中使用常量计时器来模拟连续请求之间的延迟。您可以提供 300ms 的值,它可以在 0.3 秒后启动请求,从而导致有效延迟,这是提高吞吐量所需的。

零加速期不是一个好的选择,特别是在使用大号进行测试时。用户(线程)。由于所有线程同时启动,它可能会由于即时和快速加载而使您的服务器迅速崩溃。对于这个例子,我们只处理 100 个用户,因此可以模拟这种 100% 的并发级别。加速期也不应太长,因为它会使吞吐量指标无效。这意味着服务器有容量,但没有足够的线程或用户在这么短的时间内发出请求。 Ramp-up 应该配置为下一个线程总是在前一个线程即将完成之前开始。这可以提供平衡的吞吐量。

2.3.恒定吞吐量定时器

这是一个独特的计时器,您可以在其中提供测试所需的吞吐量。它是一种性能测试的逆向方法。在这里,您首先通过指定吞吐量来执行负载测试,并尝试确保它满足您的测试标准。该计时器将允许您指定一个恒定的吞吐量值,但不能保证它将在测试期间保持该恒定的吞吐量。在运行持续时间较长的测试时,您经常会看到吞吐量接近指定值。除了指定恒定吞吐量值外,它还允许您选择吞吐量计算模式。这些算法计算与所有线程组或当前线程组中的线程总数成比例的延迟。请注意,此计时器仅在您执行持续时间较长的测试时有用。

让我们配置恒定吞吐量计时器。我们将创建一个具有 300 个用户且启动时间为 50 秒的 ThreadGroup 元素并循环测试一次。我们要确保测试负载为每秒 6 个请求或每分钟 360 个请求的吞吐量。添加指向 JCG 主页的 HTTP 采样器。右键单击 HTTP Request sampler 并选择 Add -> Timer -> Constant Throughput Timer

恒定吞吐量定时器

将目标吞吐量字段值设置为 360 。这个值是没有。每分钟的样本或请求数。这意味着我们希望达到每秒 6 个请求的吞吐量。我们将使用聚合报告侦听器组件观察测试结果。将 基于字段值的计算吞吐量 设置为“当前线程组中的所有活动线程”。它是根据当前线程组中的线程数计算延迟时间的算法之一。

运行测试并查看结果。

显示恒定吞吐量的聚合报告

如您所见,我们的吞吐量接近每秒 6.0 个请求的值。请注意,如果您设置非常高的吞吐量值,您的服务器可能无法接受异常负载。所以它总是建议从较低的值开始,逐渐增加吞吐量值,直到达到更合理的可接受形式。

3.结论

吞吐量是评价应用性能的重要性能指标之一。它表示在给定时间段内可以进行的事务或请求的数量。这是检查服务器负载能力的有用度量。尽管不应完全依赖于吞吐量指标,但需要结合延迟和响应时间来查看。 JMeter 提供了不同的侦听器组件来跟踪或观察吞吐量值。它还提供计时器功能以明确设置吞吐量值。本文的目的是演示如何使用吞吐量作为一种性能指标及其在 Constant Throughput Timer 组件中的应用。