地址:http://jmeter.apache.org/download_jmeter.cgi html
运行bin/jmeter.batjava
在TestPlan节点上右键,Add-->Threads(Users)-->Thread Group。node
Number of Threads (Users):要模拟的并发用户量。
Ramp Up Period (in seconds):在多长时间内均匀启动全部的线程。好比Number of Threads设为10,Ramp Up Period设为1,则jmeter每隔0.1秒启动1个线程。
Loop Count:单用户任务重复执行的次数。能够设为Forever,这样jmeter就不会自动中止,须要强制终止。
还能够设置Scheduler Configuration。这里有两组设置:指定StartTime和End Time让jmeter在特定的时间区段内执行工做;Startup Delay表示从当前时刻开始延迟多长时间开始运行,Duration设定运行时长。apache
固然传统的方法是让jmeter向服务器发送Http Request或FTP Request,但这里不做展现。服务器
假如咱们要模拟多用户并发向Zookeeper Cluster发送查询znode的请求,首先要写1个程序来指定单用户的请求行为。并发
新建一个Java Project,导入jmeter/lib/ext下的两个jar包:ApacheJMeter_core.jar和ApacheJMeter_java.jar。ide
?oop
package
test;
import
org.apache.jmeter.config.Arguments;
import
org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import
org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import
org.apache.jmeter.samplers.SampleResult;
import
org.apache.zookeeper.ZooKeeper;
public
class
Create
extends
AbstractJavaSamplerClient{
private
String nodePath=
null
;
private
String timeout_str=
null
;
private
SampleResult results;
//设置传入的参数,能够设置多个,已设置的参数会显示到Jmeter的参数列表中
public
Arguments getDefaultParameters() {
Arguments params =
new
Arguments();
params.addArgument(
"nodePath"
,
""
);
params.addArgument(
"timeout_str"
,
"5000"
);
return
params;
}
//初始化方法,实际运行时每一个线程仅执行一次,在测试方法运行前执行
public
void
setupTest(JavaSamplerContext arg0) {
results =
new
SampleResult();
nodePath = arg0.getParameter(
"nodePath"
);
//获取在Jmeter中设置的参数值
if
(nodePath !=
null
&& nodePath.length() >
0
) {
results.setSamplerData(nodePath);
}
timeout_str=arg0.getParameter(
"timeout_str"
);
if
(timeout_str !=
null
&& timeout_str.length() >
0
) {
results.setSamplerData(timeout_str);
}
}
//测试执行的循环体,根据线程数和循环次数的不一样可执行屡次
@Override
public
SampleResult runTest(JavaSamplerContext arg0) {
int
timeout=Integer.parseInt(timeout_str);
boolean
success=
true
;
results.sampleStart();
//事务的起点
try
{
ZooKeeper zkp=
new
ZooKeeper(
"localhost:2181"
,timeout,
null
);
zkp.getData(nodePath,
false
,
null
);
zkp.close();
}
catch
(Exception e) {
success=
false
;
}
finally
{
results.sampleEnd();
//事务的终点
results.setSuccessful(success);
//设置本次事务成功或失败
}
return
results;
}
//结束方法,实际运行时每一个线程仅执行一次,在测试方法运行结束后执行
public
void
teardownTest(JavaSamplerContext arg0) {
}
}
|
将project导出为jar包,放到jmeter/lib/ext下,重启jmeter。测试
在Thread Group上是右击,Add-->Sampler-->Java Request。google
设置nodePath和timeout的值。
在TestPlan上右击,Add-->Listener-->Aggregate Report。Jmeter生成的报告有多种,这里以Aggregate Report为例。
能够指定将report保存到某个文件,如上图中所示保存到report.csv,在非GUI模式下运行Jmeter这是很是必要的。
能够在bin/jmeter.properties中设置report文件的默认格式,你可能要常常要更改这两项配置:jmeter.save.saveservice.output_format=csv #默认有文件格式为jtl jmeter.save.saveservice.default_delimiter=\t #默认使用","做为域之间的分隔符
点击Configure能够本身定义report中你所关心的数据项。
好比我只关心每一个请求是否成功,以及每一个请求所用的时间,因此只勾选了两项。
PerfMon用来监控Server的CPU、I/O、Memory等状况。
1. 插件下载地址:http://code.google.com/p/jmeter-plugins/wiki/PerfMon
2. 把JMeterPlugins.jar放到jmeter客户端的jmeter/lib/ext下。
3. 启动jmeter,添加Listener时你就看到PerfMon Metrics Collectors了。
4. 另外还须要把下载下来的PerfMon解压后放到全部的被测试的服务器上,并运JMeterPlugins/serverAgent/startAgent.sh,默认工做在4444端口。
5. 使用PerfMon截图:
再次提醒一下,在非GUI模式下运行Jmeter时指定把result保存到一个文件是很是必要的。
具体方法是:先在GUI模式下建立TestPlan,保存为jmx文件。命令行启动jmeter:./ApacheJMeter -n -t testplan.jmx (选项-n表示non-GUI,-t指定TestPlan文件)。运行结束后Aggregate Report和PerfMon Metrics Collector就会保存在你指定的文件中。把保存PerfMon Metrics Collector的文件拖到Jmerter GUI中就能够看到CUP等使用情况拆线图了。
应用进场景:用一台机器(称为JMeter客户端)上的jmeter同时启动另外几台机器(称为JMeter远程服务器)上的jmeter。
1. 保证jmeter客户端和jmeter远程服务器采用相同版本的jmeter和JVM。
2. jmeter客户端和jmeter远程服务器最好在同一个网段内。
3. 在jmeter远程服务器上运行JMETER_HOME/bin/jmeter-server (UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)脚本 。
4. 在jmeter客户端上修改/bin/jmeter.properties文件,找到属性"remote_hosts",使用JMeter远程服务器的IP地址做为其属性值。能够添加多个服务器的IP地址,以逗号做为分隔。
例如:
#remote_hosts=127.0.0.1
remote_hosts=9.115.210.2:1099,9.115.210.3:1099,9.115.210.4:1099
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099
5. 在jmeter客户端上启动jmeter:
./jmeter -n -t plan.jmx -r #选项-r表示远程启动(remote)
jmeter客户端会自动向jmeter远程服务器上分发测试计划。