性能测试工具 — JMeter

一、JMeter准备工作

1、JMeter介绍

Apache JMeter 应用程序是开源软件,是一个 100% 纯 Java 应用程序。用于测试Web应用程序、API和其他网络协议的性能。它具有以下特点:

1. 开源免费:JMeter是Apache软件基金会下的一个开源项目,它被称为Apache JMeter。

2. 基于Java开发:JMeter是基于Java开发的工具,因此在使用JMeter之前,需要确保已经安装了JDK 1.8或更高版本。

3. 跨平台:JMeter是一个跨平台的工具,可以在Windows和Linux等操作系统上运行。

4. 支持多种协议:JMeter支持测试多种网络协议,包括HTTP、HTTPS、FTP、SOAP、REST、JDBC等,使其适用于各种类型的应用程序和服务。

5. 插件生态系统:JMeter具有丰富的插件生态系统,可以根据需要安装和使用额外的监听器、采样器、断言和其他实用工具,扩展其功能和测试能力。

6. 分布式测试:JMeter支持分布式测试,可以将负载分散到多台机器上,以模拟更大规模的并发用户,提供更准确和可扩展的性能测试结果。

2、下载安装JMeter

下载地址:Apache JMeter - Download Apache JMeter

在下载JMeter文件时,"Binaries"和"Source"是两个不同的选项,它们之间有一些区别:

  1. Binaries(二进制文件):这是已经编译和构建好的JMeter可执行文件。如果你只是想使用JMeter进行性能测试,那么推荐下载二进制文件。
  2. Source(源代码):这是以Java编写的JMeter源代码文件。如果你要对JMeter进行二次开发,那么下载源代码是一个好的选择

Apache JMeter二进制文件提供两种下载类型:".zip" 和 ".tgz",您可以根据您的操作系统选择相应的文件:

  1. 如果您使用的是Windows操作系统,您可以下载并使用"apache-jmeter-5.6.2.zip"文件。
  2. 如果您使用的是Unix/Linux 操作系统,您可以下载并使用"apache-jmeter-5.6.2.tgz"文件。

由于我要在window系统使用jmeter,这里我下载的是"apache-jmeter-5.6.2.tgz"文件:apache-jmeter-5.6.2.zip

3、JMeter运行模式

JMeter提供两种运行模式:GUI模式和CLI模式。

GUI模式(图形用户界面模式):JMeter的默认模式。在GUI模式下,您可以使用JMeter的图形界面创建、配置和运行性能测试计划。通过可视化的界面,您可以添加测试元素、设置参数、运行测试并查看实时结果。这种模式适合于交互式地创建和编辑测试计划,以及进行实时监控和分析测试结果。

CLI模式(命令行界面模式):是在命令行下运行JMeter的模式。通过CLI模式,您可以使用命令行选项来配置和运行JMeter,而无需使用图形界面。CLI模式适合于在服务器环境下运行测试,或者用于自动化测试脚本。您可以使用命令行选项来指定测试计划文件、结果输出文件、线程数等参数,以及设置其他运行选项。

4、GUI模式启动JMeter

要启动 JMeter需要先部署jdk1.8环境,详见:JDK和JRE的区别和环境变量配置

GUI模式有两种方式来启动JMeter:通过ApacheJMeter.jar文件和jmeter.bat批处理脚本文件。

启动JMeter步骤如下:

1.对 "apache-jmeter-5.6.2.zip" 压缩文件进行解压缩。

2.然后进入解压缩后的 bin目录。

3.双击ApacheJMeter.jar文件/jmeter.bat批处理脚本文件,启动JMeter

5、JMeter中文汉法

启动jmeter很容易发现显示的是英文环境,也可以通过设置来显示为中文。

方法1:Options --> Choose Language --> Chinese

注意:这种方法设置的只能在当前界面生效,下次启动jmeter仍是默认为英文。

方法2:\apache-jmeter-5.4.1\bin\ 目录下修改 jmeter.properties文件,设置默认语言为language=zh_CN

再次启动jmeter发现显示的是中文了。

二、测试计划元素组件

JMeter测试计划通常包含以下几个主要的元素组件:

  • 线程组(Thread Group):线程组定义了测试中要模拟的用户数量、循环次数和启动延迟等参数。它是测试计划中最基本的元素,其他组件都是在线程组的上下文中执行。
  • 取样器(Sampler):取样器用于发送请求并模拟用户与被测试应用程序之间的交互。它可以发送不同类型的请求,如HTTP请求、FTP请求、数据库请求等。
  • 逻辑控制器(Logic Controller):逻辑控制器用于定义测试脚本的逻辑流程和执行顺序。
  • 配置元件(Config Element):配置元件用于设置请求的参数或处理测试环境的特定设置。例如,HTTP Cookie管理器用于处理HTTP请求中的Cookie,HTTP Header管理器用于设置HTTP请求的头信息。
  • 断言(Assertion):断言用于验证服务器响应是否符合预期。可以检查响应的内容、响应时间、响应代码等。
  • 监听器(Listener):监听器用于收集和显示测试结果。它可以以不同的形式展示结果,如表格、图表、树形结构等。
  • 定时器(Timer):定时器用于模拟用户之间的间隔时间。可以设置固定延迟、随机延迟或根据特定算法生成延迟时间。
  • 前置处理器(Pre-Processor):前置处理器在每个取样器之前执行,可以对请求进行修改或设置一些前置条件。
  • 后置处理器(Post-Processor):后置处理器在每个取样器之后执行,用于处理服务器的响应结果。可以提取关键信息、对响应进行断言或转换等操作。

这些元素组件可以根据测试需求进行组合和配置,以构建完整的JMeter测试计划。

选中测试计划,鼠标右键查看可以添加的组件信息。

详见:Apache JMeter - User's Manual: Elements of a Test Plan

1、线程组(Thread Group)

线程组(Thread Group)是JMeter中的一个重要组件,用于模拟并发用户的行为。它定义了测试计划中的线程数量、循环次数、启动延迟等参数,控制着测试的并发程度和持续时间。在JMeter中,线程组是测试计划的起点,所有的其他组件和操作都是在线程组之下进行配置。线程组可以包含多个线程(或称为虚拟用户),每个线程代表一个并发用户,模拟真实用户对被测系统的请求和操作。

线程组的主要属性包括:

  • 线程数(Number of Threads):定义了模拟的并发用户数。
  • 启动延迟(Ramp-Up Period):定义了所有线程启动之间的时间间隔。例如,如果设置为5秒,并发用户数为10,那么每秒将启动2个线程,直到达到总共的10个线程。
  • 循环次数(Loop Count):定义了每个线程要执行的循环次数,可以设置为具体的次数或设置为永远循环。
  • 延迟启动(Scheduler):可以设置线程组的启动和停止时间,用于模拟特定的业务负载情况。
  • 调度器配置(Scheduler Configuration):用于设置线程组的启动和停止时间,可以按照特定的时间表进行配置。

通过合理配置线程组和其他组件,可以模拟出各种复杂的测试场景,如高并发、持续负载、压力测试等,以评估被测系统的性能和稳定性。

线程组配置页面如下:

需要特别注意的是:

Ramp-Up时间要根据测试需求和目标来进行选择。可以从 Ramp-up = 线程数开始,然后根据需要向上或向下调整。如果你有大量的并发用户,可以选择较短的 Ramp-Up 时间,例如线程数的一半或四分之一,以快速达到高峰负载。如果你希望逐渐增加用户并观察系统在不同负载下的性能表现,可以选择较长的 Ramp-Up 时间,例如线程数的两倍或更多。

2、取样器(Sampler)

取样器(Sampler)是Apache JMeter中的一个组件,用于模拟不同类型的请求并生成负载。取样器用于发送请求并收集响应,以评估系统的性能和可靠性。

Apache JMeter提供了多种类型的取样器,包括但不限于以下几种:

1. HTTP请求:用于发送HTTP或HTTPS请求,并获取服务器的响应。
2. FTP请求:用于模拟FTP操作,如上传和下载文件。
3. JDBC请求:用于执行数据库查询和更新操作。
4. SMTP请求:用于发送电子邮件。
5. Shell命令:用于在远程服务器上执行Shell命令。
6. BeanShell Sampler:使用BeanShell脚本编写自定义逻辑。

你可以根据具体的测试需求选择适当的取样器,并配置其参数以模拟所需的请求。每个取样器都可以独立设置请求的参数,如URL、请求方法、请求头、请求体等。

注意,在进行负载测试时,应根据实际情况选择适当的取样器类型,并配置合理的并发用户数、循环次数、请求间隔等参数,以模拟真实的负载情况。

添加取样器页面如下:

详见:Apache JMeter - User's Manual: Component Reference

3、逻辑控制器(Logic Controller)

逻辑控制器(Logic Controller)是Apache JMeter中的一个组件,用于定义测试计划中请求的执行顺序和逻辑流程。它决定了在测试中如何组织和控制请求的发送和处理。

逻辑控制器可以根据不同的条件和规则来控制请求的执行流程,包括但不限于以下几种类型:

1. If Controller:根据条件判断是否执行包含的请求。
2. While Controller:在满足条件的情况下,重复执行包含的请求。
3. Loop Controller:指定请求的循环执行次数。
4. Transaction Controller:将多个请求分组为一个事务,并对事务的执行进行计时和统计。
5. Switch Controller:根据条件匹配选择执行某个分支的请求。
6. Random Controller:随机选择执行其中的一个请求。
7. Throughput Controller:根据一定的百分比或计数来控制请求的执行频率。

通过合理使用逻辑控制器,你可以定义测试计划中请求的执行流程,模拟用户的行为和交互。这样可以更精确地测试应用程序在不同场景下的性能和响应情况。

请根据你的具体测试需求,选择适当的逻辑控制器,并在测试计划中配置其参数和子元素,以实现所需的测试逻辑。

添加逻辑控制器页面如下:

详见:Apache JMeter - User's Manual: Component Reference

4、配置元件(Config Element)

配置元件(Config Element)是JMeter中的一类组件,用于配置和管理测试计划的全局参数和设置。它们对整个测试计划起着关键的作用,可以影响测试的行为和结果。

JMeter提供了多种配置元件,常用的包括:

1. CSV数据文件配置器(CSV Data Set Config):用于从CSV文件中读取测试数据,可以在测试中使用这些数据参数化请求。

2. HTTP Cookie管理器(HTTP Cookie Manager):用于管理HTTP请求中的Cookie,可以自动处理服务器返回的Cookie,并在后续请求中发送。

3. HTTP缓存管理器(HTTP Cache Manager):用于模拟浏览器的缓存行为,可以缓存服务器响应,减少重复的请求。

4. 用户定义的变量(User Defined Variables):用于定义自定义的变量,可以在测试计划中引用这些变量,实现参数化和动态配置。

5. Keystore配置元件(Keystore Configuration):用于配置SSL/TLS连接所需的密钥库和信任库,以进行安全的HTTPS请求。

配置元件可以通过在测试计划中添加相应的配置元件组件来进行配置。它们可以被多个线程组和取样器共享,确保全局参数和设置的一致性。

通过合理配置配置元件,可以灵活地管理测试计划的各种参数和设置,从而满足不同测试场景的需求,并确保测试的准确性和可靠性。

添加配置元件页面如下:

详见:Apache JMeter - User's Manual: Component Reference

5、断言(Assertion)

断言(Assertion)是JMeter中的一类组件,用于验证服务器响应是否符合预期。通过添加断言组件,可以对响应数据进行检查,以确保系统在测试期间的行为符合预期。

JMeter提供了多种类型的断言,常见的包括:

1. 响应断言(Response Assertion):用于检查服务器响应的内容。可以使用不同的模式(包括文本、正则表达式、响应代码等)来指定预期的响应内容,并根据实际响应进行比较。

2. 时间断言(Duration Assertion):用于检查请求的响应时间是否在预期范围内。可以设置最大响应时间和最小响应时间,如果实际响应时间超出设置的范围,则断言失败。

3. 大小断言(Size Assertion):用于检查响应数据的大小是否符合预期。可以设置最大大小和最小大小来验证响应数据的长度,如果数据大小不符合设置的范围,则断言失败。

断言可以与请求组件或其他后置处理器组件一起使用,以便在请求发送后对响应进行验证。可以根据具体需求选择合适的断言类型,并设置相应的参数,以实现对响应的验证操作。

需要注意的是,断言的设置对测试结果会产生一定的影响。如果断言设置不当或断言条件过于严格,可能会导致测试结果中出现误报或漏报的情况。因此,在进行性能测试时,需要根据实际情况选择适当的断言类型和设置合理的断言条件,以准确地验证响应是否符合预期。

添加断言页面:

详见:Apache JMeter - User's Manual: Component Reference

6、监听器(Listener)

监听器(Listener)是JMeter中的一类组件,用于收集和展示测试执行期间产生的结果数据。它们可以用于监控和分析测试结果,帮助我们评估被测系统的性能和稳定性。

JMeter提供了多种监听器,常用的包括:

1. 查看结果树(View Results Tree):以树形结构展示每个请求的详细结果,包括请求和响应的信息、断言结果、响应时间等。

2. 聚合报告(Aggregate Report):以表格形式展示每个请求的汇总数据,包括请求次数、平均响应时间、错误率等。

3. 总结报告(Summary Report):以表格形式展示整个测试计划的汇总数据,包括总请求次数、平均响应时间、吞吐量等。

4. 监控结果(Monitor Results):实时展示服务器的监控数据,如CPU使用率、内存占用等,用于监测服务器的性能指标。

5. 聚合图表(Aggregate Graph):以图表形式展示每个请求的汇总数据,如响应时间分布、吞吐量变化等。

监听器可以通过在测试计划中添加相应的监听器组件来进行配置。可以根据具体的需求选择合适的监听器,对测试结果进行实时监控和分析,以便及时发现性能问题和瓶颈,并进行优化和改进。

需要注意的是,监听器会消耗一定的系统资源,特别是在测试执行期间产生大量数据时。因此,在进行性能测试时,建议在必要的情况下使用监听器,并合理选择监听器的输出数据量,以避免对测试结果产生额外的影响。

添加监听器页面如下:

详见:Apache JMeter - User's Manual: Component Reference

7、定时器(Timer)

定时器(Timer)是JMeter中的一类组件,用于模拟多个用户在一段时间内的并发请求。它们可以控制测试计划中请求的发送时间间隔,以模拟真实场景下的用户行为。

JMeter提供了多种定时器,常用的包括:

1. 固定定时器(Constant Timer):在每个请求之间固定等待一段时间后发送下一个请求。

2. 随机定时器(Random Timer):在每个请求之间随机等待一段时间后发送下一个请求,可以模拟用户的不规律操作。

3. 高斯随机定时器(Gaussian Random Timer):根据高斯分布在每个请求之间随机等待一段时间后发送下一个请求,可以模拟用户的更自然的操作。

4. 恒定定时器(Constant Throughput Timer):根据设定的吞吐量目标,在每个请求之间动态计算等待时间,以达到目标吞吐量。

定时器可以通过在测试计划中添加相应的定时器组件来进行配置。可以根据需求选择合适的定时器,并调整等待时间,以模拟真实用户的行为模式。

需要注意的是,定时器的设置对测试结果会产生一定的影响。如果定时器设置过长或过短,可能会导致测试结果不准确。因此,在进行性能测试时,需要根据实际场景和需求合理配置定时器,以获取准确的测试结果。

添加定时器页面如下:

详见:Apache JMeter - User's Manual: Component Reference

8、前置处理器(Pre-Processor)

前置处理器(Pre-Processor)是JMeter中的一类组件,用于在发送请求之前对请求进行一些预处理操作。它们可以在每个请求执行之前修改请求参数、添加额外的信息或执行其他必要的操作。

JMeter提供了多种前置处理器,常用的包括:

1. 用户参数(User Parameters):允许在每个线程中定义用户参数,可以在请求中动态地设置参数值。

2. 正则表达式提取器(Regular Expression Extractor):通过正则表达式从响应数据中提取特定的信息,并将其保存到变量中,以便在后续的请求中使用。

3. JSR223前置处理器(JSR223 PreProcessor):使用JSR223脚本语言(如Groovy、JavaScript、BeanShell等)编写脚本,在请求执行之前执行自定义的操作。

4. CSV数据集配置元件(CSV Data Set Config):从CSV文件中读取数据,并将数据逐行分配给每个线程,以便在请求中使用。

前置处理器可以通过在测试计划中添加相应的前置处理器组件来进行配置。可以根据具体需求选择合适的前置处理器,并设置相应的参数,以实现对请求的预处理操作。

需要注意的是,前置处理器的设置对测试结果会产生一定的影响。如果前置处理器设置不当或执行的操作过于复杂,可能会导致测试结果不准确或性能下降。因此,在进行性能测试时,需要谨慎选择和配置前置处理器,确保其能够正确地模拟实际场景和预期行为。

添加前置处理器页面如下:

详见:Apache JMeter - User's Manual: Component Reference

9、后置处理器(Post-Processor)

后置处理器(Post-Processor)是JMeter中的一类组件,用于在接收到响应后对响应进行处理。它们可以从响应中提取信息、对响应数据进行处理或执行其他必要的操作。

JMeter提供了多种后置处理器,常用的包括:

1. 正则表达式提取器(Regular Expression Extractor):通过正则表达式从响应数据中提取特定的信息,并将其保存到变量中,以便在后续的请求中使用。

2. JSON提取器(JSON Extractor):从JSON格式的响应中提取特定的数据,并将其保存到变量中,以便在后续的请求中使用。

3. JSR223后置处理器(JSR223 PostProcessor):使用JSR223脚本语言(如Groovy、JavaScript、BeanShell等)编写脚本,在接收到响应后执行自定义的操作。

4. BeanShell后置处理器(BeanShell PostProcessor):使用BeanShell脚本语言编写脚本,在接收到响应后执行自定义的操作。

后置处理器可以通过在测试计划中添加相应的后置处理器组件来进行配置。可以根据具体需求选择合适的后置处理器,并设置相应的参数,以实现对响应的处理操作。

需要注意的是,后置处理器的设置对测试结果会产生一定的影响。如果后置处理器设置不当或执行的操作过于复杂,可能会导致测试结果不准确或性能下降。因此,在进行性能测试时,需要谨慎选择和配置后置处理器,确保其能够正确地处理响应数据和达到预期的效果。

添加后置处理器页面:

详见:https://jmeter.apache.org/usermanual/component_reference.html#postprocessors 

三、制定测试计划

JMeter 是一个功能强大的性能测试工具,用于测试 Web 应用程序、接口和其他类型的服务。要制定测试计划,可以按照以下步骤进行操作:

1. 打开 JMeter:启动 JMeter 工具。

2. 创建线程组:在测试计划中,右键单击,选择 "Add" -> "Threads (Users)" -> "Thread Group"。线程组定义了测试的并发用户数和循环次数。

3. 配置线程组:在线程组上右键单击,选择 "Add" -> -> "Sampler" -> "HTTP Request"。可以根据需要添加其他类型的 Sampler。HTTP Request Sampler 用于发送 HTTP 请求。

4. 配置 HTTP 请求:在 HTTP 请求中,可以设置目标服务器的 URL、请求方法(GET、POST 等)、参数、请求头等。

5. 添加监听器(可选):在线程组上右键单击,选择 "Add" -> "Listener",可以添加监听器来收集和分析测试结果。常用的监听器包括 "View Results Tree"、"Summary Report"、"Aggregate Report" 等。

6. 配置全局设置(可选):在测试计划上右键单击,选择 "Add" -> "Config Element",可以添加全局配置元素,如 HTTP Cookie 管理器、HTTP Header 管理器等。

7. 设置测试计划属性:在测试计划上右键单击,选择 "Add" -> "Config Element" -> "HTTP Request Defaults",可以设置默认的 HTTP 请求属性,如服务器域名、端口号等。

8. 配置其他元素(可选):根据需要,可以添加其他配置元素和逻辑控制器来完善测试计划,如 CSV 数据文件配置元素、循环控制器等。

9. 运行测试计划:点击工具栏上的 "Start" 按钮或使用快捷键 Ctrl+R 来运行测试计划。

10. 查看测试结果:在测试运行结束后,可以通过监听器或查看日志文件来查看测试结果和性能指标。

这只是一个简单的步骤示例,JMeter 提供了丰富的功能和灵活的配置选项,可以根据具体的测试需求进行更高级的设置和定制。建议在使用 JMeter 进行测试之前,详细阅读 JMeter 的官方文档以及相关教程,以充分了解其功能和使用方法。


reference:

Apache JMeter - User's Manual

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值