# jmeter **Repository Path**: debug_life/jmeter ## Basic Information - **Project Name**: jmeter - **Description**: JMeter压测工具学习成果 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2021-05-19 - **Last Updated**: 2023-12-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JMeter ## 安装 下载zip压缩包,然后解压到指定目录即可,[官网下载地址](http://jmeter.apache.org/download_jmeter.cgi)。 ![下载页面](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_153019_%E4%B8%8B%E8%BD%BD.png) ![解压到指定目录](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_153019_%E8%A7%A3%E5%8E%8B%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9B%AE%E5%BD%95.png) ## 配置 1. JMeter新版本是依赖java8即以上的版本,所以事先安装正确的java并配置环境变量。 2. 配置环境变量JMETER_HOME,指向JMeter安装解压根目录。 ![JMETER_HOME](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_153832_JMETER_HOME.png) 3. 配置环境变量CLASSPATH,加上`%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;`。 ![CLASSPATH](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_154213_CLASSPATH.png) ## 运行 执行JMeter安装解压根目录下bin目录中的jmeter.bat文件即可打开JMeter。 ![运行程序](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_154344_%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F.png) ![主界面](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_154513_%E4%B8%BB%E7%95%8C%E9%9D%A2.png) ## 汉化 1. 临时汉化,启动软件后,点击options->Choose language->Chinese。 2. 永久汉化,在Jmeter的安装目录下的bin目录中找到 jmeter.properties这个文件,用文本编辑器打开。在#language=en下面插入一行`language=zh_CN`,重启后生效。 ![汉化配置文件](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_154657_%E6%B1%89%E5%8C%96%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.png) ![汉化配置](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_154812_%E6%B1%89%E5%8C%96%E9%85%8D%E7%BD%AE.png) ![汉化后主界面](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_155021_%E6%B1%89%E5%8C%96%E5%90%8E%E4%B8%BB%E7%95%8C%E9%9D%A2.png) ## 常用介绍 ### 线程组 线程组可以生成多个线程去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。 ![线程组](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_164241_%E7%BA%BF%E7%A8%8B%E7%BB%84.png) * 在取样器错误后要执行的动作 * 继续:忽略错误,继续执行。 * 启动下一进程循环:忽略错误,线程当前循环终止,执行下一个循环。 * 停止线程:当前线程停止执行,不影响其他线程正常执行。 * 停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止。 * 立即停止测试:整个测试会立即停止执行,当前正在执行的取样器可能会被中断。 * 线程属性 * 线程数:生成的线程总数。 * Ramp-Up时间(秒):启动所有线程所需要的时间。如果线程数设置为10且Ramp-Up时间设置为100,则JMeter将在100秒内启动10个线程并运行,每个线程将在前一个线程启动后10(100/10)秒后启动。 * 循环次数:每个线程循环的次数。 * 调度器 * 持续时间(秒):控制测试执行的持续时间 * 启动延迟(秒):控制测试在多久后启动执行 ### 取样器 - HTTP请求 发送http请求 ![HTTP请求](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-15_170844_HTTP%E8%AF%B7%E6%B1%82.png) * 名称:用于标识一个取样器 * 注释:仅作注释,无作用 * Web服务器 * 协议:向目标服务器发送http请求时的协议,http/https,大小写不敏感,默认http。 * 服务器名称或IP:http请求发送的目标服务器名称或者IP地址,比如`1.15.83.37`。 * 端口号:目标服务器的端口号,默认值为80。 * HTTP请求 * 方法:发送http请求的方法。 * 路径:请求的URL路径(不包括服务器地址和端口) * 内容编码:要使用的内容编码(用于POST,PUT,PATCH和FILE)。这是要使用的字符编码,与Content-Encoding HTTP标头无关。 * 自动重定向:如果发出的http请求得到响应是301/302,jmeter会重定向到新地址,只针对Get和Head请求,不记录重定向的过程内容。 * 跟随重定向:如果发出的http请求得到响应是301/302,jmeter会重定向到新地址,记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容。仅当未启用“自动重定向”时,此选项才有效。 * 使用KeepAlive:JMeter和目标服务器之间使用 Keep-Alive方式进行HTTP通信。 * 对Post使用multipart / from-data:使用multipart / form-data或application / x-www-form-urlencoded发布请求 * 与浏览器兼容的头:使用multipart / form-data时,这会抑制Content-Type和 Content-Transfer-Encoding标头,仅发送Content-Disposition标头。 * 参数:请求参数,放url中 * 消息体数据:实体参数,如json,放body中。参数栏中有数据时不能点击消息体数据栏,需要先删除参数栏中的参数后方可使用消息体数据栏 * 文件上传:上传文件 ### 监听器 - 察看结果树 查看取样器结果、请求信息和响应信息。在负载测试期间一定不要使用察看结果树,因为它会消耗大量资源(内存和CPU),仅将其用于功能测试或在测试计划调试和验证期间使用。 ![察看结果树](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-16_194626_%E5%AF%9F%E7%9C%8B%E7%BB%93%E6%9E%9C%E6%A0%91.png) PS:中文乱码问题,JMeter取样器的返回结果默认编码是ISO-8859-1,但目前请求返回的结果的编码是UTF-8,需要在jmeter.properties中设置`sampleresult.default.encoding=UFT-8`即可 ![察看结果树乱码](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-16_194717_%E5%AF%9F%E7%9C%8B%E7%BB%93%E6%9E%9C%E6%A0%91%E4%B9%B1%E7%A0%81.png) ![察看结果树乱码解决](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-16_195549_%E5%AF%9F%E7%9C%8B%E7%BB%93%E6%9E%9C%E6%A0%91%E4%B8%8D%E5%86%8D%E4%B9%B1%E7%A0%81.png) ### 监听器 - 聚合报告 聚合报告为测试中的每个不同名称的请求创建一个表行。对于每个请求,它将总计响应信息,并提供请求计数,最小,最大,平均,错误率,近似吞吐量(请求/秒)和千字节每秒的吞吐量。测试完成后,吞吐量就是整个测试期间的实际吞吐量。 ![聚合报告](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-17_135132_%E8%81%9A%E5%90%88%E6%8A%A5%E5%91%8A.png) * Label:取样器的名称。如果勾选了“是否在标签中包含组名?”,则将线程组的名称作为前缀添加。这样,可以根据需要分别整理来自不同线程组的相同取样器。 * #样本:具有相同名称的取样器的样本数。 * 平均值:一组结果的平均经过时间。 * 中位数:中位数是一组结果中间的时间。50%的样本不超过此时间。其余的至少花了一样长的时间。 * 90% 百分位:90%的样本花费的时间不超过这次。剩余的样本至少要花这么长的时间。 * 95% 百分位:95%的样本花费的时间不超过这次。剩余的样本至少要花这么长的时间。 * 99% 百分位:99%的样本花费的时间不超过这次。剩余的样本至少要花这么长的时间。 * 最小值:具有相同名称的取样器的样本的最短时间。 * 最大值:具有相同名称的取样器的样本的最长时间。 * 异常%:异常的请求百分比。 * 吞吐量:吞吐量以每秒/分钟/小时的请求数量。 * 接收 KB/sec:吞吐量,以每秒千字节为单位。 * 发送 KB/sec:吞吐量,以每秒千字节为单位。 PS:计算中位数、90% 百分位、95% 百分位、99% 百分位需要额外的内存。 ### 监听器 - 汇总报告 汇总报告为测试中的每个不同名称的请求创建一个表行。这与“聚合报告”相似,不同之处在于它使用较少的内存。 ![汇总报告](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-17_135035_%E6%B1%87%E6%80%BB%E6%8A%A5%E5%91%8A.png) * Label:取样器的名称。如果勾选了“是否在标签中包含组名?”,则将线程组的名称作为前缀添加。这样,可以根据需要分别整理来自不同线程组的相同取样器。 * #样本:具有相同名称的取样器的样本数。 * 平均值:一组结果的平均经过时间。 * 最小值:具有相同名称的取样器的样本的最短时间。 * 最大值:具有相同名称的取样器的样本的最长时间。 * 标准偏差:样本经过时间的标准偏差。 * 异常%:异常的请求百分比。 * 吞吐量:吞吐量以每秒/分钟/小时的请求数衡量。 * 接收 KB/sec:吞吐量,以每秒千字节为单位。 * 发送 KB/sec:吞吐量,以每秒千字节为单位。 * 平均字节数:样本响应的平均大小(以字节为单位)。 ### 后置处理器 - 正则表达式提取器 允许使用Perl类型的正则表达式从服务器响应中提取值。作为后置处理器,将在其范围内的每个取样器请求之后执行,应用正则表达式提取请求的值,生成模板字符串,并将结果存储到给定的变量名中。 ![正则表达式提取器](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-19_095304_%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%8F%90%E5%8F%96%E5%99%A8.png) * 名称:正则表达式提取器名称。 * 注释:仅作注释,无作用。 * 适用于 * Main sample and sub-samples:都适用 * Main sample:仅适用于主样本 * Sub-samples only:仅适用于子样本 * JMeter Variable Name to use:提取将应用于命名变量的内容 * 要检查的响应字段 * 主体:响应正文 * Body(unexcaped):响应正文,已替换所有HTML转义代码 * Body as a Document:通过Apache Tika从各种类型的文档中提取文本 * 信息头:响应头 * Request Headers:请求头 * URL * 响应代码 * 响应消息 * 引用名称:存储结果的JMeter变量的名称。还要注意,每个组都存储为[refname]_g#,其中[refname]是引用名称的字符串,而#是组号,其中[refname]_g0是整个匹配项,[refname]_g1是来自匹配项第一组内容。 * 正则表达式:用于解析响应数据的正则表达式。 * 模板:用于根据找到的匹配项创建字符串的模板。这是一个带有特殊元素的任意字符串,用于引用正则表达式中的组。引用组的语法是:\$1\$引用组1,\$2\$引用组2等等。\$0\$引用整个表达式匹配的内容。 * 匹配数组(0代表随机):指示要使用的第几个匹配项。正则表达式可以匹配多次。 * 缺省值:如果找不到匹配值时的默认值 ### 配置元件 - HTTP信息头管理器 添加或覆盖HTTP请求标头。 ![HTTP信息头管理器](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-19_095346_HTTP%E4%BF%A1%E6%81%AF%E5%A4%B4%E7%AE%A1%E7%90%86%E5%99%A8.png) ### 配置元件 - HTTP Cookie管理 HTTP Cookie管理能像Web浏览器一样存储和发送cookie。如果有HTTP请求,并且响应包含cookie,则cookie管理器会自动存储该cookie,并将其用于将来对该特定地址的所有请求。每个JMeter线程都有其自己的“cookie存储区”。因此,如果正在测试使用cookie来存储会话信息的地址,则每个JMeter线程都会拥有自己的会话。 如果在Cookie管理器中手动添加cookie信息,则cookie将被所有JMeter线程共享 ![Cookie管理](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-19_095416_Cookie%E7%AE%A1%E7%90%86.png) ### 配置元件 - CSV 数据文件设置 CSV 数据文件设置用于读取文件中的行,并将其拆分为变量。 ![数据文件设置](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-19_095443_%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E8%AE%BE%E7%BD%AE.png) ![数据文件设置_文件](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-19_095513_%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E8%AE%BE%E7%BD%AE_%E6%96%87%E4%BB%B6.png) * 文件名:要读取的文件名。 * 文件编码:要读取的文件的编码。 * 变量名称(西文逗号间隔):变量名称列表,名称必须由西文逗号间隔分隔,可以使用双引号将它们引起来。JMeter支持CSV标头行:如果变量名字段为空,则读取文件的第一行并将其解析为列名列表。 * 忽略首行(只在设置了变量名称后才生效):忽略CSV文件的第一行,仅当变量名不为空时才使用,如果变量名为空,则第一行必须包含标题。 * 分隔符(用'\t'代替制表符):文件的行数据中各列分隔的符号 * 是否允许带引号?:CSV文件是否允许带引号 * 遇到文件结束符再次循环?:遇到文件结束符再次循环读取行数据 * 遇到文件结束符停止线程? * 线程共享模式 * 所有线程(默认):文件在所有线程之间共享。 * 当前线程组:文件在当前线程组共享。 * 当前线程:文件在当前线程共享。 * 编辑:相同标识符的所有线程共享同一文件。 ## 例子 ### ## 问题 ### 报错:`java.net.BindException: Address already in use: connect` * 原因:windows提供给TCP/IP链接的端口为1024-5000,如果在短时间内跑大量的请求时将端口占满时会报上述问题。 * 解决: * 在`运行`输入`regedit`命令打开`注册表` * 在 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters`右键`Parameters` * 添加一个新的`DWORD`,名字为`MaxUserPort` * 输入数值数据为`65534`,基数选择`十进制` * 重启电脑 ![windows端口上限问题改注册表](https://gitee.com/debug_life/jmeter/raw/master/images/2021-05-18_193400_windows%E7%AB%AF%E5%8F%A3%E4%B8%8A%E9%99%90%E9%97%AE%E9%A2%98%E6%94%B9%E6%B3%A8%E5%86%8C%E8%A1%A8.png)