1. 简介
Apache JMeter是100%纯java桌面应用程序,被设计用来测试C/S结构的软件(例如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
Java Activation Framework - JavaMail需要 Java Mail - mail 显示 and SOAP 测试需要 JMS - JMS 取样器
General Java download page
?
? ? ? ? ?
详细参见安装的jar包中的 JMeter Classpath 一章
下一步, 开始使用JMeter并且参见用户手册构建测试计划一章使自己更加熟悉JMeter基础 (例如,添加和删除元素)。
最后, 参见如何构建一个明确类型的测试用例的适合章节。例如,如果你对Web应用测试感兴趣,那就参见构建一个Web测试计划。其他测试计划的细节是JDBC, FTP, and JNDI。
一旦你熟练构建和执行JMeter测试计划, 通过你的测试计划你会观察到给你更多帮助的各种元素的配置(定时器, 监听器, 断言, 和其他)。 2.1 需求
JMeter 需要运行环境匹配的最小需求。 2.1.1 Java 版本
JMeter 需要一个完整适当的JVM 1.3或更高的版本. 我们现在尽力与JVM 1.3保持兼容,然而JMeter 在1.4或者更高运行的会最好。
因为JMeter 仅使用Java标准API, 请不要把因为JRE实现版本而无法运行JMeter的bug报告提交。
Java 1.3 不包括 SSL (HTTPS) 支持 - 你将需要下载 JSSE. 同样, 它不会像其他更高版本的Java那样好的运行。为了更好的结果使用Java1.4或者1.5。
? ? ?
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.3或者更高。 2.2.2 SAX XML解析器
JMeter 使用 Apache's 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 加密
(HPPS)的web服务器, JMeter 需要一个提供SSL实现 (例如 Sun的 Java Secure 为了测试一个使用SSL加密
Sockets Extension - JSSE)。包含需要的加密包到JMeter的 classpath 。 同样,通过注册SSL提供者更新 jmeter.properties 。
为了更好的管理证书,也要有一个SSL 管理器 。
注意
如果你在JDK1.4上运行,你将不需要下载JSSE,因为SUN已经集成它到JDK1.4中做为标准类库了。
JMeter 代理服务器(见下)不支持记录SSL(https)。 2.2.5 JDBC 驱动
如果你需要JDBC测试.确认文件是一个jar文件,而不是zip。 你需要添加你的厂商的JDBC驱动到classpath,
2.2.6 Apache SOAP
Apache SOAP 需要 mail.jar 和 activation.jar. 你需要下载并拷贝两个jar文件到你jmeter/lib 目录.一旦文件放到那里,JMeter 会自动找到它们。
2.3 安装
快速安装JMeter。细节依赖你下载的发布文件。
注意
避免在一个有空格的路径安装 JMeter。这将导致远程测试出现问题。 详细参见安装的jar包中的 JMeter Classpath 一章
2.3.1 下载最新版本
我们推荐大多数用户运行最新版本。
要安装一个构建版本,简单解压zip/tar文件到你想安装JMeter的目录。保证一个JRE/JDK正确的安装并且设置环境变量JAVA_HOME,其它不需要做什么了。 2.3.2 下载夜晚构建
如果你不介意使用beta版软件,你可以下载运行最新夜晚构建。 要安装一个夜晚构建,解压_bin和_lib zip/tar文件到相同的目录结构。保证一个JRE/JDK正确的安装并且设置环境变量JAVA_HOME, JMeter 就可以正确的运行了。 2.4 运行 JMeter
要运行JMeter, 运行 jmeter.bat (for Windows) 或者 jmeter (for Unix) 文件。 JMeter 必须从 JMeter 的bin 目录 (那些文件没有发现的地方)启动。如果jmeter.bat文件能够的话,它试图改变到一个适当的目录。
2.4.1 JMeter Classpath
JMeter 自动从在它的/lib 和 /lib/ext目录中的jar包发现类。如果你开发新的 JMeter 组件,你可以压缩它们成jar包并拷贝到 JMeter 的 /lib/ext 目录。JMeter 将会自导发现在这里的任何jar包的JMeter 组件。如果你不想把扩展jar包放到lib/ext 目录,可以在jmeter.properties中定义search_paths属性。不要使用lib/ext 给那些有用的jar包;它仅仅是存放 JMeter 组件。
其他jar包 (例如 JDBC, 和任何JMeter代码需要支持的类库)应该被代替放在lib目录。
注意
JMeter 会发现.jar文件,而不是.zip文件。
你可以在$JAVA_HOME/jre/lib/ext安装有用的jar文件,或者(自从 2.1.1版本)你可以在jmeter.properties中设置user.classpath属性。
注意设置CLASSPATH 环境变量将不起作用。这是因为JMeter 使用\--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
(不是 HTTPS)浏览器会话。这 JMeter也有自己的内建 HTTP代理服务器,来记录HTTP
是和上面的代理设置描述不混淆的,它是在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 10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Running the test! 10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group BSH. Ramp up = 1.
10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Continue on error 10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 started 10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 is done 10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Test has ended
日志文件对发现错误原因很有帮助,作为JMeter不会打断一个测试来显示一个错误对话框。 2.4.7 命令行选项目录
调用JMeter的 \-h, --help 打印使用信息并退出 -v, --version 打印版本信息并推出
-p, --propfile {argument} 使用的JMeter属性文件 -q, --addprop {argument} 附加的属性文件
-t, --testfile {argument} 运行的JMeter测试文件(.jmx) -l, --logfile {argument} 日志取样文件 -n, --nongui 非用户界面运行JMeter -s, --server 运行JMeter服务器
-H, --proxyHost {argument} 设置JMeter使用的代理服务器 -P, --proxyPort {argument} 设置JMeter使用的代理服务器端口 -u, --username {argument} 设置JMeter使用的代理服务器用户名 -a, --password {argument} 设置JMeter使用的代理服务器密码
-J, --jmeterproperty {argument}={value} 定义附加的 JMeter 属性 -D, --systemproperty {argument}={value} 定义附加的 System 属性 -S, --systemPropertyFile {filename} 一个属性文件被做为系统属性添加 -L, --loglevel {argument}={value} 定义日志等级: [category=]level 例如 jorphan=INFO or jmeter.util=DEBUG
-r, --runremote从非用户界面模式启动远程服务器 -d, --homedir {argument} 使用的JMeter目录 2.5 配置 JMeter
如果你希望改变JMeter运行时的属性你需要改变在/bin目录的jmeter.properties文件,或者创建你自己的jmeter.properties文件并且在命令行指定它。
注意
自从 2.1.2,你能够通过JMeter属性user.properties在文件中定义附加的JMeter属性,user.properties默认值是user.properties。如果在当前目录被发现,这个文件被自动加载。类似的,system.properties 被用来更新系统属性。
参数
属性 ssl.provider
描述
需要
你可以为你的SSL实现指定类。如果你想使用来自sun的No
JSSE,是这样:
com.sun.net.ssl.internal.ssl.Provider。JMeter默认提供https支持是在你使用 JDK1.4或者你使No
用把JSSE类的jar包放到JMeter classpath中的JDK1.3
时候。
xml.parser remote_hosts
你可以指明一个你的XML解析器实现。 默认值是:
org.apache.xerces.parsers.SAXParser
No
逗号分割远程JMeter主机列表。如果你在一个分布式环境No
JMeter中文使用手册



