JMeter
JMeter,正式名称为 Apache JMeter,是由 Apache 软件基金会开发的开源软件应用程序。它是专为负载测试以及 Web 应用程序的性能测量,但其功能超出了 Web 协议的范围。 JMeter 允许用户使用并发线程模拟多个用户,向服务器创建各种请求,并分析应用程序在不同负载条件下的性能。 特点 JMeter 包括使用并发线程模拟多个用户的能力、对各种协议(包括 HTTP、FTP、JDBC 等)的支持以及用于设计和可视化的图形界面测试计划。其可扩展性允许开发人员和测试人员集成其他插件或编写自定义代码以增强其功能。和 JMeter,组织可以验证其软件应用程序和基础设施的可扩展性、响应能力和可靠性。
相关术语
另请参阅:
关于 JMeter 有疑问吗?
基础知识和重要性
什么是 JMeter?
JMeter 是一个开源 Java 应用程序,旨在加载测试功能行为和测量性能。最初是为 Web 应用程序测试而开发的,后来扩展到其他测试功能。 JMeter 模拟一组用户向目标服务器发送请求并返回显示目标服务器/应用程序的性能/功能的统计信息。 JMeter 的可扩展性使其能够支持各种协议,例如 HTTP、HTTPS、FTP、SOAP、JDBC、JMS 和 LDAP。它还可用于测试静态资源(如 JavaScript 和 HTML)以及动态资源(如 AJAX、JSP、Servlet 和 XML)的性能。 它提供诸如线程组来模拟并发用户、采样器来定义发送到服务器的请求、侦听器用于查看测试结果以及计时器等功能来管理请求节奏。 JMeter 还支持通过测试片段进行模块化以及使用变量和函数进行动态输入的参数化。 对于分布式测试,JMeter可以从单个主控制器控制多个从机,从而实现大规模测试。它还与其他工具和插件集成以增强功能,并可以通过自定义脚本进行扩展。 JMeter的 GUI 模式有利于测试计划的创建和调试,而非 GUI 模式则针对负载测试进行了优化。它可以使用 自动化测试 环境的命令行模式集成到 CI/CD 管道中。尽管有这些功能,JMeter 并不是浏览器,因此它无法像真正的浏览器一样呈现 HTML 页面,这可能会影响客户端性能指标。
为什么 JMeter 在软件测试中很重要?
JMeter 在软件测试 中很重要,因为它在模拟各种用户场景和负载模式方面具有多功能性和可扩展性。通过使测试人员能够:
-
模拟重负载在服务器、网络和对象上测试强度并分析不同条件下的整体性能。
-
测量应用程序性能关于响应时间、吞吐量和资源利用率等特定性能指标。
-
识别瓶颈通过提供详细的报告和图表,帮助查明可能阻碍大规模绩效的问题。
-
支持持续集成通过与 Jenkins 等工具集成,可以在 CI/CD 管道中进行自动化性能测试。
-
进行各种类型的测试例如负载、压力、功能和回归测试,无需额外的工具。
-
测试不同的协议和服务器类型包括 HTTP、HTTPS、SOAP、REST、FTP 等,这对于 Web 服务和应用程序的全面测试至关重要。
-
促进协作通过利用其开源特性在团队成员之间共享测试计划和结果,确保测试工作的一致性。 通过利用JMeter,组织可确保其应用程序能够处理预期的用户负载,从而防止潜在的停机并确保流畅的用户体验。这使得 JMeter 成为专注于性能的 测试自动化 工程师和 负载测试 的工具库中不可或缺的工具。
-
模拟重负载在服务器、网络和对象上测试强度并分析不同条件下的整体性能。
-
测量应用程序性能关于响应时间、吞吐量和资源利用率等特定性能指标。
-
识别瓶颈通过提供详细的报告和图表,帮助查明可能阻碍大规模绩效的问题。
-
支持持续集成通过与 Jenkins 等工具集成,可以在 CI/CD 管道中进行自动化性能测试。
-
进行各种类型的测试例如负载、压力、功能和回归测试,无需额外的工具。
-
测试不同的协议和服务器类型包括 HTTP、HTTPS、SOAP、REST、FTP 等,这对于 Web 服务和应用程序的全面测试至关重要。
-
促进协作通过利用其开源特性在团队成员之间共享测试计划和结果,确保测试工作的一致性。
JMeter 的主要功能是什么?
JMeter 的主要功能包括:
- 多协议支持:JMeter 支持各种协议的测试,例如 HTTP、HTTPS、FTP、SOAP、REST 和 TCP。
- Visual 测试计划 Building:用户可以使用 GUI 创建测试计划,从而更轻松地设计和修改测试。
- 记录功能:JMeter 可以直接从 Web 浏览器记录操作,这简化了测试脚本的创建。
- 回放和重播:可以重播测试计划以模拟用户操作和交互。
- 参数化:它允许通过 CSV 文件或其他方式动态输入数据,从而实现数据驱动的测试。
- 断言:用户可以添加断言来根据预期结果验证服务器的响应。
- 可扩展性:JMeter 可以使用自定义插件进行扩展,并支持与其他工具集成。
- 计时器:这些允许模拟请求之间的真实用户思考时间。
- 可扩展性:JMeter 可以有效地使用自己的资源来模拟大量用户,并且可以横向扩展以进行分布式测试。
- 报告:它提供全面的报告功能,包括用于分析和可视化测试结果的图形、图表和表格。
- 脚本支持:JMeter 支持使用各种语言(例如 JavaScript、Groovy)编写高级测试场景的脚本。
- 关联:JMeter 可以通过使用正则表达式提取器和其他后处理器来处理动态服务器响应,例如会话 ID。 这些功能使 JMeter 成为跨不同应用程序和服务的 性能测试 的多功能且强大的工具。
JMeter 与其他性能测试工具有何不同?
JMeter 与其他性能测试 工具的不同之处主要在于其开源性质和可扩展性。与许多商业工具不同,JMeter 可以使用自定义插件进行扩展,并得到为其开发做出贡献的大型社区的支持。它旨在满足从 负载测试、压力测试 到 功能测试 的各种测试需求。 JMeter 在多线程框架上运行,该框架允许多个线程并发采样并模拟服务器上的重负载。这与一些在协议级别模拟负载或使用浏览器模拟来实现更真实负载的工具不同。 另一个区别是它的GUI 设计,与一些基于脚本的工具相比,它对于创建测试计划更加用户友好。然而,这也可能是一个缺点,因为 GUI 可能会消耗更多资源,因此,JMeter 通常在非 GUI 模式下运行,以实现实际的 负载测试。 JMeter 基于 Java,这意味着它独立于并且可以在任何支持 Java 的系统上运行。这与仅限于特定操作系统的工具形成鲜明对比。 在协议支持方面,JMeter 具有 HTTP、HTTPS、FTP、SOAP 和 JDBC 等内置功能。虽然某些工具专门用于网络协议或 数据库 测试,但 JMeter 提供了广泛的测试功能,无需额外购买或集成。 最后,JMeter 通过 HTTP(S) 测试脚本 记录器的 记录功能 允许测试人员在 Web 浏览器上记录他们的操作,然后从这些操作创建 测试脚本,这一功能在其他工具中并不总是可用或简单。
JMeter 在 e2e 测试中的作用是什么?
在端到端 (e2e) 测试中,JMeter 通过模拟用户从开始到结束的旅程,确保整个应用程序(包括其后端服务和数据库)在各种条件下按预期运行,发挥着至关重要的作用。虽然 JMeter 主要以负载和 性能测试 闻名,但它可以在 e2e 测试中利用,以验证系统在实际场景中是否满足性能基准。 JMeter 可以模拟具有并发会话的多个用户与 Web 应用程序、APIs 和 Web 服务进行交互,这对于 e2e 测试至关重要。它有助于识别可能影响用户体验的瓶颈和性能问题。通过将 JMeter 与持续集成工具(例如 Jenkins)集成,e2e 测试可以自动化并作为部署管道的一部分运行。 对于 e2e 测试,JMeter 记录浏览器操作的能力特别有用。测试人员可以记录用户与应用程序的交互,然后通过修改来重播它以模拟各种用户行为。可以添加断言来验证响应,确保应用程序按预期运行。 JMeter 通过插件和脚本的可扩展性允许自定义测试以覆盖复杂的 e2e 场景。但是,需要注意的是,JMeter 不会渲染用户界面,因此它不能取代为基于 UI 的 e2e 测试设计的工具。相反,它通过提供一种测试应用程序在负载下的性能和行为的方法来补充它们,这是全面的端到端测试策略的一个关键方面。
安装和设置
如何安装 JMeter?
要安装JMeter,请按照下列步骤操作:
- 从 Apache JMeter 网站下载最新的 JMeter 二进制文件。根据您的操作系统选择相关的 zip 或 tgz 文件。
- 解压下载的存档到您选择的目录。 在 Windows 上,您可以使用 7-Zip 或 WinRAR 等软件来提取文件。 在基于 Unix 的系统上,您可以使用终端: 将
<version>替换为下载文件的实际版本号。
tar -xzf apache-jmeter-<version>.tgz
- 验证 Java 安装:确保您安装了兼容的 Java 版本。 JMeter 需要 Java 8 或更高版本。通过运行以下命令检查您的 Java 版本: 如果未安装 Java 或版本已过时,请从 Oracle 网站下载并安装相应的 Java JDK 或使用 OpenJDK。
java -version
- 设置 JAVA_HOME(可选):设置
JAVA_HOME环境变量以指向您的 Java 安装目录。此步骤是特定于平台的,如果 Java 已在系统的 PATH 中,则可能不需要。 - 运行JMeter:导航到提取的JMeter 文件夹中的
bin目录并启动JMeter: 在 Windows 上,双击jmeter.bat。 在基于 Unix 的系统上,使jmetershell 脚本可执行并运行它:
chmod +x jmeter.sh
./jmeter.sh
- 从 Apache JMeter 网站下载最新的 JMeter 二进制文件。根据您的操作系统选择相关的 zip 或 tgz 文件。
- 解压下载的存档到您选择的目录。 在 Windows 上,您可以使用 7-Zip 或 WinRAR 等软件来提取文件。 在基于 Unix 的系统上,您可以使用终端: 将
<version>替换为下载文件的实际版本号。
tar -xzf apache-jmeter-<version>.tgz
- 验证 Java 安装:确保您安装了兼容的 Java 版本。 JMeter 需要 Java 8 或更高版本。通过运行以下命令检查您的 Java 版本: 如果未安装 Java 或版本已过时,请从 Oracle 网站下载并安装相应的 Java JDK 或使用 OpenJDK。
java -version
- 设置 JAVA_HOME(可选):设置
JAVA_HOME环境变量以指向您的 Java 安装目录。此步骤是特定于平台的,如果 Java 已在系统的 PATH 中,则可能不需要。 - 运行JMeter:导航到提取的JMeter 文件夹中的
bin目录并启动JMeter: 在 Windows 上,双击jmeter.bat。 在基于 Unix 的系统上,使jmetershell 脚本可执行并运行它:
chmod +x jmeter.sh
./jmeter.sh
JMeter 有哪些系统要求?
JMeter 是基于 Java 的应用程序,因此它需要有效的 Java 运行时环境 (JRE) 或 Java 开发工具包 (JDK)。截至 2023 年初我所知,运行 JMeter 的系统要求是:
-
Java:JMeter 5.x 需要 Java 8 或更高版本。建议使用最新版本的 Java,以便从最新的性能和安全改进中受益。
- 操作系统:JMeter 基于 Java,可以在任何支持 Java 的操作系统上运行,包括 Windows、Linux 和 macOS。
- 内存:默认堆大小对于小型测试可能足够,但对于较大的测试,您可能需要增加堆大小。这可以通过编辑
jmeter.bat(对于 Windows)或jmeter(对于 Unix)文件来调整-Xms和-Xmx参数。
-
磁盘空间:虽然 JMeter 本身不需要太多磁盘空间,但请确保有足够的空间来存储测试结果和日志,特别是在运行大量测试时。
- 处理器:更快的 CPU 可以提高 JMeter 的性能,特别是在模拟大量并发用户时。
要调整内存设置,您可以修改JMeter启动脚本中的
JVM_ARGS变量:
- 处理器:更快的 CPU 可以提高 JMeter 的性能,特别是在模拟大量并发用户时。
要调整内存设置,您可以修改JMeter启动脚本中的
JVM_ARGS="-Xms512m -Xmx512m" jmeter.sh
将 512m 替换为所需的堆大小。对于分布式测试,请确保集群中的所有节点都满足这些要求并且已正确联网。
`jmeter.bat`
(对于 Windows)或
`jmeter`
(对于 Unix)文件来调整
`-Xms`
和
`-Xmx`
参数。
- 磁盘空间:虽然 JMeter 本身不需要太多磁盘空间,但请确保有足够的空间来存储测试结果和日志,特别是在运行大量测试时。
- 处理器:更快的 CPU 可以提高 JMeter 的性能,特别是在模拟大量并发用户时。
第一次如何设置 JMeter?
安装后首次设置JMeter:
- 启动JMeter:双击JMeter 安装文件夹的
bin目录中的jmeter.bat(Windows) 或jmeter(Unix) 文件。 - 创建测试计划: - 在 JMeter GUI 中,右键单击 **测试计划**节点。
- 选择 添加 > 线程(用户)> 线程组添加一个新的线程组。
- 配置线程组:
- 指定线程(用户)数量、启动周期和循环计数。
- 添加采样器: - 右键单击线程组。 - 选择 添加 > 采样器并选择您要测试的请求类型(例如 HTTP 请求)。
- 右键单击线程组。
- 选择 添加 > 采样器并选择您要测试的请求类型(例如 HTTP 请求)。
- 配置采样器:
- 输入请求的详细信息,例如服务器名称、端口号和路径。
- 添加监听器: - 右键单击线程组。 - 选择 添加 > 侦听器添加用于结果分析的侦听器(例如,查看结果树、摘要报告)。
- 右键单击线程组。
- 选择 添加 > 侦听器添加用于结果分析的侦听器(例如,查看结果树、摘要报告)。
-
选择 添加 > 线程(用户)> 线程组添加一个新的线程组。
-
在 JMeter GUI 中,右键单击 **测试计划**节点。
-
选择 添加 > 线程(用户)> 线程组添加一个新的线程组。
**添加 > 采样器** 并选择您要测试的请求类型(例如 HTTP 请求)。 -
右键单击线程组。
-
选择 添加 > 采样器并选择您要测试的请求类型(例如 HTTP 请求)。
添加 > 侦听器 添加用于结果分析的侦听器(例如,查看结果树、摘要报告)。
-
-
右键单击线程组。
- 选择 添加 > 侦听器添加用于结果分析的侦听器(例如,查看结果树、摘要报告)。
如何配置 JMeter 以获得最佳性能?
要配置 JMeter 以获得最佳性能,请遵循以下准则:
- 通过调整
jmeter.bat(Windows) 或jmeter.sh(Linux/Mac) 文件中的 JVM 设置,为JMeter 分配足够的内存。使用-Xms和-Xmx参数增加堆大小。例如:
HEAP="-Xms512m -Xmx2048m"
- 在 test execution 期间禁用不必要的侦听器,因为它们会消耗内存。仅在脚本调试或结果分析期间使用它们。
- 使用非 GUI 模式运行测试,从而减少资源消耗。从命令行执行测试:
jmeter -n -t testplan.jmx -l results.jtl
-
通过在
Sample Result Save Configuration中设置适当的值来减少收集的样本数量。- 使用
Summary Report或Aggregate Report等合适的侦听器而不是View Results in Table或View Results Tree来聚合和总结结果。 - **如果可能的话,从服务器级计算机运行 JMeter,因为它们拥有更多资源和网络容量。
- **在进行大规模测试时,将负载分布在多个JMeter 实例上,以避免单台机器过载。
- 通过使用最有效的脚本元素并避免不必要或复杂的正则表达式来优化您的测试脚本。
- 在
jmeter.properties或user.properties文件中配置JMeter 属性以进行微调,例如控制 DNS 缓存、TCP 套接字设置以及JMeter 对示例错误的行为。 - 监控运行JMeter的机器的资源使用情况,以确保它不是瓶颈。 通过执行这些步骤,您可以确保 JMeter 在 test execution 期间配置为实现最佳性能。
- 使用
-
通过调整
jmeter.bat(Windows) 或jmeter.sh(Linux/Mac) 文件中的 JVM 设置,为JMeter 分配足够的内存。使用-Xms和-Xmx参数增加堆大小。例如:
HEAP="-Xms512m -Xmx2048m"
- 在 test execution 期间禁用不必要的侦听器,因为它们会消耗内存。仅在脚本调试或结果分析期间使用它们。
- 使用非 GUI 模式运行测试,从而减少资源消耗。从命令行执行测试:
jmeter -n -t testplan.jmx -l results.jtl
- 通过在
Sample Result Save Configuration中设置适当的值来减少收集的样本数量。- 使用
Summary Report或Aggregate Report等合适的侦听器而不是View Results in Table或View Results Tree来聚合和总结结果。 - **如果可能的话,从服务器级计算机运行 JMeter,因为它们拥有更多资源和网络容量。
- 在进行大规模测试时,在多个 JMeter 实例之间分配负载,以避免单台机器过载。
- 通过使用最有效的脚本元素并避免不必要或复杂的正则表达式来优化您的测试脚本。
- 在
jmeter.properties或user.properties文件中配置JMeter 属性以进行微调,例如控制 DNS 缓存、TCP 套接字设置以及JMeter 对示例错误的行为。 - 监控运行JMeter的机器的资源使用情况,以确保它不是瓶颈。
- 使用
将 JMeter 升级到新版本的步骤是什么?
要将 JMeter 升级到较新版本,请按照以下步骤操作:
-
将下载的存档解压到新目录。避免覆盖旧的 JMeter 安装,以防止任何潜在的数据丢失。
-
将您的自定义配置从备份复制到新安装。这包括对
jmeter.properties、user.properties和system.properties文件所做的任何更改。 -
重新安装您正在使用的任何其他插件。使用JMeter 插件管理器可以简化流程,或手动将相关
.jar文件复制到lib/ext目录。 -
测试现有脚本以确认它们在新版本中按预期工作。解决 JMeter 功能中的任何弃用或更改。
-
查看新版本的发行说明,了解可能影响您的 测试计划 的新功能和更改。
-
一旦您确认新版本满足您的所有要求并且所有测试计划 均正常运行,请删除旧的JMeter 版本。 请记住始终检查版本之间的兼容性问题,尤其是在使用第三方插件或 JMeter 发生重大更改时。
-
将下载的存档解压到新目录。避免覆盖旧的 JMeter 安装,以防止任何潜在的数据丢失。
-
将您的自定义配置从备份复制到新安装。这包括对
jmeter.properties、user.properties和system.properties文件所做的任何更改。 -
重新安装您正在使用的任何其他插件。使用JMeter 插件管理器可以简化流程,或者手动将相关
.jar文件复制到lib/ext目录。 -
测试现有脚本以确认它们在新版本中按预期工作。解决 JMeter 功能中的任何弃用或更改。
-
查看新版本的发行说明,了解可能影响您的 测试计划 的新功能和更改。
使用 JMeter
如何在 JMeter 中创建基本测试计划?
-
**打开JMeter**并选择
File > New开始新的测试计划。 -
添加线程组通过右键单击测试计划并选择来添加到您的测试计划
Add > Threads (Users) > Thread Group。 -
配置 线程组包括线程(用户)数量、启动周期和循环计数。
-
添加采样器到线程组。对于 HTTP 测试,右键单击线程组并选择
Add > Sampler > HTTP Request。 -
配置 HTTP 请求包含服务器名称、端口号和路径。如有必要,请填写方法(GET、POST 等)和任何参数。
-
添加监听器到您的测试计划以查看结果。右键单击线程组并选择
Add > Listener。常见的听众有View Results Tree和Summary Report。 -
**保存您的测试计划**使用
File > Save以保留您的设置。 -
运行测试单击绿色开始按钮或选择
Run > Start。 以下是在 JMeter 中添加线程组和 HTTP 请求的示例:
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
</ThreadGroup>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">example.com</stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/testpath</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
</HTTPSamplerProxy>
请记住根据test scenario 的具体要求定制您的测试计划,包括任何必要的断言、cookie、标头或其他元素。
-
**打开JMeter**并选择
File > New开始新的测试计划。 -
添加线程组通过右键单击测试计划并选择来添加到您的测试计划
Add > Threads (Users) > Thread Group。 -
配置 线程组包括线程(用户)数量、启动周期和循环计数。
-
添加采样器到线程组。对于 HTTP 测试,右键单击线程组并选择
Add > Sampler > HTTP Request。 -
配置 HTTP 请求包含服务器名称、端口号和路径。如有必要,请填写方法(GET、POST 等)和任何参数。
-
添加监听器到您的测试计划以查看结果。右键单击线程组并选择
Add > Listener。常见的听众有View Results Tree和Summary Report。 -
**保存您的测试计划**使用
File > Save以保留您的设置。 -
运行测试单击绿色开始按钮或选择
Run > Start。
JMeter 测试计划中有哪些不同类型的元素?
JMeter 测试计划 由几个定义测试操作和配置的元素组成:
- 线程组:通过设置线程数、启动周期和循环计数来模拟用户。
- 采样器:向服务器执行特定类型的请求(HTTP、FTP、JDBC 等)。
- 逻辑控制器:控制请求流,包括 if-then-else 逻辑和循环。
- 监听器:以图形、表格或日志等各种格式收集和可视化测试结果。
- 计时器:在请求之间引入延迟以模拟真实的用户思考时间。
- 断言:根据预期结果验证服务器的响应。
- 配置元素:设置采样器的默认值和变量,例如 HTTP 请求默认值或用户定义的变量。
- 预处理器:在采样器请求之前执行操作,例如修改请求属性。
- 后处理器:在采样器请求后执行操作,例如从响应中提取数据。
- WorkBench:尚未添加到测试计划 的元素的临时工作区。
每个元素都有不同的用途,当组合起来时,它们会创建一个全面的test scenario。 测试计划 可以保存为
.jmx文件以供重复使用和版本控制。
如何使用 JMeter 进行负载测试?
- 设计一个测试计划:新建一个测试计划,添加一个 Thread Group 来模拟用户数量。配置线程(用户)数量、启动周期和循环计数。
- 添加采样器:在线程组内,添加 HTTP 请求采样器以定义对服务器的请求。配置请求详细信息,例如服务器名称、端口号、路径和请求方法。
- 添加监听器:要查看结果,请将查看结果树、摘要报告或聚合报告等监听器添加到您的测试计划。这些将帮助您分析服务器在负载下的性能。
- 使用 CSV 进行参数化:使用 CSV 数据集配置通过不同的用户数据对您的请求进行参数化,以进行更真实的测试。
- 添加断言:包括断言以验证来自服务器的响应,确保负载不会影响功能。
- 配置计时器:添加恒定计时器或高斯随机计时器等计时器来模拟请求之间的思考时间。
- 运行测试:通过单击“运行”按钮执行测试计划。使用添加的监听器实时监控测试。
- 分析结果:测试后,查看监听器数据以了解服务器的性能,查找响应时间、吞吐量和错误率等指标。
- 调整和重复:根据分析,根据需要修改测试计划以模拟不同的场景或识别性能瓶颈。 请记住保存您的测试计划 和结果以供将来参考或regression testing。
如何使用 JMeter 进行压力测试?
-
添加线程组:配置具有大量线程(用户)的线程组来模拟压力负载。设置加速时间和测试持续时间以达到并维持所需的应力水平。
-
配置采样器:添加 HTTP 请求采样器或其他相关采样器来复制会给系统带来压力的用户操作,例如提交表单或执行繁重的查询。
-
添加监听器:包括聚合报告、摘要报告或图形结果等监听器,以监控和可视化压力下的性能。
-
参数化输入:使用 CSV 数据集配置或其他参数化方法来改变输入数据,模拟更真实和多样化的应力条件。
-
定义断言:添加断言以在压力下验证响应,确保应用程序保持功能。
-
运行测试:执行测试计划并监视应用程序和服务器资源。
-
分析结果:测试后,使用JMeter监听器和外部监控工具分析结果,以识别瓶颈和阈值。
-
微调和重复:根据分析,微调应用程序或基础设施并重复压力测试以验证改进。 请记住在压力测试期间监控服务器资源(CPU、内存、磁盘 I/O、网络)以识别基础设施限制。在受控环境中使用 JMeter 以避免影响真实用户。
-
添加线程组:配置具有大量线程(用户)的线程组来模拟压力负载。设置加速时间和测试持续时间以达到并维持所需的应力水平。
-
配置采样器:添加 HTTP 请求采样器或其他相关采样器来复制会给系统带来压力的用户操作,例如提交表单或执行繁重的查询。
-
添加监听器:包括聚合报告、摘要报告或图形结果等监听器,以监控和可视化压力下的性能。
-
参数化输入:使用 CSV 数据集配置或其他参数化方法来改变输入数据,模拟更真实和多样化的应力条件。
-
定义断言:添加断言以在压力下验证响应,确保应用程序保持功能。
-
运行测试:执行测试计划并监视应用程序和服务器资源。
-
分析结果:测试后,使用JMeter监听器和外部监控工具分析结果,以识别瓶颈和阈值。
-
微调和重复:根据分析,微调应用程序或基础设施并重复压力测试以验证改进。
在 JMeter 中记录测试的步骤是什么?
要在 JMeter 中记录测试,请按照下列步骤操作:
-
右键单击在测试计划上并转至 添加 > 线程(用户)> 线程组 。
-
在线程组内部, 右键单击并导航至 添加 > 逻辑控制器 > 录音控制器 。
-
接下来,添加 HTTP(S) 测试脚本记录器以捕获 HTTP 请求。右键单击测试计划并选择 添加 > 非测试元素 > HTTP(S) 测试脚本 记录器 。
-
设置 端口号用于 HTTP(S) 测试脚本记录器(默认值为 8888)。
-
配置您的 浏览器或应用程序通过将代理服务器设置为来使用 JMeter 代理
localhost使用您在录音机设置中指定的端口。 -
在 JMeter 中,单击 开始 HTTP(S) 测试脚本记录器上的按钮。JMeter 现在已准备好进行记录。
-
与您的网络应用程序交互使用配置的浏览器/应用程序。JMeter 将记录请求和响应并将它们显示在记录控制器下。
-
完成您要记录的操作后, 停止录音在 JMeter 中。
10.你现在可以 保存 录制的脚本供以后使用或 修改 根据您的测试计划的需要。 请记住在记录之前清除浏览器缓存,以确保捕获所有请求,并禁用代理可能无法捕获的特定于浏览器的功能,例如预取。
-
右键单击在测试计划上并转至 添加 > 线程(用户)> 线程组 。
-
在线程组内部, 右键单击并导航至 添加 > 逻辑控制器 > 录音控制器 。
-
接下来,添加 HTTP(S) 测试脚本记录器以捕获 HTTP 请求。右键单击测试计划并选择 添加 > 非测试元素 > HTTP(S) 测试脚本 记录器 。
-
设置 端口号用于 HTTP(S) 测试脚本记录器(默认值为 8888)。
-
配置您的 浏览器或应用程序通过将代理服务器设置为来使用 JMeter 代理
localhost使用您在录音机设置中指定的端口。 -
在 JMeter 中,单击 开始 HTTP(S) 测试脚本记录器上的按钮。JMeter 现在已准备好进行记录。
-
与您的网络应用程序交互使用配置的浏览器/应用程序。JMeter 将记录请求和响应并将它们显示在记录控制器下。
-
完成您要记录的操作后, 停止录音在 JMeter 中。
10.你现在可以 保存 录制的脚本供以后使用或 修改 根据您的测试计划的需要。
如何分析 JMeter 测试的结果?
分析JMeter 测试结果涉及检查各种指标以评估性能。运行测试后,JMeter 提供了多种查看和解释数据的方法:
-
侦听器:将侦听器添加到您的测试计划 以捕获结果。常见的听众包括:
- 总结报告
- 综合报告
- 查看结果树
- 图表结果
- 响应时间图
- 总结报告
- 综合报告
- 查看结果树
- 图表结果
- 响应时间图
-
查看结果树:要获取详细的请求和响应数据,请使用此侦听器。它有助于调试错误,但会占用大量资源;避免在大负载测试期间使用它。
-
聚合报告:提供一个表格,其中包含平均响应时间、最小/最大、吞吐量、错误百分比等指标。对于快速概览性能很有用。
-
图形分析:使用图形直观地表示随时间变化的响应时间、吞吐量和其他指标。有助于识别趋势和峰值。
-
导出结果:将测试结果保存为 CSV 或 XML 格式,以便使用 Excel 或专用软件等外部工具进行进一步分析。
-
日志文件:查看 JMeter 日志文件以了解 test execution 期间发生的任何错误或问题。
-
自动分析:将JMeter与 Jenkins 等持续集成工具集成,以自动运行测试并生成报告。
-
关联指标:交叉引用不同的指标以了解响应时间、吞吐量和错误率之间的关系。
-
比较结果:比较不同测试运行的结果,以确定性能改进或回归。 对于经验丰富的工程师来说,分析 JMeter 结果意味着识别瓶颈、了解负载下的系统行为以及做出明智的决策以提高应用程序性能。
-
侦听器:将侦听器添加到您的测试计划 以捕获结果。常见的听众包括:
-
查看结果树:要获取详细的请求和响应数据,请使用此侦听器。它有助于调试错误,但会占用大量资源;避免在大负载测试期间使用它。
-
聚合报告:提供一个表格,其中包含平均响应时间、最小/最大、吞吐量、错误百分比等指标。对于快速概览性能很有用。
-
图形分析:使用图形直观地表示随时间变化的响应时间、吞吐量和其他指标。有助于识别趋势和峰值。
-
导出结果:将测试结果保存为 CSV 或 XML 格式,以便使用 Excel 或专用软件等外部工具进行进一步分析。
-
日志文件:查看 JMeter 日志文件以了解 test execution 期间发生的任何错误或问题。
-
自动分析:将JMeter与 Jenkins 等持续集成工具集成,以自动运行测试并生成报告。
-
关联指标:交叉引用不同的指标以了解响应时间、吞吐量和错误率之间的关系。
-
比较结果:比较不同测试运行的结果,以确定性能改进或回归。
高级主题
如何使用 JMeter 进行分布式测试?
要使用 JMeter 进行分布式测试,请按照下列步骤操作:
- 在所有将充当负载生成器的计算机(称为从节点)上设置 JMeter 环境。确保所有机器都在同一网络上并且可以相互通信。
- 通过编辑
jmeter.properties文件来配置主机(控制器)。找到remote_hosts属性并列出所有从属节点的 IP 地址,以逗号分隔。
remote_hosts=192.168.0.101,192.168.0.102,192.168.0.103
- 在所有从属节点上打开所需的端口,以允许来自主机的传入连接。默认JMeter 端口是
1099,但可以在jmeter.properties文件中更改。 - 通过从 JMeter
bin目录运行以下命令,在每个从属节点上启动 JMeter 服务器:
jmeter-server
- 在主计算机上创建测试计划,就像进行本地测试一样。
- 从主机上启动分布式测试,使用 GUI 模式进行配置,然后使用 CLI 模式执行,以节省资源。使用
-R选项指定远程主机,或使用-r选项来使用remote_hosts属性中列出的主机。
jmeter -n -t my_test_plan.jmx -r
-
实时监控测试或等待其完成。收集并分析来自主机的结果,主机将聚合来自所有从节点的数据。 请记住,如果需要,请同步所有节点的测试开始时间,并确保所有机器都具有同步时钟以获得准确的结果。
-
在所有将充当负载生成器的计算机(称为从节点)上设置 JMeter 环境。确保所有机器都在同一网络上并且可以相互通信。
-
通过编辑
jmeter.properties文件来配置主机(控制器)。找到remote_hosts属性并列出所有从属节点的 IP 地址,以逗号分隔。
remote_hosts=192.168.0.101,192.168.0.102,192.168.0.103
- 在所有从属节点上打开所需的端口,以允许来自主机的传入连接。默认JMeter 端口是
1099,但可以在jmeter.properties文件中更改。 - 通过从 JMeter
bin目录运行以下命令,在每个从属节点上启动 JMeter 服务器:
jmeter-server
- 在主计算机上创建测试计划,就像进行本地测试一样。
- 从主机上启动分布式测试,使用 GUI 模式进行配置,然后使用 CLI 模式执行,以节省资源。使用
-R选项指定远程主机,或使用-r选项来使用remote_hosts属性中列出的主机。
jmeter -n -t my_test_plan.jmx -r
- 实时监控测试或等待其完成。收集并分析来自主机的结果,主机将聚合来自所有从节点的数据。
在 JMeter 中编写脚本的最佳实践是什么?
在 JMeter 中编写脚本时,请遵循以下最佳实践以确保高效且可维护的测试:
- 使用命名约定:清楚地命名您的测试元素以反映其目的,使脚本更易于理解和维护。
- 模块化您的测试:使用测试片段将您的测试计划 分解为逻辑模块,这些模块可以在不同的测试计划 之间重复使用。
- 参数化输入:使用 CSV 数据集配置或用户定义变量外部化test data,使测试更加灵活和数据驱动。
- 添加断言:使用断言验证响应,以确保您的应用程序返回 expected results。
- 侦听器的有效使用:侦听器可能会消耗大量内存。谨慎使用它们并在负载测试期间禁用它们以节省资源。
- 关联:通过从响应中提取数据并在后续请求中重用来处理会话 ID 等动态数据。
- 思考时间:通过在请求之间添加适当的计时器来模拟真实的用户行为。
- 错误处理:实施正确的错误处理和日志记录以快速识别问题。
- 避免不必要的采样器:仅使用测试所需的采样器,以避免混乱并减少资源使用。
- 使用JMeter 函数和变量:利用内置函数和变量来增强您的测试脚本,而无需硬编码值。
- 脚本版本控制:在版本控制系统中维护您的测试脚本,以跟踪更改并与其他人协作。
- 正则表达式:明智地使用正则表达式从响应中提取数据,但要注意它们的性能影响。
- 优化线程组:根据您的测试需求配置线程组,避免被测系统或JMeter主机过载。 通过遵循这些实践,您将创建健壮、可扩展且可维护的 JMeter 脚本,这些脚本可以有效地模拟用户行为并测量应用程序的性能。
如何将 JMeter 与其他测试工具集成?
将JMeter 与其他测试工具集成可以通过将性能测试 与其他类型的测试相结合来增强您的测试自动化 套件。以下是实现这一目标的方法: 持续集成 (CI) 工具: 使用性能插件将 JMeter 与 Jenkins 等 CI 工具集成。从 Jenkins 作业触发 JMeter 测试并收集结果以进行趋势分析和报告。
# Example: Execute JMeter test plan in Jenkins job
jmeter -n -t my_test_plan.jmx -l results.jtl
功能测试 工具: 将JMeter 与Selenium 结合起来进行全面的端到端测试。使用JMeter 表示负载测试,使用Selenium 实现功能自动化。在测试框架内按顺序或并行运行它们。 监控工具: 将 JMeter 与 Grafana 或 Prometheus 等监控工具链接,以实时可视化性能数据。使用JMeter 的后端侦听器将测试指标发送到这些工具。
<!-- Example: Add Backend Listener to JMeter test plan -->
<BackendListener guiclass="BackendListenerGui" testclass="BackendListener" testname="Backend Listener" enabled="true">
<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="influxdbMetricsSender" elementType="Argument">
<stringProp name="Argument.name">influxdbMetricsSender</stringProp>
<stringProp name="Argument.value">org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender</stringProp>
</elementProp>
<!-- Additional configuration -->
</collectionProp>
</elementProp>
</BackendListener>
API Testing 工具: 对于API testing,将JMeter 与Postman 或 SoapUI 等工具集成。使用JMeter 来实现负载测试 APIs 并使用其他工具来实现功能@@PROTECTED_7@@。 代码质量工具: 通过将测试结果转换为与这些平台兼容的格式,将 JMeter 测试合并到 SonarQube 等代码质量平台中。 云服务: 利用 BlazeMeter 等云服务实现可扩展的 JMeter test execution。将JMeter脚本导入 BlazeMeter 并利用云资源进行大规模性能测试。 通过将 JMeter 与这些工具集成,您可以创建一个强大的、多方面的 测试自动化 环境来满足各种测试需求。
JMeter 有哪些限制以及如何克服它们?
JMeter 虽然对于 性能测试 来说很强大,但也有局限性:
jmeter -n -t testplan.jmx -l testresults.jtl
-
实时监控:JMeter 不提供实时性能监控。与 Grafana 和 InfluxDB 等外部监控工具集成,实时可视化测试结果。
-
资源密集型:JMeter 可能会占用大量资源,尤其是在模拟大量用户时。为了克服这个问题,请将负载分布到集群中的多个JMeter 实例或计算机上。
- 有限的浏览器模拟:JMeter 不会像真实浏览器一样执行 JavaScript 或渲染 HTML。使用 Selenium 集成进行更准确的浏览器级用户模拟或考虑无头浏览器测试工具。
- 脚本编写的复杂性:JMeter 中的高级脚本编写需要 Java 或 BeanShell 知识,这可能是一个障碍。使用JMeter GUI 进行测试创建,并仅在必要时才使用脚本。此外,利用社区插件来扩展功能。
- UI 响应性:JMeter GUI 在重负载测试期间可能会变得无响应。使用命令行在非 GUI 模式下运行测试,以减少资源消耗并提高性能。
- 实时监控:JMeter 不提供实时性能监控。与 Grafana 和 InfluxDB 等外部监控工具集成,实时可视化测试结果。
- 移动应用程序测试:JMeter 并非专为移动应用程序测试而设计。使用第三方库或服务将 JMeter 的功能扩展到移动设备,或使用专门的移动测试工具。
- 有限协议支持:JMeter 主要支持 HTTP/HTTPS 协议。为了测试其他协议,您可能需要查找插件或使用更适合这些协议的其他工具。
如何使用 JMeter 进行 Web 服务的性能测试?
要将 JMeter 用于 Web 服务的 性能测试,请按照以下步骤操作:
- 通过在菜单上选择
Test Plan来创建新的测试计划,然后右键单击并选择Add>Threads (Users)>Thread Group。 - 配置线程组,包括测试的线程(用户)数量、启动周期和循环计数。
- 将采样器添加到线程组,方法是右键单击它并导航到
Add>Sampler>HTTP Request。使用 Web 服务的 URL 和请求类型(GET、POST 等)配置 HTTP 请求。 - 设置 HTTP 请求默认值(可选),如果您有多个具有公共参数的 HTTP 请求,可以通过添加
Config Element>HTTP Request Defaults来减少冗余。 - 添加标头(如果需要),方法是右键单击 HTTP 请求并选择
Add>Config Element>HTTP Header Manager。输入必要的标头,例如Content-Type或Authorization。 - 添加监听器 通过右键单击线程组并选择
Add>Listener来查看结果。常见的侦听器是View Results Tree和Summary Report。 - 参数化请求 使用
CSV Data Set Config来测试不同的数据集。 - 通过单击工具栏上的
Start按钮运行测试。 - 使用所选侦听器分析结果,以了解 Web 服务在负载下的性能。
- 保存测试计划以供将来使用或修改。 请记住通过单个用户运行来验证您的测试,以确保它在扩展之前按预期工作。根据 Web 服务的预期负载和性能目标调整配置。