您的位置:首页 > 编程语言 > Java开发

使用JMeter的Java请求功能测试Hetty性能

2013-11-15 17:57 316 查看


1.JMeter介绍

JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现。JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源)。JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。


2.启动JMeter

进入JMeter的bin目录,然后执行:

1
sudo
./jmeter.sh


3.原始的测试方法

在没有使用JMeter前,我对hetty的性能测试,都是通过自己写多线程代码去完成的,相当苦逼,相当麻烦,不过也能锻炼自己的编码能力,我先贴出比较原始的测试方法,如下:

01
public
class
RpcHessianClient
{
02
 
03
public
static
void
main(String[]
args) {
04
 
05
String
url =
"http://localhost:8081/apis/hello"
;
06
 
07
HessianProxyFactory
factory =
new
HessianProxyFactory();
08
 
09
ExecutorService
es = Executors.newFixedThreadPool(
10
);
10
 
11
int
size
=
1000000
;
12
 
13
final
CountDownLatch
cdl =
new
CountDownLatch(size);
14
 
15
try
{
16
 
17
long
start
= System.currentTimeMillis();
18
 
19
factory.setUser(
"client1"
);
20
 
21
factory.setPassword(
"client1"
);
22
 
23
factory.setOverloadEnabled(
true
);
24
 
25
final
Hello
basic = (Hello) factory.create(Hello.
class
,
26
27
url);
28
 
29
for
(
int
i
=
0
;
i < size; i++) {
30
31
es.submit(
new
Runnable()
{
32
 
33
@Override
34
35
public
void
run()
{
36
37
String
u=basic.hello(
"guolei"
);
38
 
39
//System.out.println(u);
40
 
41
cdl.countDown();
42
 
43
}
44
 
45
});
46
47
}
48
cdl.await();
49
long
time
= System.currentTimeMillis() - start;
50
51
System.out.println(
"SayHello:"
);
52
53
System.out.println(
"耗时:"
+
(
double
)
time /
1000
+
"
s"
);
54
 
55
System.out.println(
"平均:"
+
((
double
)
time) / size +
"
ms"
);
56
57
System.out.println(
"TPS:"
+
(
double
)
size / ((
double
)
time /
1000
));
58
 
59
//
System.out.println("Hello," +s.getMail());
60
61
}
catch
(MalformedURLException
e) {
62
 
63
e.printStackTrace();
64
 
65
}
catch
(InterruptedException
e) {
66
67
e.printStackTrace();
68
 
69
}
finally
{
70
71
es.shutdown();
72
}
73
}
74
}


4.使用JMeter来进行现代化测试

我们要使用JMeter来测试hetty,由于hetty是一款基于hessian和netty的RPC产品,我们必须使用JMeter的JAVA请求功能来进行测试,Java请求是指JMeter对Java Class进行性能测试。首先我们需要编写测试用例:

1)新建JAVA工程。

2)引入ApacheJMeter_java.jar 、ApacheJMeter_core.jar以及测试所需要的jar(jar包在JMeter目录的lib/ext目录中)。

3)继承AbstractJavaSamplerClient类开始编写主业务。如下:

01
public
class
HettyTest
extends
AbstractJavaSamplerClient
{
02
03
private
static
String
label =
"hettyTest"
;
04
05
/**
06
 
*
执行runTest()方法前会调用此方法,可放一些初始化代码
07
 
*/
08
public
void
setupTest(JavaSamplerContext
arg0) {
09
}
10
11
/**
12
 
*
JMeter测试用例入口
13
 
*/
14
public
SampleResult
runTest(JavaSamplerContext arg0) {
15
SampleResult
sr =
new
SampleResult();
16
sr.setSampleLabel(label);
17
try
{
//
这里调用我们要测试的java类,这里我调用的是一个Test类
18
Map<String,String>
map = getDefaultParameters().getArgumentsAsMap();
19
sr.sampleStart();
//
记录程序执行时间,以及执行结果
20
Test.execute(map.get(
"ip"
),map.get(
"port"
));
21
sr.sampleEnd();
22
sr.setSuccessful(
true
);
23
}
catch
(Throwable
e) {
24
sr.setSamplerData(e.getMessage());
25
e.printStackTrace();
26
sr.setSuccessful(
false
);
//
用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功
27
}
28
return
sr;
29
}
30
31
/**
32
 
*
JMeter界面中可手工输入参数,代码里面通过此方法获取
33
 
*/
34
public
Arguments
getDefaultParameters() {
35
36
Arguments
args =
new
Arguments();
37
args.addArgument(
"ip"
,
"localhost"
);
38
args.addArgument(
"port"
,
"8081"
);
39
return
args;
40
}
41
42
/**
43
 
*
执行runTest()方法后会调用此方法.
44
 
*/
45
public
void
teardownTest(JavaSamplerContext
arg0) {
46
}
47
48
}
Test类是我测试逻辑,如下:

01
public
class Test {
02
03
public
static void execute(String ip,String port) throws MalformedURLException {
04
 
05
 
06
String
url =
"http://"
+ip+
":"
+port+
"/apis/hello"
;
07
08
HessianProxyFactory
factory =
new
HessianProxyFactory();
09
10
factory.setUser(
"client1"
);
11
12
factory.setPassword(
"client1"
);
13
14
factory.setOverloadEnabled(
true
);
15
16
final
Hello basic = (Hello) factory.create(Hello.class,url);
17
18
//System.out.println("SayHello:"
+basic.hello("guolei"));
19
}
20
}
代码中都有注释,按照注释实际操作去理解。 System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。

4)将项目打为jar包,放到JMeter目录下的lib/ext下(将项目依赖的jar也放到此目录)。

5)重启JMeter。


5.JMeter使用

1)选中主界面左侧的“测试计划”,右键菜单->添加->Threads(Users)->线程组。

2)再选中刚才新增的"线程组",右键菜单->添加->Sampler->Java请求。

3)再选中刚才新增的"Java请求",右键菜单->添加->监视器->聚合报告。

4)Ctrl +R,开始运行, Ctrl +E,清除历史结果。





6.查看测试结果





聚合报告中基本已经包含我们所关心的几个数据了:

Samples -- 本次场景中一共完成了多少个Transaction

Average -- 平均响应时间

Median -- 统计意义上面的响应时间的中值

90% Line -- 所有transaction中90%的transaction的响应时间都小于xx

Min -- 最小响应时间

Max -- 最大响应时间

PS: 以上时间的单位均为ms

Error -- 出错率

Troughput -- 吞吐量,单位:transaction/sec

KB/sec -- 以流量做衡量的吞吐量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: