Apache JMeter

Apache JMeter 是一款图形化开源工具,用于对服务器性能进行负载测试。JMeter 完全用 Java 编写,因此兼容所有安装了 Java 的操作系统。JMeter 拥有一整套广泛的工具,适用于从静态内容到动态资源和网络服务的各种负载测试。

它的安装很简单。我们需要从 JMeter 网站下载,然后运行应用程序即可。如前所述,它需要在机器上安装 Java。

JMeter 可以测试 FTP 服务器、邮件服务器、数据库服务器、查询等。在本书中,我们无法涵盖所有这些主题,因此我们将只对网络服务器进行负载测试。Apache JMeter 的功能列表请访问 http://jmeter.apache.org/

运行应用程序之初,我们会看到如下窗口:

image 2023 11 05 21 54 01 582

要运行任何类型的测试,首先需要创建一个测试计划。测试计划包含执行该测试所需的所有组件。默认情况下,JMeter 有一个名为 Test Plan 的测试计划。让我们把它命名为我们自己的计划,Packt Publisher 测试计划,如下截图所示:

image 2023 11 05 21 54 32 306

现在,保存测试计划,JMeter 将创建一个 .jmx 文件。将其保存在适当的位置。

下一步是添加线程组。线程组定义了测试计划的一些基本属性,这些属性在所有类型的测试中都很常见。要添加线程组,请右键单击左侧面板中的计划,然后导航至添加 | 线程(用户) | 线程组。将显示以下窗口:

image 2023 11 05 21 55 21 262

线程组具有以下重要属性:

  • 线程数:这是虚拟用户数量。

  • 爬升周期:它告诉 JMeter 将线程数提升到满负荷需要多长时间。例如,在前面的截图中,我们有 40 个线程和 80 秒的爬升时间;在这里,JMeter 将用 80 秒来完全启动 40 个线程,而这三个线程中的每一个都将用 2 秒来启动。

  • 循环次数:这将告诉 JMeter 该线程组的运行时间。

  • 调度程序:用于将线程组的执行时间安排到稍后。

现在,我们需要添加 HTTP 请求默认值。右键单击 Packt 线程组,然后转到 添加 | 配置元素 | HTTP 请求默认值。这时会出现一个类似下面的窗口:

image 2023 11 05 21 59 26 302

在前面的窗口中,我们只需输入应用程序的 URL 或 IP 地址即可。如果网络服务器使用 cookie,我们还可以添加 HTTP Cookie 管理器,在其中我们可以添加用户定义的 cookie,并包含所有数据,如名称、值、域、路径等。

接下来,我们将添加 HTTP 请求,方法是右击并导航到 Packt Thread Group | Add | Sampler | HTTP Request,然后会出现以下窗口:

image 2023 11 05 22 00 05 051

这里的重要字段是路径。我们只想针对主页运行测试,因此对于此 HTTP 请求,我们只需在路径字段中添加斜线 (/)。如果我们想测试其他路径,如 "联系我们",则需要添加另一个 HTTP 请求采样器,如前面的截图所示。然后,在路径中添加 path/contact-us。

HTTP 请求采样器也可用于测试表单,通过在 "方法" 字段中选择 POST 方法,可以向 URL 发送 POST 请求。此外,还可以模拟文件上传。

下一步是添加一些监听器。监听器提供了一些功能强大的视图来显示结果。可以在表格视图中显示结果,还可以将不同类型的图表保存到文件中。对于这个线程组,我们将添加三个监听器: 在表格中查看结果、响应时间图表和图表结果。每个监听器视图显示不同类型的数据。右键单击 Packt 线程组,然后导航到添加 | 监听器,即可添加前面所有的监听器。我们将获得所有可用监听器的完整列表。逐一添加所有三个监听器。最后,我们在 JMeter 左侧的 Packt Publisher 测试计划面板将与下图相似:

image 2023 11 05 22 02 31 795

现在,我们准备通过单击上部工具栏中的 开始 按钮来运行我们的测试计划,如下图所示:

image 2023 11 05 22 03 00 919

只要我们点击开始按钮(指向右侧的绿色箭头),JMeter 就会启动我们的测试计划。现在,如果我们点击左侧面板上的 "在表格中查看结果 "监听器,就会在表格中看到每个请求的数据,如下图所示:

image 2023 11 05 22 03 34 812

前面的截图显示了一些有趣的数据,如采样时间、状态、字节数和延迟。

采样时间是服务器提供完整请求的毫秒数。状态是请求的状态。可以是成功、警告或错误。Bytes 是收到的请求字节数。Latency 是 JMeter 收到服务器初始响应的毫秒数。

现在,如果我们点击 "响应时间图",就会看到一个与下图类似的可视化响应时间图:

image 2023 11 05 22 04 33 388

现在,如果我们点击图表结果,就会看到响应时间数据以及平均值、中位数、偏差和吞吐量图表,如下图所示:

image 2023 11 05 22 05 05 389

Apache JMeter 提供了非常强大的工具,可以通过模拟用户对网络服务器进行负载测试。它可以为我们提供有关导致网络服务器响应缓慢的负载量的数据,利用这些数据,我们可以优化我们的网络服务器和应用程序。