要运行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”或者工具栏上的按钮调出模版对话框。
template

选择对应的模版,点击create~,以FTP模版为例

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>

更详细的log4j2的配置

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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐