地址: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
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。oop
在Thread Group上是右擊,Add-->Sampler-->Java Request。post
設置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遠程服務器上分發測試計劃。