Jmeter 中文手册
1. 简介
Apache JMeter 是 100%纯 java 桌面应用程序,被设计用来测试客户端/服务器结
构的软件(例如 web 应用程序)。它可以用来测试包括基于静态和动态资源程序
的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP 服务器等等。
JMeter 可以用来在一个服务器、网络或者对象上模拟重负载来测试它的强度或
者分析在不同的负载类型下的全面性能。
另外,JMeter 能够通过让你们用断言创建测试脚本来验证我们的应用程序是否
返回了我们期望的结果,从而帮助我们回归测试我们的程序。为了最大的灵活性,
JMeter 允许我们使用正则表达式创建断言。
1.1 历史
Apache 软件组织的 Stefano Mazzocchi 是 JMeter 的创始人。他编写它起初是为
了测试 Apache JServ 的性能(一个已经被 Apache Tomcat 工程所替代的工程)。
我们重新设计 JMeter 来增强用户界面并增加功能测试的能力。
1.2 未来
我们希望看到作为开发者利用它的可插入架构使 JMeter 的功能快速扩展。未来
发展的主要目标是在没有影响 JMeter 的负载测试能力的情况下尽可能使 JMeter
成为最实用的回归测试工具。
2. 入门
开始使用 JMeter 最容易的方法是首先下载最新版 并且安装它。这个版本包含所
有你在构建和运行 Web,FTP,JDBC,和 JNDI 等测试时使用需要的所有文件。
如果你想执行 JDBC 测试,你当然需要从供应商得到适当的 JDBC 驱动。JMeter
没有提供任何 JDBC 驱动。
你可能需要下载的其它软件:
BeanShell - BeanShell 函数和测试元件需要
Java Activation Framework - JavaMail 需要
Java Mail - Mail 可视化,Mail Reader 和 WebService(SOAP)取样器需要
JMS - JMS 取样器需要
General Java download page
详细参见 JMeter Classpath 一章安装附加的 jar 包
下一步, 开始使用 JMeter 并且参见用户手册创建一个测试计划一章使自
己更加熟悉 JMeter 基础 (例如,添加和删除元件)。
最后, 参见如何构建一个明确类型的测试用例的适合章节。例如,如果你对 Web
应用测试感兴趣,那就参见创建一个 Web 测试计划。其他具体的测试计划章节是:
高级 Web 测试计划
JDBC
FTP
JMS 点到点
JMS 主题
LDAP
LADP 扩展
WebServices (SOAP)
一旦你熟练创建和执行 JMeter 测试计划, 通过你的测试计划你会观察到给你更
多帮助的各种元件的配置(定时器, 监听器, 断言, 和其他)。
2.1 需求
JMeter 需要最小需求的运行环境。
2.1.1 Java 版本
JMeter 需要一个完全适当的 JVM1.4 或者更高
因为 JMeter 仅使用 Java 标准 API, 请不要把因为 JRE 实现版本而无法运行
JMeter 的 bug 报告提交。
2.1.2 操作系统
JMeter 是 100%纯 Java 应用程序并且能够正确的在任何有适当的 Java 实现的操
作系统上运行。
JMeter 在下列环境已经被测试:
Unix (Solaris, Linux, 等)
Windows (98, NT, 2000, xp)
OpenVMS Alpha 7.3+
2.2 可选
如果你计划做 JMeter 开发或者想使用 SUN 的 java 标准扩展包,你将需要下列更
多的可选包。
2.2.1 Java 编译器
如果你想编译 JMeter 源代码或者开发 JMeter 插件,你将需要一个完整的适当的
JDK1.4 或者更高。
2.2.2 SAX XML 解析器
JMeter 使用 Apache 的 Xerces XML 解析器,你可以选择告诉 JMeter 使用一
个不同的 XML 解析器。 这样做,把第三方的解析器的类包包含在 JMeter 的
classpath 中, 并更新 jmeter.properties 文件里的解析器实现的全类名。
2.2.3 Email 支持
JMeter 有有限的 Email 能力。 它能够发送基于测试结果的 Email,并且支持
POP/IMAP 取样器。它现在不支持 SMTP 取样。 为了能够支持 Email, 需要添加
Sun 的 JavaMail 包和 activation 包到 JMeter classpath 。
2.2.4 SSL 加密
为了测试一个使用 SSL 加密(HPPS)的 web 服务器, JMeter 需要一个提供 SSL
实现 (例如 Sun 的 Java Secure Sockets Extension - JSSE)。包含需要的加
密包到 JMeter 的 classpath。 同样,通过注册 SSL 提供者更新
system.properties 文件。
JMeter 默认协议等级 TLS(传输层安全性)。这可以通过修改在 jmeter.proerties
或者 user.properties 文件中的"https.default.protocol"来改变。
JMeter 被配置接受所有的证书,不管是否信赖和合法时间等。这允许在测试服
务器最大灵活性。
如果服务器需要一个客户端证书,这是可以提供的。
为了更好的管理证书,也要有一个 SSL 管理器 。
JMeter 代理服务器(见下)不支持记录 SSL(https)。
2.2.5 JDBC 驱动
如果你需要 JDBC 测试,需要添加厂商的 JDBC 驱动到 classpath。确认文件是一
个 jar 文件,而不是 zip。
2.2.6 Apache SOAP
Apache SOAP 需要 mail.jar 和 activation.jar. 你需要下载并拷贝这两个
jar 文件到你 jmeter/lib 目录.一旦文件放到那里,JMeter 会自动找到它们。
2.2.7 BeanShell
为了运行 BeanShell 函数或者任何 BeanShell 测试元件(取样器,定时器等),
你需要从 http://www.beanshell.org/ 下载 beanshell 的 jar 文件并拷贝 jar
文件到 jmeter/lib 目录,JMeter 会自动找到它。
2.2.8 ActiveMQ 3.0 类库
详细参见 http://activemq.apache.org/initial-configuration.html
详细参见 JMeter Classpath 一章安装附加的 jar 包
2.3 安装
避免在一个有空格的路径安装 JMeter。这将导致远程测试出现问题。
我们推荐大多数用户运行最新版本 。
要安装一个构建版本,简单解压 zip/tar 文件到你想安装 JMeter 的目录。保证
一个 JRE/JDK 正确的安装并且设置环境变量 JAVA_HOME,其它不需要做什么了。
安装目录接口应该看到的像这样一些东西(2.3.1 版本):
jakarta-jmeter-2.3.1
jakarta-jmeter-2.3.1/bin
jakarta-jmeter-2.3.1/docs
jakarta-jmeter-2.3.1/extras
jakarta-jmeter-2.3.1/lib/
jakarta-jmeter-2.3.1/lib/ext
jakarta-jmeter-2.3.1/lib/junit
jakarta-jmeter-2.3.1/printable_docs
如果你想的话你可以重命名父目录(例如 jakarta-jmeter-2.3.1) ,但是不要
改变任何子目录命。父目录路径中不能包含任何空格;如果包含,你运行客户端
-服务器模式会有问题。
2.4 运行 JMeter
要运行 JMeter, 运行 jmeter.bat (for Windows) 或者 jmeter (for Unix) 文
件。那些文件在 bin 目录下。稍微暂停后,JMeter GUI 会显示出来。
在 bin 目录你会发现有些附加脚本很有用。Windows 脚本文件(CMD 文件需要
Win2K 或者更新):
jmeter.bat - 运行 JMeter(默认在 GUI 模式)
jmeter-n.cmd - 使用一个 JMX 文件运行非 GUI 测试
jmeter-n-r.cmd - 使用一个 JMX 文件远程运行一个非 GUI 测试
jmeter-t.cmd - 在 GUI 模式使用一个 JMX 文件
jmeter-server.bat - 以服务器模式启动 JMeter
注意: LAST 可以在 jmeter-n.cmd, jmeter-t.cmd 和 jmeter-n-r.cmd 中使用,
意味着最后一次测试会运行.
Unix 脚本文件; 可以运行在大多 Linux/Unix 系统.
jmeter - 运行 JMeter(默认在 GUI 模式)
jmeter-server - 以服务器模式启动 JMeter
2.4.1 JMeter Classpath
JMeter 自动从下列目录中的 jar 文件发现类。
JMETER_HOME/lib - 用来放使用的 jar 文件
JMETER_HOME/lib/ext - 用来放 JMeter 组件和扩展
如果你开发新的 JMeter 组件,你可以压缩它们成 jar 包并拷贝到 JMeter 的
/lib/ext 目录。JMeter 将会自动发现在这里的任何 jar 文件中的 JMeter 组件。
支持的 jar 文件(类库)应该放在 lib 目录.
如果你不想把扩展 jar 包放到 lib/ext 目录,可以在 jmeter.properties 中定义
search_paths 属性。不要使用 lib/ext 给那些公用的 jar 包;它仅仅是存放
JMeter 组件。
其他 jar 包 (例如 JDBC, 和任何 JMeter 代码需要支持的类库)应该被代替放在
lib 目录 - 而不是 lib/ext 目录。
注意
JMeter 会发现.jar 文件,而不是.zip 文件。
你可以在$JAVA_HOME/jre/lib/ext 安装有用的 jar 文件,或者(自从 2.1.1 版本)
你可以在 jmeter.properties 中设置 user.classpath 属性。
注意设置 CLASSPATH 环境变量将不起作用。这是因为 JMeter 使用"java --jar"
启动,并且 java 命令无记录忽略 CLASSPATH 变量,并且当使用-jar 选项时
-classpath/-cp 选项也被使用。[所有的 java 程序都是这样,不仅仅是 JMeter。]
2.4.2 使用代理服务器
如果你从防火墙/代理服务器后测试,你需要提供给 JMeter 防火墙/代理服务器
的主机名和端口号。这样做,从命令行使用以下参数运行 jmeter.bat/jmeter
文件:
-H [代理服务器主机名或者 ip 地址]
-P [代理服务器端口]
-N [非代理主机] (例如: *.apache.org|localhost)
-u [代理证书用户名- 如果需要]
-a [代理证书密码 - 如果需要]
例如 : jmeter -H my.proxy.server -P 8000 -u username -a password -N
localhost
或者, 你使用 --proxyHost, --proxyPort, --username, and --password
JMeter 也有自己的内建 HTTP 代理服务器,来记录 HTTP(不是 HTTPS)
浏览器会话。这是和上面的代理设置描述不混淆的,它是在 JMeter 发出
HTTP 或者 HTTPS 请求时使用的。
2.4.3 非用户界面模式 (命令行模式)
为了不相互影响测试, 你可以选择运行没有用户界面的 JMeter。这样做,使用
下列命令选项:
-n 这是指定 JMeter 在非用户界面模式运行
-t [包含测试计划的 JMX 文件的名字]
-l [记录取样结果的 JTL 文件的名字]
-r 运行在 jmeter.properties 文件里所有的远程服务器 (或者通过在命令行覆
盖属性指定远程服务器)
这个脚本也允许我们指定可选的防火墙/代理服务器信息:
-H [代理服务器主机名或者 ip 地址]
-P [代理服务器端口]
例如 : jmeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000
2.4.4 服务器模式
为了分布测试 ,在服务器模式运行 JMeter,并且通过用户界面控制每一台服务
器。
jmeter-server/jmeter-server.bat 脚本使用适当的 classpath 为你开始远程注
册。如果失败,参见关于 JMeter 服务器启动细节。
运行 jmeter-server/jmeter-server.bat,加上下列选项命令:
这个脚本也允许我们指定可选的防火墙/代理服务器信息:
-H [代理服务器主机名或者 ip 地址]
-P [代理服务器端口]
例如 : jmeter-server -H my.proxy.server -P 8000
2.4.5 通过命令行覆盖属性
Java 系统属性,JMeter 属性,和日志属性可以通过命令行直接覆盖(代替更改
jmeter.properties 文件)。这样做,使用下列选项:
-D[prop_name]=[value] - 定义一个 java 系统属性值。
-J[prop name]=[value] - 覆盖一个 JMeter 属性。
-L[category]=[priority] - 覆盖一个日志设置,设置一个特殊目录为给定的优
先级。
-L 标志也可以使用没有目录名来设置根目录日志等级。
例如 :
jmeter -Duser.dir=/home/mstover/jmeter_stuff \
-Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG
jmeter -LDEBUG
注意
命令行参数在启动时较早被处理,但是在日志系统被设置以后。尝试使
用-J 标志更新 log_level 或者 log_file 属性无效。
2.4.6 日志和错误信息
如果 JMeter 发现一个错误, 一个消息将被写入日志文件。日志文件名在
jmeter.properties 文件中定义。一般定义为 jmeter.log 。并且在 JMeter 启
动目录,例如 bin。
当在 Windows 下运行时,如果你不设置 Windows 显示文件扩展名,文件名会仅显
示为 JMeter。[你可以做一些事都很容易地发现伪装成文本文件的病毒和垃圾文
件...]
还有记录错误,jmeter.log 文件记录一些测试运行信息。例如:
10/17/2003 12:19:20 PM INFO - jmeter.JMeter: Version 1.9.20031002
10/17/2003 12:19:45 PM INFO - jmeter.gui.action.Load: Loading file:
c:\mytestfiles\BSH.jmx