【Jmeter之各组件用处和使用方法-Component reference】

目录

一、JMeter 简介

(一)什么是 JMeter

Apache JMeter™ 应用程序是开源软件,是一款 100% 纯 Java 应用程序,旨在对功能行为进行负载测试并测量性能。 它最初是为测试 Web 应用程序而设计的,但后来扩展到其他测试功能。

(二)JMeter 的应用场景

JMeter 可用于测试 static 和 dynamicresources、Web 动态应用程序的性能。
它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。

二、 JMeter 环境搭建

(一)系统要求与安装前准备

支持Mac、Linux、Windows;
需要先安装Jdk;建议1.8以上

(二)下载与安装步骤

参照我的文档
密码: 2#8181Z8

(三)启动与初始界面介绍

进入你解压的目录,进入/bin目录
打开jmeter.bat
自己的安装目录
弹出的cmd窗口不要关,关了,jmeter也关了。
打开后的窗口:默认英文,可以单次改或者永久改动。jmeter改中文教程
在这里插入图片描述

三、JMeter 核心组件剖析

(一)线程组

线程组的概念与作用

线程组是 JMeter 中用于模拟并发用户的核心组件。它可以控制多个线程同时执行测试任务,以模拟真实场景下的多用户操作。例如,在对一个网站进行压力测试时,通过设置线程组的参数,可以确定同时访问网站的用户数量、每个用户的操作次数等,从而评估系统在不同负载情况下的性能表现。

线程数、循环次数等参数设置详解

  • 线程数:即模拟的并发用户数量。例如,设置线程数为 100,表示同时有 100 个虚拟用户在执行测试操作。如果线程数设置过低,可能无法充分测试系统在高负载下的性能;而设置过高,可能会超出系统资源限制,导致测试结果不准确甚至系统崩溃。
  • 循环次数:每个线程执行测试任务的循环次数。比如设置循环次数为 5,则每个线程会重复执行测试计划 5 次。这可以用于控制测试的持续时间和操作频率,对于一些需要多次重复操作才能暴露性能问题的场景非常有用。

(二)取样器(Sampler)

HTTP 请求取样器

(1)URL、请求方法、请求头设置
  • URL:指定要请求的目标网址。例如,http://www.example.com/api,这是向指定的服务器地址和 API 端点发送请求的关键信息。
  • 请求方法:常见的有 GET、POST、PUT、DELETE 等。GET 方法通常用于获取数据,如查询数据库中的记录并返回结果;POST 方法用于向服务器提交数据,如用户注册时提交表单数据;PUT 方法用于更新数据;DELETE 方法用于删除数据。
  • 请求头设置:请求头可以包含各种信息,如User-Agent用于标识客户端信息,Content-Type用于指定请求数据的格式。例如,设置Content-Type: application/json表示请求的数据是 JSON 格式。
(2)参数传递与文件上传设置
  • 参数传递:对于 GET 请求,可以直接在 URL 后面添加参数,如http://www.example.com/api?param1=value1&param2=value2。对于 POST 请求,可以在请求体中设置参数,在 JMeter 中可以通过参数面板添加参数名和值。
  • 文件上传设置:在需要上传文件的场景下,如上传图片到服务器,可以在 HTTP 请求取样器中配置文件上传相关参数,包括要上传的文件路径、文件参数名等。

其他常见取样器(如 JDBC 请求等)介绍与使用场景

  • JDBC 请求取样器:用于与数据库进行交互。例如,可以执行 SQL 查询语句从数据库中获取数据,或者执行插入、更新、删除语句修改数据库内容。在测试涉及数据库操作的应用程序时非常有用,如测试一个电商系统中订单数据的查询和处理功能,通过 JDBC 请求取样器可以模拟用户对数据库的操作,检查系统在数据库层面的性能和正确性。

(三)监听器(Listener)

查看结果树

(1)如何解读请求结果(响应码、响应数据等)
  • 响应码:常见的如 200 表示请求成功,404 表示页面未找到,500 表示服务器内部错误等。通过查看响应码可以快速判断请求是否成功以及大致了解服务器的处理状态。
  • 响应数据:包含服务器返回的实际数据内容。对于 HTML 页面请求,会显示页面的 HTML 代码;对于 JSON 数据请求,会显示 JSON 格式的数据。通过分析响应数据可以检查请求是否返回了预期的结果,例如在测试一个查询接口时,查看响应数据中的查询结果是否正确。
(2)筛选与查找特定请求结果

在查看结果树中,可以通过设置过滤器来筛选特定的请求结果。例如,可以根据请求的 URL、响应码、线程组等条件进行筛选,以便快速定位和查看需要关注的请求结果。

汇总报告

(1)关键性能指标(如平均响应时间、吞吐量等)含义
  • 平均响应时间:所有请求的响应时间的平均值。它反映了系统处理请求的平均速度,例如平均响应时间为 500 毫秒,表示系统平均需要 500 毫秒来处理一个请求。如果平均响应时间过长,可能会影响用户体验。
  • 吞吐量:单位时间内系统处理的请求数量。例如,吞吐量为 100 次/秒,表示系统每秒可以处理 100 个请求。吞吐量可以反映系统的处理能力和效率,吞吐量越高,系统在单位时间内处理的请求越多,性能越好。
(2)如何根据汇总报告评估性能

通过对比不同测试场景下的汇总报告中的关键性能指标,可以评估系统在不同条件下的性能变化。例如,在增加线程数(模拟更多用户)后,如果平均响应时间明显增加,吞吐量下降,可能说明系统在高负载下出现性能瓶颈,需要进一步分析和优化。

(四)配置元件

CSV 数据文件设置

(1)数据文件格式与准备

CSV 数据文件是一种以逗号分隔值的文本文件格式。每一行代表一组数据,列与列之间用逗号隔开。在准备数据文件时,需要根据测试需求确定要使用的数据列和行数。例如,在测试用户登录功能时,可以准备一个 CSV 文件,包含用户名和密码两列数据,每行对应一组用户名和密码组合。

(2)在测试中如何引用数据实现参数化

在 JMeter 中,可以通过 CSV 数据文件设置元件来配置数据文件路径和相关参数。然后在需要使用数据的地方,如 HTTP 请求取样器的参数中,使用变量来引用 CSV 文件中的数据。例如,将用户名参数设置为${username},密码参数设置为${password},JMeter 会在测试过程中逐行读取 CSV 文件中的数据,并将其赋值给相应的变量,从而实现参数化测试,模拟不同用户的登录操作。

HTTP 信息头管理器

(1)设置请求头的重要性

请求头可以向服务器传递额外的信息,影响服务器对请求的处理方式。例如,设置正确的Accept请求头可以告诉服务器客户端期望接收的响应数据格式;设置Authorization请求头可以进行身份验证,使服务器能够识别请求的用户身份并提供相应的权限控制。

(2)常见请求头字段与设置示例
  • User-Agent:用于标识客户端类型和版本信息。例如,设置User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36,表示请求来自 Chrome 浏览器。
  • Content-Type:如前面所述,用于指定请求数据的格式。例如,在发送 JSON 数据时设置Content-Type: application/json

JDBC Connection Configuration -JDBC 连接配置

属性描述是否必填
name树中显示的连接配置的描述性名称。
Variable Name for created pool创建池的变量名称连接所绑定的变量的名称。可以使用多个连接,每个连接绑定到不同的变量,从而允许 JDBC 采样器选择适当的连接。(每个名称必须不同。如果有两个配置元素使用相同的名称,则只会保存一个。如果检测到重复的名称,JMeter 会记录一条消息。)
Max Number of Connections 最大连接数池中允许的最大连接数。在大多数情况下,将其设置为零 (0)。这意味着每个线程将获得自己的池,其中只有一个连接,即连接不在线程之间共享。如果您确实想使用共享池(为什么?),则将最大计数设置为与线程数相同,以确保线程不会相互等待。
Max Wait (ms)最大等待时间(毫秒)如果在尝试检索连接的过程中超出超时期限,则池会抛出错误,请参阅
Time Between Eviction Runs (ms)驱逐运行间隔时间(毫秒)空闲对象清除线程运行间隔的休眠毫秒数。如果为非正数,则不会运行空闲对象清除线程。(默认为“ 60000 ”,1 分钟)。请参阅
Auto Commit 自动提交打开或关闭连接的自动提交。默认True
Transaction isolation 事务隔离事务隔离级别在这里插入图片描述
Pool Prepared Statements 池准备语句每个连接池中准备语句的最大数量。“-1 ”表示禁用池,“ 0 ”表示池中准备语句的数量不受限制。(默认为“ -1 ”)
Preinit Pool预初始化池连接池可以立即初始化。如果设置为False(默认),使用此池的 JDBC 请求采样器可能会测量到第一次查询的响应时间更长 - 因为包含了整个池的连接建立时间。
Init SQL statements separated by new line 以新行分隔的初始化 SQL 语句一组 SQL 语句,用于在首次创建物理连接时对其进行初始化。这些语句仅执行一次 - 当配置的连接工厂创建连接时。
Test While Idle测试池的空闲连接,请参阅BasicDataSource.html#getTestWhileIdle。将使用验证查询对其进行测试。
Soft Min Evictable Idle Time(ms) 软最小可驱逐空闲时间(毫秒)连接在池中闲置的最短时间,超过此时间后,空闲对象驱逐器才可将其驱逐,但有一个额外条件,即池中至少保留minIdle个连接。请参阅BasicDataSource.html#getSoftMinEvictableIdleTimeMillis。默认为 5000(5 秒)
Validation Query 验证查询用于确定数据库是否仍在响应的简单查询。默认为 jdbc 驱动程序的“ isValid() ”方法,该方法适用于许多数据库。但是有些可能需要不同的查询;例如,Oracle可以使用 类似“ SELECT 1 FROM DUAL ”的查询。
Database URL 数据库 URL数据库的 JDBC 连接字符串。mysql示例:jdbc:<数据库类型>://<主机名>:<端口号>/<数据库名>
JDBC Driver class JDBC 驱动类驱动程序类的完全限定名称。(必须位于 JMeter 的类路径中 - 最简单的方法是将.jar文件复制到 JMeter 的/lib目录中)。mysql示例(前提已经把.jar添加到了JMeter 的/lib目录):选择com.mysql.jdbc.Driver
Username 用户名连接时所用用户名。
Password 密码连接密码。(注意:该密码在测试计划中以未加密形式存储)
Connection Properties 连接属性建立连接时设置的连接属性(例如Oracle 的 internal_logon=sysdba )

不同的数据库和 JDBC 驱动程序需要不同的 JDBC 设置。数据库 URL 和 JDBC 驱动程序类由 JDBC 实现的提供商定义。
Jmeter连接数据库步骤
🧹添加JDBC驱动程序:将JDBC驱动程序(如:MySQL驱动程序)添加到JMeter的/lib目录下。

🧹 配置JDBC连接字符串:在JMeter中,使用JDBC Connection Configuration元件配置数据库连接信息,包括URL、用户名、密码等。

🧹 编写JDBC请求:使用JDBC Request元件编写SQL语句,并在JMeter中执行。

🧹 添加JDBC预处理语句:在JMeter中,使用JDBC PreProcessor元件添加预处理语句,如:插入、更新等操作。

🧹 添加JDBC后置处理语句:在JMeter中,使用JDBC PostProcessor元件添加后置处理语句,如:查询、删除等操作。
数据库驱动包
Jmeter 连接 Mysql 数据库需安装对应的驱动包;

📩 下载地址:点击我
在这里插入图片描述
安装: 下载完成后解压放到Jmeter的 lib 下;在这里插入图片描述

通过以上步骤,可以在JMeter中使用JDBC接口连接数据库,执行SQL语句,以满足压力测试中的数据准备和清理需求。

四、JMeter 测试计划创建与执行

(一)创建第一个简单测试计划

需求分析与测试目标确定

在创建测试计划之前,首先需要明确测试的需求和目标。例如,测试一个电商网站的商品搜索功能,需求可能是验证搜索结果的准确性、搜索响应时间是否满足要求等。测试目标可以是在一定并发用户数量下,确保搜索功能的平均响应时间不超过 2 秒,搜索结果的准确率达到 95%以上。

逐步添加线程组、取样器、监听器构建计划

  • 添加线程组:根据需求确定线程数和循环次数,如设置线程组模拟 50 个用户,每个用户搜索 10 次商品。
  • 添加取样器:添加 HTTP 请求取样器,设置搜索接口的 URL、请求方法为 GET,并设置搜索关键词参数。
  • 添加监听器:添加查看结果树监听器用于查看每个搜索请求的详细结果,添加汇总报告监听器用于统计搜索功能的性能指标。

(二)测试计划的执行与监控

启动测试计划的操作步骤

在 JMeter 中,点击菜单栏中的“运行”按钮或者使用快捷键(如 Ctrl + R)即可启动测试计划。在启动之前,可以先保存测试计划,以便后续查看和修改。

实时监控测试执行状态(如进度条、日志信息等)

在测试执行过程中,JMeter 会显示进度条,表示测试的完成进度。同时,可以查看日志信息,了解测试过程中的详细情况,如请求的发送和接收情况、是否有错误发生等。如果发现异常情况,可以根据日志信息进行排查和处理。

五、JMeter 高级用法

(一)断言的使用

响应断言

(1)设置断言规则(如响应文本包含特定字符串等)

在响应断言中,可以设置多种断言规则。例如,设置断言检查响应文本是否包含特定的关键词,如在测试一个登录功能时,断言响应文本中包含“登录成功”字样,以确保登录操作正确执行。还可以设置断言检查响应头中的某些字段是否符合预期。

(2)断言失败后的处理与结果查看

当断言失败时,JMeter 会在测试结果中标记该请求为失败。可以在查看结果树监听器中查看断言失败的详细信息,包括请求的详细信息、响应数据以及断言失败的原因。在一些情况下,可以根据断言失败的信息进一步排查问题,如检查请求参数是否正确、服务器端代码是否存在逻辑错误等。

其他常见断言类型介绍

  • 持续时间断言:用于检查请求的响应时间是否在预期范围内。例如,设置持续时间断言为响应时间不超过 1 秒,如果某个请求的响应时间超过 1 秒,断言就会失败,提示可能存在性能问题。
  • 大小断言:可以检查响应数据的大小是否符合预期。例如,在下载文件的测试场景中,设置大小断言来确保下载的文件大小与预期一致,防止文件下载不完整或出现错误。

(二)参数化技巧

除 CSV 数据文件外的其他参数化方式(如用户自定义变量等)

  • 用户自定义变量:可以在测试计划中直接定义变量。例如,定义一个变量baseUrl,并赋值为http://www.example.com,然后在 HTTP 请求取样器的 URL 参数中使用${baseUrl}/api,这样如果需要更改基础 URL,只需要修改用户自定义变量的值,而不需要逐个修改取样器中的 URL 参数。
  • 函数助手:JMeter 提供了一些函数助手来生成动态参数。如__Random函数可以生成随机数,在测试需要随机数据的场景中非常有用,比如生成随机的订单号或者用户名。

多参数组合使用与场景示例

在实际测试中,常常需要多种参数化方式组合使用。例如,在测试一个社交网络应用的注册功能时,可以使用用户自定义变量设置基础的注册接口 URL,使用 CSV 数据文件设置不同的用户名、密码和邮箱组合,同时使用__Random函数生成随机的用户头像图片编号,以全面模拟不同用户的注册情况,提高测试的覆盖范围和有效性。

(三)关联的实现

正则表达式提取器

(1)正则表达式编写基础与示例

正则表达式是一种用于匹配文本模式的工具。在 JMeter 中,正则表达式提取器可以从响应数据中提取特定的值。例如,对于如下响应数据:<html><body>userid: 12345</body></html>,如果要提取用户 ID,可以使用正则表达式userid: (\d+),其中(\d+)表示匹配一个或多个数字,括号表示提取匹配的内容。

(2)提取的数据如何在后续请求中使用

提取到的数据可以通过变量的形式在后续请求中使用。例如,将提取到的用户 ID 存储在变量${userid}中,在后续的查询用户信息的请求中,将用户 ID 作为参数传递,如http://www.example.com/api/user/${userid}

XPath 提取器(适用于 XML 数据处理)

对于 XML 格式的响应数据,可以使用 XPath 提取器。例如,对于如下 XML 数据:<user><name>John</name><age>30</age></user>,如果要提取用户的名字,可以使用 XPath 表达式//user/name/text(),该表达式表示从根节点user下查找name节点,并获取其文本内容。提取到的名字可以同样通过变量在后续请求中使用。

(四)分布式测试

分布式测试的概念与优势

分布式测试是指利用多台计算机资源来执行 JMeter 测试计划。其优势在于可以模拟更大规模的并发用户,提高测试的负载能力。例如,单台计算机可能由于硬件资源限制,只能模拟 1000 个并发用户,而通过分布式测试,使用 10 台计算机,可以模拟 10000 个并发用户,更真实地测试系统在高负载下的性能表现。

分布式测试环境搭建步骤

  • 准备多台测试机器:确保各台机器之间网络连通,并且安装了相同版本的 JMeter 和 Java 环境。
  • 配置 JMeter 服务器:在每台作为服务器的机器上,修改 JMeter 的配置文件(jmeter.properties),设置server.rmi.ssl.disable=true(如果不需要 SSL 加密),并启动 JMeter 服务器(jmeter-server命令)。
  • 配置 JMeter 客户端:在作为客户端的机器上,修改 JMeter 的配置文件,设置remote_hosts参数为服务器机器的 IP 地址列表,用逗号分隔。

测试计划在分布式环境中的配置与执行

在客户端机器上,打开测试计划,在运行设置中选择“远程启动”,然后选择要启动的服务器机器。启动后,客户端会将测试计划分发到各个服务器机器上执行,并且汇总各台机器的测试结果。

六、JMeter 测试结果分析与报告生成

(一)深入分析测试结果数据

如何从多个监听器结果中综合判断性能瓶颈

通过查看不同监听器的结果,可以综合分析性能瓶颈。例如,查看结果树监听器中个别请求的响应时间过长,结合汇总报告监听器中的吞吐量数据,如果发现某个请求的响应时间长且吞吐量低,可能该请求对应的功能模块存在性能问题。再进一步查看该请求的详细信息,如请求参数、响应数据、服务器日志等,以确定具体的性能瓶颈原因,可能是数据库查询效率低、网络延迟高或者服务器资源不足等。

对比不同测试场景下的结果差异与原因分析

在进行多次不同条件下的测试后,对比测试结果差异。例如,对比不同并发用户数量下的测试结果,当并发用户数增加时,如果平均响应时间大幅增加,吞吐量急剧下降,可能是系统在高负载下出现了资源竞争或瓶颈。分析原因可能是服务器的 CPU、内存等资源耗尽,或者数据库连接池设置不合理等,根据分析结果可以针对性地进行优化和调整。

(二)生成专业的测试报告

使用 JMeter 自带的报告生成功能

JMeter 自带了一些报告生成工具。例如,可以使用jmeter -g [测试结果文件路径] -o [报告输出目录]命令来生成 HTML 格式的测试报告。在生成报告之前,需要先确保测试结果文件(如.jtl格式)存在,并且指定报告输出目录。生成的报告包含了测试的基本信息、性能指标统计、请求结果详情等内容,方便与团队成员或其他相关人员分享和交流测试结果。

自定义报告模板与内容添加

如果 JMeter 自带的报告不能满足需求,可以自定义报告模板。可以使用一些模板引擎(如 FreeMarker)结合 JMeter 的 API 来生成自定义报告。在自定义报告中,可以添加更多的分析内容,如性能瓶颈分析图表、与历史测试结果的对比分析等,使报告更具专业性和可读性。

七、JMeter 常见问题与故障排除

(一)连接错误(如数据库连接、HTTP 连接等)及解决方法

  • 数据库连接错误:如果出现数据库连接错误,首先检查数据库服务器是否启动,数据库服务的端口是否开放,以及连接字符串中的数据库主机名、端口号、用户名、密码等信息是否正确。例如,对于 MySQL 数据库,检查mysql服务是否运行,3306端口是否可访问,连接字符串中的jdbc:mysql://[host]:[port]/[database]部分是否正确填写。
  • HTTP 连接错误:对于 HTTP 连接错误,检查目标 URL 是否正确,网络是否连通,以及是否存在防火墙阻止连接。可以使用ping命令检查与目标服务器的网络连接,使用telnet命令检查目标服务器的端口是否可访问。例如,ping www.example.comtelnet www.example.com 80(如果是 HTTP 服务,默认端口为 80)。

(二)性能指标异常(如响应时间过长、吞吐量过低等)排查思路

  • 响应时间过长排查思路:首先查看服务器资源使用情况,如 CPU、内存、磁盘 I/O 等是否达到瓶颈。可以使用服务器监控工具(如top命令在 Linux 系统中查看 CPU 和内存使用情况)。如果服务器资源正常,检查数据库查询语句是否优化,是否存在慢查询。可以使用数据库的查询分析工具(如 MySQL 的EXPLAIN语句分析查询执行计划)。此外,还需要检查网络延迟是否过高,可以使用网络测试工具(如ping命令查看往返时间,traceroute命令查看网络路由)。
  • 吞吐量过低排查思路:吞吐量过低可能是由于并发用户数设置过高,导致系统资源竞争激烈,无法高效处理请求。可以逐步降低并发用户数进行测试,观察吞吐量的变化。同时,检查服务器端的线程池设置、数据库连接池设置是否合理,是否存在资源等待或阻塞的情况。例如,对于
    一、JMeter 简介

一、JMeter 简介

八、遇到的错误

JDBC Request(JDBC 请求)

Cannot create PoolableConnectionFactory (Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)

解决方法:连接数据库信息错误,或数据库服务问题;

我这里是没有填写正确的端口号

jdbc:mysql://host[:port]/数据库名称

正确的是

jdbc:mysql://数据库地址:端口号/数据库名?allowMultiQueries=true&characterEncoding=utf8

allowMultiQueries=true表示允许在一个SQL语句中执行多个查询(如分号隔开的多个SQL语句),

characterEncoding=utf8用于指定数据库连接的字符编码为UTF - 8,以确保数据的正确存储和读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值