1. 入门

1.0 概述

使用 JMeter 时,您通常会遵循以下流程:

1.0.1 测试计划构建

为此,您将在 GUI 模式下运行 JMeter。
然后,您可以选择从浏览器或本机应用程序记录应用程序。您可以使用菜单文件 → 模板...  → 录制

请注意,您也可以手动构建您的计划。确保您阅读本文档以了解主要概念。

您还将使用以下选项之一对其进行调试:
  • 运行 → 开始没有停顿
  • 运行 → 开始
  • 线程组上验证

查看结果树渲染器或测试器(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.propertiesuser.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
镜像服务器.cmd
在 CLI 模式下运行 JMeter 镜像服务器
关机.cmd
运行 Shutdown 客户端以优雅地停止 CLI 模式实例
停止测试.cmd
运行 Shutdown 客户端突然停止 CLI 模式实例
特殊名称LAST可以与jmeter-n.cmdjmeter-t.cmdjmeter-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_ARGSJMETER_OPTS。所有其他选项,如HEAPGC_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 选项,例如内存设置)。
镜像服务器.sh
在 CLI 模式下运行 JMeter 镜像服务器
关机.sh
运行 Shutdown 客户端以优雅地停止 CLI 模式实例
停止测试.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_ARGSJMETER_OPTS。所有其他选项,如HEAPGC_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_HOMEJAVA_HOME都为空,JMeter 将尝试猜测JAVA_HOME。如果同时设置了JRE_HOMEJAVA_HOME ,则使用JAVA_HOME
JVM_ARGS
启动 JMeter 时要使用的 Java 选项。这些将在JMETER_OPTS之前和其他 JVM 选项之后添加。默认为空

1.4.1 JMeter 的类路径

JMeter 会自动从以下目录中的 jar 中查找类:

JMETER_HOME/lib
用于实用罐子
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.classpathplugin_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
[代理身份验证的用户名 - 如果需要]
-一种
[代理身份验证的密码 - 如果需要]
示例
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.proxyUserhttp.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]
在哪里:
-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.jmetercom.example.foo),但如果类别名称以jmeterjorphan 开头,则为org.apache。 将在内部添加到类别名称输入以构造完整的类别名称(即org.apache.jmeterorg.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 映射到新级别:
  • 调试
  • 信息
  • 警告
  • 错误
  • 错误
  • 离开
由于SLF4J API 不支持FATAL_ERROR,因此将其视为ERROR,而不是现有代码不中断。还有FATAL日志级别选项。
从 3.2 开始额外支持TRACE级别,它不如DEBUG特定。查阅 SLF4J 或 Apache Log4J 2 文档以了解详细信息。
JMeter 通常不使用弹出对话框来显示错误,因为这些会干扰运行测试。它也不会报告拼写错误的变量或函数的任何错误;相反,引用只是按原样使用。有关详细信息,请参阅函数和变量

如果 JMeter 在测试期间检测到错误,则会将一条消息写入日志文件。日志文件名在log4j2.xml文件中定义(或使用-j选项,见下文)。它默认为jmeter.log,可以在启动 JMeter 的目录中找到。

菜单选项 → 日志查看器 在 JMeter 主窗口的底部窗格中显示日志文件。

在 GUI 模式下,日志文件中记录的错误/致命消息的数量显示在右上角。

错误/致命计数器
错误/致命计数器

命令行选项-j jmeterlogfile允许在读取初始属性文件之后以及处理任何其他属性之前进行处理。因此,它允许覆盖jmeter.log的默认值。将测试计划名称作为参数的 jmeter 脚本(例如jmeter-n.cmd)已更新为使用测试计划名称定义日志文件,例如对于测试计划Test27.jmx,日志文件设置为Test27。日志

在 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选项之前添加的。

命令行选项和属性文件按以下顺序处理:

  1. -p 属性文件
  2. 然后加载jmeter.properties(或来自-p选项的文件)
  3. -j 日志文件
  4. 记录已初始化
  5. user.properties已加载
  6. system.properties已加载
  7. 处理所有其他命令行选项

另请参阅jmeter.propertiesuser.propertiessystem.properties文件中的注释,以获取有关您可以更改的其他设置的更多信息。

Go to top