要运行JMeter, 只需要运行 jmeter.bat (for Windows) 或jmeter (for Unix) 文件。jmeter.bat和jmeter在 JMeter的bin 目录中。经过短暂的初始化,jmeter UI界面将会启动。
Jmeter有两种模式
- GUI:通常用来制作编辑测试脚本
- NON GUI:通常用来进行压力测试
Jmeter的bin目录
jmeter的bin目录还存在一些非常有用的脚本,在不同的操作系统中有不同的命令。
windows系统下bin目录中的文件
*.cmd文件运行需要系统在win2000以上的版本
文件名 | 含义 |
---|---|
jmeter.bat | 运行Jmeter(这个默认是带win shell控制台的)(默认使用GUI模式) |
jmeterw.cmd | 运行Jmeter,但是不显示win shell控制台(可以对比jmeter.bat启动的jmeter)(默认使用GUI模式) |
jmeter-n.cmd | 将JMX文件拖拽到该命令文件上,将会以non-GUI模式运行该测试 |
jmeter-n-r.cmd | 将JMX文件拖拽到该命令上,将会在远程测试机上以non-GUI模式运行该测试 |
jmeter-t.cmd | 将JMX文件拖拽到该命令上,使用GUI模式加载该JMX |
jmeter-server.bat | 使用服务模式启动Jmeter |
mirror-server.cmd | 使用non-GUI模式启动Jmeter镜像服务 |
shutdown.cmd | 运行Shutdown客户端关闭一个non-GUI实例 |
stoptest.cmd | 运行Shutdown客户端关闭一个non-GUI实例 |
“LAST”可以作为一个特殊的名字在jmeter-n.cmd,jmeter-t.cmd和jmeter-n-r.cmd中使用,意味着与最后一个测试计划交互运行。
环境变量JVM_ARGS用来覆盖jmeter.bat中的JVM设置
set JVM_ARGS=”-Xms1024m -Xmx1024m -Dpropname=propvalue”
jmeter -t test.jmx …
Unix/Lnix脚本文件
可以在大部分Linux/Unix系统上运行
文件名 | 含义 |
---|---|
jmeter | 运行Jmeter(模式是GUI模式)。定义一些JVM设置,但并不是对所有的JVM都生效。 |
jmeter-server | 使用服务模式运行jmeter(用合适的参数调用jmeter脚本) |
jmeter.sh | 基础的Jmeter脚本(可以调整JVM选项比如内存设置) |
mirror-server.sh | 使用non-GUI模式运行jmeter镜像服务 |
shutdown.sh | 运行Shutdown客户端关闭一个non-GUI实例 |
stoptest.sh | 运行Shutdown客户端关闭一个non-GUI实例 |
若某些JVM选项不支持,可以编辑jmeter shell脚本进行修改。环境变量JVM_ARGS用来覆盖JVM设置
JVM_ARGS=”-Xms1024m -Xmx1024m” jmeter -t test.jmx [etc.]
JMeter Classpath
JMeter 自动从安装目录下的/lib 和 /lib/ext目录下的jar包中扫描类。
自定义开发的 JMeter 组件,可以压缩成jar包并拷贝到 JMeter 的 /lib/ext 目录。JMeter 将会自动发现jar包中的JMeter 组件。若不想把扩展jar包放到lib/ext 目录,可以在jmeter.properties中定义search_paths属性。
帮助类和依赖jars放在lib目录下,若不想放在lib目录,则可以在jmeter.properties中使用user.classpath和plugin_dependency_paths
其他jar包 (例如 JDBC, 和任何JMeter代码需要支持的类库)应该放在lib目录或者是user.classpath,而不是lib/ext目录中。
JMeter 会发现.jar文件,而不是.zip文件。
你可以在$JAVA_HOME/jre/lib/ext安装jar文件,或者在jmeter.properties中设置user.classpath属性。
注意设置CLASSPATH 环境变量将不起作用。这是因为JMeter使用”java -jar”启动,并且java命令无记录忽略CLASSPATH 变量,并且当使用-jar选项时-classpath/-cp 选项也被使用。
所有的java程序都是这样,不仅仅是JMeter。
使用模版创建测试计划
通过菜单 “文件->templates”或者工具栏上的按钮调出模版对话框。
选择对应的模版,点击create~,以FTP模版为例
使用代理服务器
如果你在防火墙/代理服务器后测试,你需要提供给JMeter防火墙/代理服务器的主机名和端口号。这样做,从命令行使用以下参数运行jmeter.bat/jmeter文件:
参数 | 含义 |
---|---|
-H | [代理服务器主机名或者ip地址] |
-P | [代理服务器端口] |
-N | [非代理主机] (例如: *.apache.org |
-u | [代理证书用户名- 如果需要] |
-a | [代理证书密码 - 如果需要] |
例如 :
jmeter -H my.proxy.server -P 8000 -u username -a password -Nlocalhost
同样也可以使用 –proxyHost, –proxyPort, –username, –password作为参数名,他们分别对应-H、-P、-u、-a的长选项格式。
命令行上提供的参数对系统上的其他用户可见
如果提供了代理主机和端口参数,Jmeter设置以下系统属性
- http.proxyHost
- http.proxyPort
- https.proxyHost
- https.proxyPort
如果提供了不使用代理的主机列表,Jmeter设置以下系统属性
- http.nonProxyHosts
- https.nonProxyHosts
因此,如果您不希望同时设置http和https代理,那么您可以在system.properties中定义相关的属性使之代替命令行参数。
代理设置也可在测试计划中定义,使用HTTP(S) Request Defaults配置或者HTTP Request取样器元素。
JMeter也有自己的内建 HTTP代理服务器,来记录HTTP (不是 HTTPS)浏览器会话。这是和上面的代理设置描述不混淆的,它是在JMeter发出HTTP或者HTTPS请求时使用的。
非用户界面模式 (命令行模式)
为了不相互影响测试, 你可以选择运行没有用户界面的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
如果jmeterengine.stopfail.system.exit设置成true(默认是false),如果不能停止所有线程则调用system.exit(1).通常情况下这个设置是非必要的。
服务器模式
支持分布测试,在远程服务器节点使用服务模式运行JMeter,并且通过主控机的用户界面控制每一台服务器。也可使用non-GUI模式运行远程测试,在每台远程主机上运行jmeter-server/jmeter-server.bat启动服务。
jmeter-server/jmeter-server.bat 脚本使用适当的classpath为你开始远程注册。如果失败,参见关于JMeter服务器启动细节。
运行jmeter-server/jmeter-server.bat,加上下列选项命令:
这个脚本也允许我们指定可选的防火墙/代理服务器信息:
参数 | 函数 |
---|---|
-H | [代理服务器主机名或者ip地址] |
-P | [代理服务器端口] |
例如 :
jmeter-server -H my.proxy.server -P 8000
若想运行完测试直接退出,可以设置Jmeter属性
server.exitaftertest=true.
使用non-GUI模式运行测试,使用命令行
jmeter -n -t testplan.jmx -r [-Gprop=val] [-Gglobal.properties] [-X]
属性 | 含义 |
---|---|
-G | 在服务段设置Jmeter属性 |
-X | 在测试结束时退出服务端 |
-Rserver1,server2 | 提供服务器列表代替-r选项,覆盖远程主机列表,但是不能为属性 |
如果 jmeterengine.remote.system.exit属性设置为true(默认是false),在测试结束时RMI停止后调用system.exit(0).通常情况下是非必要的。
通过命令行覆盖属性
Java系统属性,JMeter属性可以通过命令行直接覆盖(代替更改jmeter.properties文件)。这样做,使用下列选项:
属性 | 含义 |
---|---|
-D[prop_name]=[value] | 定义一个java系统属性值。 |
-J[propname]=[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属性无效。
日志和错误信息
从Jmeter3.2,jmeter的log配置不再通过配置文件配置如jmeter.properties,而是通过apache log4j2配置文件(log4j2.xml,默认这个文件凡在jmeter的启动目录),另外从3.2以后扩展插件写日志必须有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>
jmeter.log 文件记录一些测试运行信息。例如:
2017/08/01 14:55:49 INFO - jmeter.util.BSFTestElement: Registering JMeter version of JavaScript engine as work-round for BSF-22
2017/08/01 14:55:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Cannot find .className property for htmlParser, using default
2017/08/01 14:55:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/html is
2017/08/01 14:55:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for application/xhtml+xml is
2017/08/01 14:55:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for application/xml is
2017/08/01 14:55:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/xml is
2017/08/01 14:55:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/vnd.wap.wml is org.apache.jmeter.protocol.http.parser.RegexpHTMLParser
2017/08/01 14:55:49 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.protocol.http.control.gui.WebServiceSamplerGui
2017/08/01 14:55:49 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.protocol.http.modifier.gui.ParamModifierGui
2017/08/01 14:55:49 INFO - jmeter.protocol.http.proxy.ProxyControl: HTTP(S) Test Script Recorder SSL Proxy will use keys that support embedded 3rd party resources in file D:\Program Files\jmeter2.10\bin\proxyserver.jks
2017/08/01 14:55:50 INFO - jmeter.samplers.SampleResult: Note: Sample TimeStamps are START times
2017/08/01 14:55:50 INFO - jmeter.samplers.SampleResult: sampleresult.default.encoding is set to ISO-8859-1
2017/08/01 14:55:50 INFO - jmeter.samplers.SampleResult: sampleresult.useNanoTime=true
2017/08/01 14:55:50 INFO - jmeter.samplers.SampleResult: sampleresult.nanoThreadSleep=5000
2017/08/01 14:55:53 INFO - jmeter.gui.action.template.TemplateManager: Reading templates from:D:\Program Files\jmeter2.10\bin\templates\templates.xml
2017/08/01 15:02:55 INFO - jmeter.gui.action.Load: Loading file: D:\Program Files\jmeter2.10\bin\templates\build-ftp-test-plan.jmx
2017/08/01 15:02:55 INFO - jmeter.save.SaveService: Testplan (JMX) version: 2.2. Testlog (JTL) version: 2.2
2017/08/01 15:02:55 INFO - jmeter.save.SaveService: Using SaveService properties file encoding UTF-8
2017/08/01 15:02:55 INFO - jmeter.save.SaveService: Using SaveService properties version 2.5
2017/08/01 15:02:55 INFO - jmeter.save.SaveService: Using SaveService properties file version 1519088
2017/08/01 15:02:55 INFO - jmeter.save.SaveService: All converter versions present and correct
日志文件对发现错误原因很有帮助,作为JMeter不会打断一个测试来显示一个错误对话框。
命令行选项目录
命令行中输入错误的参数即可打印所有命令选项的一个列表:
选项 | 含义 |
---|---|
-h, - -help | 打印使用信息并退出 |
-v, - -version | 打印版本信息并推出 |
-p, - -propfile <argument> | 使用的JMeter属性文件 |
-q, - -addprop <argument> | 附加的属性文件 |
-t, - -testfile <argument> | 运行的JMeter测试文件(.jmx) |
-l, - -logfile <argument> | 日志取样文件 |
-j, - -jmeterlogfile <argument> | jmeter运行日志文件 (jmeter.log) |
-n, - -nongui | 非用户界面运行JMeter |
-s, - -server | 运行JMeter服务器 |
-H, - -proxyHost <argument> | 设置JMeter使用的代理服务器 |
-P, - -proxyPort <argument> | 设置JMeter使用的代理服务器端口 |
-N, - -nonProxyHosts <argument> | 设置不使用代理的主机列表(e.g. *.apache.org |
-u, - -username <argument> | 设置JMeter使用的代理服务器用户名 |
-a, - -password <argument> | 设置JMeter使用的代理服务器密码 |
-J, - -jmeterproperty <argument>=<value> | 定义附加的 JMeter 属性 |
-G, - -globalproperty <argument>=<value> | 定义全局属性 (发送到服务器)e.g. -Gport=123or -Gglobal.properties |
-D, - -systemproperty <argument>=<value> | 定义附加的 System 属性 |
-S, - -systemPropertyFile <argument> | 一个属性文件被做为系统属性添加 |
-L, - -loglevel <argument>=<value> | 定义日志等级: [category=]level 例如 jorphan=INFO or jmeter.util=DEBUG |
-r, - -runremote | 从非用户界面模式启动远程服务器 |
-R, - -remotestart <argument> | 启动远程服务器(覆盖远程主机列表) |
-d, - -homedir <argument> | 使用的JMeter目录 |
-X, - -remoteexit | 测试结束后退出远程server(non-GUI) |
参考
http://jmeter.apache.org/usermanual/get-started.html
原文连接:http://blog.csdn.net/yue530tomtom/article/details/76529619