入门
1.0 概述
使用 JMeter 时,你通常会遵循以下流程:
1.0.1 测试计划构建
为此,你将 在 GUI 模式下运行 JMeter 。然后,你可以选择从浏览器或本机应用程序记录应用程序。你可以使用 File → Templates... → Recording
请注意,你也可以手动构建你的计划。确保你阅读本 文档 以了解主要概念。
你还将使用以下选项之一对其进行调试:
- Run → Start no pauses 运行 →“开始”无暂停
- Run → Start 运行 → 开始
- Validate on Thread Group
你可以 查看 Results Tree 渲染器或测试器(CSS/JQUERY、JSON、Regexp、XPath),确保在构建测试计划时遵循 最佳实践 。
1.0.2 负载测试运行
一旦你的测试计划准备就绪,你就可以开始你的负载测试。第一步是配置将运行 JMeter 的注入器,这与任何其他负载测试工具一样,包括:
- 根据 CPU、内存和网络正确调整机器大小
- 操作系统调优
- Java 安装:确保安装 JMeter 支持的最新版本的 Java
- 增加 Java 堆大小。默认情况下,JMeter 以 1 GB 的堆运行,这可能不足以用于测试,具体取决于测试计划和要运行的线程数
一切准备就绪后,你将使用 CLI 模式(以前称为 非 GUI 模式的命令行模式 )运行它以进行负载测试。
不要使用 GUI 模式运行负载测试!
使用 CLI 模式,你可以生成包含结果的 CSV(或 XML)文件,并让 JMeter 在负载测试结束时 生成 HTML 报告。 JMeter 默认会在运行时提供负载测试的摘要。
你还可以在测试期间使用 Backend Listener 获得 实时结果 。
1.0.3 负载测试分析
负载测试完成后,你可以使用 HTML 报告来分析负载测试。
1.0.4 让我们开始
开始使用 JMeter 的最简单方法是首先 下载最新的生产版本 并安装它。该版本包含构建和运行大多数类型的测试所需的所有文件,例如 Web (HTTP/HTTPS)、FTP、JDBC、LDAP、Java、JUnit 等。
如果你想执行 JDBC 测试,那么你当然需要供应商提供的适当 JDBC 驱动程序。JMeter 不附带任何 JDBC 驱动程序。
JMeter 包含 JMS API jar,但不包含 JMS 客户端实现。如果要运行 JMS 测试,则需要从 JMS 提供程序下载适当的 jar。
有关安装其他 jar 的详细信息,请参阅 JMeter 类路径 部分。
接下来,启动 JMeter 并通过用户指南的 制定测试计划 部分来熟悉 JMeter 基础知识(例如,添加和删除元素)。
最后,阅读有关如何构建特定类型的测试计划的相应部分。例如,如果你对测试 Web 应用程序感兴趣,请参阅 构建 Web 测试计划 部分。其他特定的测试计划部分是:
一旦你对构建和运行 JMeter 测试计划感到满意,你就可以查看各种配置元素(计时器、侦听器、断言等),这些元素可以让你更好地控制测试计划。
1.1 要求
JMeter 要求你的计算环境满足一些最低要求。
1.1.1 Java 版本
JMeter 与 Java 8 或更高版本兼容。出于安全和性能原因,我们强烈建议你安装主要版本的最新次要版本。
由于 JMeter 仅使用标准 Java API,因此如果你的 JRE 由于 JRE 实现问题而无法运行 JMeter,请不要提交错误报告。
虽然可以使用 JRE,但最好安装 JDK 来记录 HTTPS,JMeter 需要 JDK 的 keytool 实用程序。
1.1.2 操作系统
JMeter 是一个 100% Java 应用程序,应该可以在任何具有兼容 Java 实现的系统上正确运行。
可以在 JMeter wiki 上的 此页面 上查看使用 JMeter 测试的操作系统 。
即使你的操作系统未在 wiki 页面上列出,只要 JVM 兼容,JMeter 也应该在其上运行。
1.2 可选
如果你打算进行 JMeter 开发,那么你将需要下面列出的一个或多个可选包。
1.2.1 Java 编译器
如果你想构建 JMeter 源代码或开发 JMeter 插件,那么你将需要一个完全兼容的 JDK 8 或更高版本。
1.2.2 SAX XML 解析器
JMeter 带有 Apache 的 Xerces XML 解析器 。你可以选择告诉 JMeter 使用不同的 XML 解析器。为此,请在 JMeter 的 classpath 中包含第三方解析器的类,并使用解析器实现的完整类名更新 jmeter.properties 文件 。
1.2.3 电子邮件支持
JMeter 具有广泛的电子邮件功能。它可以根据测试结果发送电子邮件,并具有 POP3(S)/IMAP(S) 采样器。它还有一个 SMTP(S) 采样器。
1.2.4 SSL 加密
要使用 SSL 加密 (HTTPS) 测试 Web 服务器,JMeter 需要提供 SSL 的实现,就像 Sun Java 1.4 及更高版本一样。如果你的 Java 版本不包含 SSL 支持,则可以添加外部实现。在 JMeter 的 classpath 中包含必要的加密包。此外,更新 system.properties 以注册 SSL 提供程序。
JMeter HTTP 默认为协议级 TLS。这可以通过编辑 jmeter.properties
或 user.properties
中的 JMeter 属性 https.default.protocol
来更改。
JMeter HTTP 采样器被配置为接受所有证书,无论是否受信任,无论有效期等。 这是为了在测试服务器时提供最大的灵活性。
如果服务器需要客户端证书,则可以提供。
还有 SSL 管理器 ,用于更好地控制证书。
JMeter 代理服务器(见下文)支持记录 HTTPS (SSL)
SMTP 采样器可以选择使用本地信任存储或信任所有证书。
1.2.5 JDBC 驱动
如果要进行 JDBC 测试,你需要将数据库供应商的 JDBC 驱动程序添加到 类路径中。 确保文件是 jar 文件,而不是 zip。
1.2.6 JMS 客户端
JMeter 现在包括来自 Apache Geronimo 的 JMS API,因此你只需从 JMS 提供者添加适当的 JMS 客户端实现 jar。有关详细信息,请参阅他们的文档。 JMeter Wiki 上也可能有一些信息。
1.2.7 ActiveMQ JMS 库
你需要将 jar activemq-all-XXXjar 添加到你的类路径中,例如将其存储在 lib/目录中。
有关详细信息,请参阅 ActiveMQ 初始配置页面 。
有关安装其他 jar 的更多详细信息,请参阅 JMeter 类路径 部分。
1.3 安装
我们建议大多数用户运行 最新版本 。
要安装发布版本,只需将 zip/tar 文件解压缩到要安装 JMeter 的目录中。只要你正确安装了 JRE/JDK 并设置了 JAVA_HOME 环境变量,你就无需再做任何事情了。
如果目录路径包含任何空格,则可能会出现问题(尤其是客户端-服务器模式)。
安装目录结构应如下所示(其中 XY 是版本号):
apache-jmeter-X.Y
apache-jmeter-X.Y/bin
apache-jmeter-X.Y/docs
apache-jmeter-X.Y/extras
apache-jmeter-X.Y/lib/
apache-jmeter-X.Y/lib/ext
apache-jmeter-X.Y/lib/junit
apache-jmeter-X.Y/licenses
apache-jmeter-X.Y/printable_docs
如果需要,你可以重命名父目录(即 apache-jmeter-XY),但不要更改任何子目录名称。
1.4 运行 JMeter
要运行 JMeter,请运行 jmeter.bat
(对于 Windows)或 jmeter
(对于 Unix)文件。这些文件位于 bin 目录中。片刻之后,应该会出现 JMeter GUI。
GUI 模式只能用于创建测试脚本,CLI 模式(非 GUI)必须用于负载测试
bin
目录中 还有一些你可能会发现有用的附加脚本。Windows 脚本文件(.CMD 文件需要 Win2K 或更高版本):
jmeter.bat
运行 JMeter(默认在 GUI 模式下)
jmeterw.cmd
在没有 Windows shell 控制台的情况下运行 JMeter(默认在 GUI 模式下)
jmeter-n.cmd
在此放置一个 JMX 文件以运行 CLI 模式测试
jmeter-nr.cmd
在此放置一个 JMX 文件以远程运行 CLI 模式测试
jmeter-t.cmd
在此放置一个 JMX 文件以在 GUI 模式下加载它
jmeter-server.bat
以服务器模式启动 JMeter
mirror-server.cmd
在 CLI 模式下运行 JMeter 镜像服务器
shutdown.cmd
运行 Shutdown 客户端以优雅地停止 CLI 模式实例
stoptest.cmd
运行 Shutdown 客户端突然停止 CLI 模式实例
特殊名称 LAST 可以与 jmeter-n.cmd、jmeter-t.cmd 和 jmeter-nr.cmd 一起使用 ,表示最后一个交互式运行的测试计划。
有一些环境变量可用于自定义 JMeter 的 JVM 设置。一种简单的设置方法是在 bin 目录中创建一个名为 setenv.bat 的文件。这样的文件可能如下所示:
rem This is the content of bin\setenv.bat,
rem it will be called by bin\jmeter.bat
set JVM_ARGS=-Xms1024m -Xmx1024m -Dpropname=value
JVM_ARGS 可用于覆盖 jmeter.bat 脚本中的 JVM 设置,并将在启动 JMeter 时设置,例如:
jmeter -t test.jmx …
可以定义以下环境变量:
绘图
影响直接绘制使用的 JVM 选项,例如\-Dsun.java2d.ddscale=true
。默认为空。
GC_ALGO
JVM 垃圾收集器选项。默认为\-XX:+UseG1GC -XX:MaxGCPauseMillis=250 -XX:G1ReservePercent=20
堆
启动 JMeter 时使用的 JVM 内存设置。默认为\-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
JMETER_BIN
JMeter bin 目录(必须以\结尾)。当调用 setenv.bat
时,值将被猜到。
JMETER_COMPLETE_ARGS
如果设置指示,则仅使用 JVM_ARGS
和 JMETER_OPTS
。所有其他选项,如 HEAP
和 GC_ALGO
将被忽略。默认为空。
JMETER_HOME
安装目录。将从 jmeter.bat
的位置猜测
JMETER_LANGUAGE
Java 运行时选项来指定使用的语言。默认为:\-Duser.language="en" -Duser.region="EN"
JM_LAUNCH
java 可执行文件的名称,如 java.exe
(默认)或 javaw.exe
JVM_ARGS
启动 JMeter 时要使用的 Java 选项。这些将最后添加到 java 命令中。默认为空
Un\*x
脚本文件;应该适用于大多数 Linux/Unix 系统:
仪表
运行 JMeter(默认在 GUI 模式下)。定义一些可能不适用于所有 JVM 的 JVM 设置。
jmeter 服务器
在服务器模式下启动 JMeter(使用适当的参数调用 jmeter 脚本)
jmeter.sh
非常基本的 JMeter 脚本(你可能需要调整 JVM 选项,例如内存设置)。
mirror-server.sh
在 CLI 模式下运行 JMeter 镜像服务器
shutdown.sh
运行 Shutdown 客户端以优雅地停止 CLI 模式实例
stoptest.sh
运行 Shutdown 客户端突然停止 CLI 模式实例
可能需要设置一些环境变量来配置 JMeter 使用的 JVM。这些变量可以直接在启动 jmeter 脚本的 shell 中设置。例如,设置变量 JVM_ARGS 将覆盖大多数预定义的设置,例如
JVM_ARGS="-Xms1024m -Xmx1024m" jmeter -t test.jmx [etc.]
将覆盖脚本中的 HEAP 设置。
要永久设置这些变量,你可以将它们放在 bin 目录中名为 setenv.sh
的文件中。该文件将在运行 JMeter 时通过调用 jmeter 脚本获取。bin/setenv.sh
的示例可能如下所示:
# This is the file bin/setenv.sh,
# it will be sourced in by bin/jmeter
# Use a bigger heap, but a smaller metaspace, than the default
export HEAP="-Xms1G -Xmx1G -XMaxMetaspaceSize=192m"
# Try to guess the locale from the OS. The space as value is on purpose!
export JMETER_LANGUAGE=" "
可以定义以下环境变量:
GC_ALGO
用于指定 JVM 垃圾收集算法的 Java 运行时选项。默认为\-XX:+UseG1GC -XX:MaxGCPauseMillis=250 -XX:G1ReservePercent=20
堆
启动 JMeter 时使用的用于内存管理的 Java 运行时选项。默认为\-Xms1g -Xmx1g -X:MaxMetaspaceSize=256m
JAVA_HOME
必须指向你的 Java Development Kit 安装。需要使用“调试”参数运行。在某些操作系统上,JMeter 会尽力猜测 JVM 的位置。
JMETER_COMPLETE_ARGS
如果设置指示,则仅使用 JVM_ARGS 和 JMETER_OPTS。所有其他选项,如 HEAP
和 GC_ALGO
将被忽略。默认为空。
JMETER_HOME
可能指向你的 JMeter 安装目录。如果为空,它将相对于 jmeter 脚本进行设置。
JMETER_LANGUAGE
Java 运行时选项来指定使用的语言。默认为\-Duser.language=en -Duser.region=EN
JMETER_OPTS
JMeter 启动时使用的 Java 运行时选项。JMeter 可能会添加操作系统的特殊选项。
JRE_HOME
必须指向你的 Java 运行时安装。如果为空,则默认为 JAVA_HOME 。如果 JRE_HOM
E 和 JAVA_HOME
都为空,JMeter 将尝试猜测 JAVA_HOME。如果同时设置了 JRE_HOME 和 JAVA_HOME ,则使用 JAVA_HOME。
JVM_ARGS
启动 JMeter 时要使用的 Java 选项。这些将在 JMETER_OPTS
之前和其他 JVM 选项之后添加。默认为空
1.4.1 JMeter 的类路径
JMeter 会自动从以下目录中的 jar 中查找类:
JMETER_HOME/lib
used for utility jars
JMETER_HOME/lib/ext
用于 JMeter 组件和插件
如果你开发了新的 JMeter 组件,那么你应该将它们 jar 并将 jar 复制到 JMeter 的 lib/ext 目录中。JMeter 将自动在此处找到的任何 jar 中查找 JMeter 组件。不要将 lib/ext 用于插件使用的实用程序 jar 或依赖项 jar;它仅适用于 JMeter 组件和插件。
如果你不想将 JMeter 插件 jar 放在 lib/ext
目录中,请在 jmeter.properties
中定义属性 search_paths。
实用程序和依赖项 jar(库等)可以放在 lib 目录中。
如果你不想将此类 jar 放在 lib 目录中,则 在 jmeter.properties
中定义属性 user.classpath
或 plugin_dependency_paths
。有关差异的说明,请参见下文。
其他 jars(例如 JDBC、JMS 实现和 JMeter 代码所需的任何其他支持库)应该放在 lib 目录中 - 而不是 lib/ext 目录,或者添加到 user. classpath 。
JMeter 只会找到 .jar
文件,而不是 .zip
。
你还可以在 $JAVA_HOME/jre/lib/ext
中安装实用程序 Jar 文件,或者你可以在 jmeter.properties
中设置属性 user.classpath
请注意,设置 classpath 环境变量将不起作用。这是因为 JMeter 以“ java -jar ”启动,而 java 命令静默忽略 classpath 变量,以及使用\-jar
时的\- classpath / \-cp
选项。
所有 Java 程序都会出现这种情况,而不仅仅是 JMeter。
1.4.2 从模板创建测试计划
你可以从现有模板创建新的测试计划。
为此,你可以使用 File → Templates...或 Templates 图标:
模板图标项
将出现一个弹出窗口,然后你可以在列表中选择一个模板:
模板弹出窗口
一些模板可能需要用户输入参数。对于这些,单击创建按钮后,将出现一个新窗口,如下所示:
参数窗口
完成参数后,单击验证
按钮,将创建模板。
每个模板的文档说明了从模板创建测试计划后要做什么。
您可以按照 此处的文档 创建自己的模板
1.4.3 在代理后使用 JMeter
如果你在防火墙/代理服务器后面进行测试,你可能需要向 JMeter 提供防火墙/代理服务器主机���和端口号。为此,请使用以下参数从命令行运行 jmeter\[.bat\]
文件:
参数 | 描述 |
---|---|
-E | [使用的代理方案 - 可选 - 用于非 http] |
-H | [代理服务器主机名或 IP 地址] |
-P | [代理服务器端口] |
-N | [非代理主机](例如*.apache.org localhost) |
-u | [代理身份验证的用户名 - 如果需要] |
-a | [代理身份验证的密码 - 如果需要] |
示例:
jmeter -E https -H my.proxy.server -P 8000 -u username -a password -N localhost
你还可以使用--proxyScheme、--proxyHost、--proxyPort、--username 和--password 作为参数名称
命令行上提供的参数可能对系统上的其他用户可见。
如果提供了代理方案,则 JMeter 设置以下系统属性:
- http.proxyScheme
如果提供了代理主机和端口,则 JMeter 设置以下系统属性:
- http.proxyHost
- http.proxyPort
- https.proxyHost
- https.proxyPort
用于代理的用户和密码可以由系统属性 http.proxyUser 和 http.proxyUser 给出。它们将被 HTTP 采样器中设置的上述参数或值覆盖。
如果提供了非代理主机列表,则 JMeter 设置以下系统属性:
- http.nonProxyHosts
- https.nonProxyHosts
因此,如果你不想同时设置 http 和 https 代理,你可以在 system.properties 中定义相关属性,而不是使用命令行参数。
代理设置也可以在测试计划中定义,使用 HTTP 请求默认 配置或 HTTP 请求 采样器元素。
JMeter 还拥有自己的内置代理服务器 HTTP(S) 测试脚本记录器。这仅用于记录 HTTP 或 HTTPS 浏览器会话。不要与上面描述的代理设置混淆,当 JMeter 自己发出 HTTP 或 HTTPS 请求时使用这些设置。
1.4.4 CLI 模式(命令行模式称为 NON GUI 模式)
对于负载测试,你必须在此模式下(无 GUI)运行 JMeter 以从中获得最佳结果。为此,请使用以下命令选项:
选项 | 描述 |
---|---|
-n | 这指定 JMeter 以 cli 模式运行 |
-t | [包含测试计划的 JMX 文件的名称]。 |
-l | [将样本结果记录到的 JTL 文件的名称]。 |
-j | [JMeter 运行日志文件的名称]。 |
-r | 在 JMeter 属性“ remote_hosts ”指定的服务器中运行测试 |
-R | [远程服务器列表] 在指定的远程服务器上运行测试 |
-G | [CSV 文件的路径] 仅生成报告仪表板 |
-e | 负载测试后生成报告仪表板 |
-o | 负载测试后生成报告仪表板的输出文件夹。文件夹不能存在或为空,该脚本还允许你指定可选的防火墙/代理服务器信息: |
-H | [代理服务器主机名或 IP 地址] |
-P | [代理服务器端口] |
例子
jmeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000
如果属性 jmeterengine.stopfail.system.exit 设置为 true(默认为 false ),则如果 JMeter 无法停止所有线程,它将调用 System.exit(1) 。通常这是没有必要的。
1.4.5 服务器模式
对于 分布式测试 ,在远程节点上以服务器模式运行 JMeter,然后从 GUI 控制服务器。你还可以使用 CLI 模式运行远程测试。要启动服务器,请在每个服务器主机上运行 jmeter-server\[.bat\]
该脚本还允许你指定可选的防火墙/代理服务器信息:
选项 | 描述 |
---|---|
-H | [代理服务器主机名或 IP 地址] |
-P | [代理服务器端口] |
示例:
jmeter-server -H my.proxy.server -P 8000
如果你希望服务器在运行单个测试后退出,请定义 JMeter 属性 server.exitaftertest=true。
要在 CLI 模式下从客户端运行测试,请使用以下命令:
jmeter -n -t testplan.jmx -r [-Gprop=val] [-Gglobal.properties] [-X]
where:
选项 | 描述 |
---|---|
-G | 用于定义要在服务器中设置的 JMeter 属性 |
-X | 表示在测试结束时退出服务器 |
-R | 服务器 1,服务器 2 |
可以用来代替-r 来提供要启动的服务器列表。覆盖 remote_hosts
,但不定义属性。
如果属性 jmeterengine.remote.system.exit
设置为 true(默认为 false),那么 JMeter 将在测试结束时停止 RMI 后调用 System.exit(0) 。通常这是没有必要的。
1.4.6 通过命令行覆盖属性
Java 系统属性和 JMeter 属性可以直接在命令行上覆盖(而不是修改 jmeter.properties)。为此,请使用以下选项:
-D[prop_name]=[值]
定义一个 java 系统属性值。
-J[prop_name]=[值]
定义一个本地 JMeter 属性。
-G[prop_name]=[值]
定义要发送到所有远程服务器的 JMeter 属性。
-G[属性文件]
定义一个包含要发送到所有远程服务器的 JMeter 属性的文件。
-L[类别]=[优先级]
覆盖日志记录设置,将特定类别设置为给定的优先级。
-L 标志也可以在没有类别名称的情况下使用来设置根日志记录级别。
例子:
jmeter -Duser.dir=/home/mstover/jmeter_stuff \
-Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG
jmeter -LDEBUG
命令行属性在启动的早期处理,但在日志系统设置之后。
1.4.7 日志和错误消息
从 3.2 开始,JMeter 日志不再通过 jmeter.properties 等属性文件进行配置,而是通过 Apache Log4j 2 配置文件(默认情况下,JMeter 启动目录中的 log4j2.xml )进行配置. 此外,从 3.2 开始,包括 JMeter 和插件在内的每个代码都必须使用 SLF4J 库来留下日志。
这是一个示例 log4j2.xml 文件,它为每个类别定义了两个日志附加程序和记录器。
<Configuration status="WARN" packages="org.apache.jmeter.gui.logging">
<Appenders>
<!-- The main log file appender to jmeter.log in the directory from which JMeter was launched, by default. -->
<File name="jmeter-log" fileName="${sys:jmeter.logfile:-jmeter.log}" append="false">
<PatternLayout>
<pattern>%d %p %c{1.}: %m%n</pattern>
</PatternLayout>
</File>
<!-- Log appender for GUI Log Viewer. See below. -->
<GuiLogEvent name="gui-log-event">
<PatternLayout>
<pattern>%d %p %c{1.}: %m%n</pattern>
</PatternLayout>
</GuiLogEvent>
</Appenders>
<Loggers>
<!-- Root logger -->
<Root level="info">
<AppenderRef ref="jmeter-log" />
<AppenderRef ref="gui-log-event" />
</Root>
<!-- SNIP -->
<!--
# Apache HttpClient logging examples
-->
<!-- # Enable header wire + context logging - Best for Debugging -->
<!--
<Logger name="org.apache.http" level="debug" />
<Logger name="org.apache.http.wire" level="error" />
-->
<!-- SNIP -->
</Loggers>
</Configuration>
因此,如果你想将 org.apache.http 类别的日志级别更改为调试级别,你可以在启动 JMeter 之前 简单地在 log4j2.xml 文件中添加(或取消注释)以下 logger 元素。
<Loggers>
<!-- SNIP -->
<Logger name="org.apache.http" level="debug" />
<!-- SNIP -->
</Loggers>
有关如何配置 log4j2.xml 文件的更多详细信息,请参阅 Apache Log4j 2 配置 页面。
特定类别或根记录器的日志级别也可以直接在命令行上覆盖(而不是修改 log4j2.xml)。为此,请使用以下选项:
-L[类别]=[优先级]
覆盖日志记录设置,将特定类别设置为给定的优先级。从 3.2 开始,建议使用完整的类别名称(例如 org.apache.jmeter 或 com.example.foo),但如果类别名称以 jmeter 或 jorphan 开头,则为 org.apache。 将在内部添加到类别名称输入以构造完整的类别名称(即 org.apache.jmeter 或 org.apache.jorphan)以实现向后兼容性。
例子:
jmeter -Ljmeter.engine=DEBUG
jmeter -Lorg.apache.jmeter.engine=DEBUG
jmeter -Lcom.example.foo=DEBUG
jmeter -LDEBUG
日志记录的差异:旧实践与新实践:
由于 JMeter 从 3.2 开始使用 SLF4J 作为日志记录 API 和 Apache Log4j 2 作为日志框架,因此并非 3.2 之前使用的每个日志级别都可以与 SLF4J/Log4j2 提供的新可用日志级别之一完全匹配。因此,如果你需要迁移任何现有的日志记录配置和日志记录代码,请牢记以下差异和新的建议做法。
类别 | 3.2 之前的旧做法 | 自 3.2 以来的新做法 |
记录器参考 | 通过LoggingManager引用记录器: LoggingManager.getLoggerFor(String category); LoggingManager.getLoggerForClass(); | 将 SLF4J API 与类别或显式类一起使用: LoggerFactory.getLogger(String category); LoggerFactory.getLogger(Foo.class); |
配置或命令行参数中的日志级别 | 旧日志级别:
| 通过 SLF4J/Log4j2 映射到新级别:
从 3.2 开始额外支持TRACE级别,它不如DEBUG特定。查阅 SLF4J 或 Apache Log4J 2 文档以了解详细信息。 |
JMeter 通常不使用弹出对话框来显示错误,因为这些会干扰运行测试。它也不会报告拼写错误的变量或函数的任何错误;相反,引用只是按原样使用。有关详细信息,请参阅 函数和变量 。
如果 JMeter 在测试期间检测到错误,则会将一条消息写入日志文件。日志文件名在 log4j2.xml
文件中定义(或使用-j 选项,见下文)。它默认为 jmeter.log,可以在启动 JMeter 的目录中找到。
在 GUI 模式下,日志文件中记录的错误/致命消息的数量显示在右上角。
错误/致命计数器
命令行选项\-j jmeterlogfile
允许在读取初始属性文件之后以及处理任何其他属性之前进行处理。因此,它允许覆盖 jmeter.log
的默认值。将测试计划名称作为参数的 jmeter 脚本(例如 jmeter-n.cmd
)已更新为使用测试计划名称定义日志文件,例如对于测试计划 Test27.jmx
,日志文件设置为 Test27.log
日志。
在 Windows 上运行时,该文件可能仅显示为 jmeter,除非你已将 Windows 设置为显示文件扩展名。[无论如何你都应该这样做,以便更容易检测病毒和其他伪装成文本文件的恶意软件......]
除了记录错误,jmeter.log 文件还记录了一些关于测试运行的信息。例如:
2017-03-01 12:19:20,314 INFO o.a.j.JMeter: Version 3.2.20170301
2017-03-01 12:19:45,314 INFO o.a.j.g.a.Load: Loading file: c:\mytestfiles\BSH.jmx
2017-03-01 12:19:52,328 INFO o.a.j.e.StandardJMeterEngine: Running the test!
2017-03-01 12:19:52,384 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group BSH. Ramp up = 1.
2017-03-01 12:19:52,485 INFO o.a.j.e.StandardJMeterEngine: Continue on error
2017-03-01 12:19:52,589 INFO o.a.j.t.JMeterThread: Thread BSH1-1 started
2017-03-01 12:19:52,590 INFO o.a.j.t.JMeterThread: Thread BSH1-1 is done
2017-03-01 12:19:52,691 INFO o.a.j.e.StandardJMeterEngine: Test has ended
日志文件有助于确定错误的原因,因为 JMeter 不会中断测试以显示错误对话框。
1.4.8 命令行选项的完整列表
调用 JMeter 作为“ jmeter -? ”将打印所有命令行选项的列表。这些如下所示。
--?
print command line options and exit
-h, --help
print usage information and exit
-v, --version
print the version information and exit
-p, --propfile <argument>
the jmeter property file to use
-q, --addprop <argument>
additional JMeter property file(s)
-t, --testfile <argument>
the jmeter test(.jmx) file to run
-l, --logfile <argument>
the file to log samples to
-i, --jmeterlogconf <argument>
jmeter logging configuration file (log4j2.xml)
-j, --jmeterlogfile <argument>
jmeter run log file (jmeter.log)
-n, --nongui
run JMeter in nongui mode
-s, --server
run the JMeter server
-H, --proxyHost <argument>
Set a proxy server for JMeter to use
-P, --proxyPort <argument>
Set proxy server port for JMeter to use
-N, --nonProxyHosts <argument>
Set nonproxy host list (e.g. *.apache.org|localhost)
-u, --username <argument>
Set username for proxy server that JMeter is to use
-a, --password <argument>
Set password for proxy server that JMeter is to use
-J, --jmeterproperty <argument>=<value>
Define additional JMeter properties
-G, --globalproperty <argument>=<value>
Define Global properties (sent to servers)
e.g. -Gport=123
or -Gglobal.properties
-D, --systemproperty <argument>=<value>
Define additional system properties
-S, --systemPropertyFile <argument>
additional system property file(s)
-f, --forceDeleteResultFile
force delete existing results files and web report folder if present before starting the test
-L, --loglevel <argument>=<value>
[category=]level e.g. jorphan=INFO, jmeter.util=DEBUG or com.example.foo=WARN
-r, --runremote
Start remote servers (as defined in remote_hosts)
-R, --remotestart <argument>
Start these remote servers (overrides remote_hosts)
-d, --homedir <argument>
the jmeter home directory to use
-X, --remoteexit
Exit the remote servers at end of test (CLI mode)
-g, --reportonly <argument>
generate report dashboard only, from a test results file
-e, --reportatendofloadtests
generate report dashboard after load test
-o, --reportoutputfolder <argument>
output folder for report dashboard
注意:如果 JMeter 日志文件名包含成对的单引号,则其格式为 SimpleDateFormat(应用于当前日期),例如 jmeter\_'yyyyMMddHHmmss'.log
如果特殊名称 LAST 用于-t、-j 或-l 标志,则 JMeter 将其视为以交互模式运行的最后一个测试计划。
1.4.9 CLI 模式关闭
在 2.5.1 版本之前,JMeter 在 CLI 模式测试完成时 调用 System.exit() 。这会导致直接调用 JMeter 的应用程序出现问题,因此 JMeter 不再调用 System.exit()
来完成正常的测试。[一些致命错误可能仍会调用 System.exit()
] JMeter 将退出它启动的所有非守护线程,但可能仍然存在一些非守护线程;这些将阻止 JVM 退出。为了检测这种情况,JMeter 在它退出之前启动一个新的守护线程。这个守护线程等待一小会儿;如果它从等待中返回,那么显然 JVM 无法退出,线程会打印一条消息说明原因。
属性 jmeter.exit.check.pause
可用于覆盖 2000 毫秒(2 秒)的默认暂停。如果设置为 0,则 JMeter 不会启动守护线程。
1.5 配置 JMeter
如果你希望修改运行 JMeter 的属性,你需要修改/bin 目录中的 user.properties
或创建自己的 jmeter.properties
副本并在命令行中指定它。
注意:你可以在由 JMeter 属性 user.properties 定义的文件中定义其他 JMeter 属性,该文件具有默认值 user.properties
。如果在当前目录中找到该文件或在 JMeter bin 目录中找到该文件,则会自动加载该文件。同样,system.properties
用于更新系统属性。
参数
选项 | 描述 | 是否必需 |
---|---|---|
ssl.provider | 如果你不想使用内置 Java 实现,可以为 SSL 实现指定类。 | 否 |
xml.parser | 你可以指定一个实现作为你的 XML 解析器。默认值为:org.apache.xerces.parsers.SAXParser | 否 |
远程主机 | 远程 JMeter 主机的逗号分隔列表(或主机:端口,如果需要)。如果你在分布式环境中运行 JMeter,请列出运行 JMeter 远程服务器的机器。这将允许你从这台机器的 GUI 控制这些服务器 | 否 |
not_in_menu | 你不想在 JMeter 的菜单中看到的组件列表。随着 JMeter 添加的组件越来越多,你可能希望自定义你的 JMeter 以仅显示你感兴趣的那些组件。你可以在此处列出它们的类名或它们的类标签(出现在 JMeter 的 UI 中的字符串),它们不会菜单中出现的时间更长。 | 否 |
搜索路径 | JMeter 将搜索 JMeter 插件类 的路径列表(由;分隔),例如额外的采样器。路径项可以是 jar 文件或目录。此类目录中的任何 jar 文件将自动包含在 search_paths 中,子目录中的 jar 文件将被忽略。给定的值是在 lib/ext 目录中找到的任何 jar 的补充。 | 否 |
用户类路径 | JMeter 将搜索实用程序和插件依赖类的路径列表。使用你的平台路径分隔符来分隔多个路径。路径项可以是 jar 文件或目录。此类目录中的任何 jar 文件将自动包含在 user. classpath 中,子目录中的 jar 文件将被忽略。给定的值是在 lib 目录中找到的任何 jar 之外的值。所有条目都将添加到系统类加载器的类路径以及 JMeter 内部加载器的路径中。 | 否 |
plugin_dependency_paths | JMeter 将搜索实用程序和插件依赖类 的路径列表(由;分隔)。路径项可以是 jar 文件或目录。此类目录中的任何 jar 文件将自动包含在 plugin_dependency_paths 中,子目录中的 jar 文件将被忽略。给定的值是在 lib 目录中找到或由 user. classpath 属性给出的任何 jar 的补充。所有条目将仅添加到 JMeter 内部加载器的路径中。对于使用 plugin_dependency_paths 的插件依赖项,应该优先于 user. classpath。 | 否 |
用户属性 | 包含其他 JMeter 属性的文件的名称。这些添加在初始属性文件之后,但在处理-q 和-J 选项之前。 | 否 |
系统属性 | 包含附加系统属性的文件名。这些是在处理-S 和-D 选项之前添加的。 | 否 |
命令行选项和属性文件按以下顺序处理:
- -p 属性文件
- 然后加载
jmeter.properties
(或来自-p 选项的文件) - -j 日志文件
- 记录已初始化
user.properties
已加载system.properties
已加载- 处理所有其他命令行选项
另请参阅 jmeter.properties、user.properties 和 system.properties 文件中的注释,以获取有关你可以更改的其他设置的更多信息。