高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

Jmeter测试java程序

目录
  1. 1. 第一步:
  2. 2. 第二步
  3. 3. 第三步
  4. 4. 第四步
  5. 5. 实例
    1. 5.1. 先写一个被测试的类
    2. 5.2. 创建一个JmeterTest类,并继承AbstractJavaSamplerClient:
    3. 5.3. Export为Runnable Jar File:hello.jar
    4. 5.4. 将此hello.jar包放入JMETER_HOME\lib\ext目录;
    5. 5.5. 打开JMeter,添加线程组,添加Java请求,查看结果树。

之前写过用loadrunner测试java程序。其实Jmeter同样可以,它本身是开源、java实现的,对java的支持比较优秀。
那么问题来了,怎么使用Jmeter进行工作呢?
Alt text

第一步:

创建java工程,并把Jmeter文件夹中lib目录下的jar包添加进入工程。
Alt text

第二步

创建一个类继承AbstractJavaSamplerClient,并重写;

public Arguments getDefaultParameters();设置可用参数及默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

执行的先后顺序为:
getDefaultParameters() –> setupTest(JavaSamplerContext context) –> runTest(JavaSamplerContext context) –> teardownTest(JavaSamplerContext context)

常用的方法:

  • addArgument(“name”, “value”) 定义参数
  • sampleStart() 定义事务的开始,类似于LR的lr_start_transaction,和LR一样事务间不要放无关代码
  • sampleEnd() 定义事务的结束,类似于LR的lr_end_transaction
  • setSuccessful(true、false) 设置运行结果的成功或失败,Jmeter统计成功失败的次数,在聚合报告中能够体现。

第三步

将java工程导出为jar包,将此jar包放入JMETER_HOME\lib\ext目录

第四步

打开JMeter,创建线程组、Java Request、查看结果树,进行测试;

实例

先写一个被测试的类

简单一点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     * Copyright 2015 Focus Technology, Co., Ltd. All rights reserved.
package jmeter.test;

/**
* HelloWorld.java
*
* @author lit
*/
public class HelloWorld {

public String sayHello(String world1, String world2) {
return world1 + world2;
}

}

创建一个JmeterTest类,并继承AbstractJavaSamplerClient:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 * Copyright 2015 Focus Technology, Co., Ltd. All rights reserved.
package jmeter.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;

/**
* JmeterTest.java
*
* @author lit
*/

public class JmeterTest extends AbstractJavaSamplerClient {

private String world1;
private String world2;
private String world_final;

/**
* 这个方法是用来自定义java方法入参的。 params.addArgument("name","guodegang");表示入参名字叫name,值为guodegang。 设置可用参数及的默认值;
*/

@Override
public Arguments getDefaultParameters() {
Arguments arguments = new Arguments();
arguments.addArgument("name", "guodegang");
arguments.addArgument("age", "48");
return arguments;

}

// 每个线程测试前执行一次,做一些初始化工作;
@Override
public void setupTest(JavaSamplerContext arg0) {

}

/**
* 开始测试,从arg0参数可以获得参数值;
*/

public SampleResult runTest(JavaSamplerContext arg0) {
world1 = arg0.getParameter("name");
world2 = arg0.getParameter("age");
// 增加jmter的sample
SampleResult sr = new SampleResult();
sr.setSampleLabel("java request");
try {
// jmeter 开始统计响应时间标记
sr.sampleStart();
HelloWorld helloWorld = new HelloWorld();
world_final = helloWorld.sayHello(world1, world2);
if (world_final != null && world_final.length() > 0) {
sr.setResponseData("结果是:" + world_final, null);
sr.setDataType(SampleResult.TEXT);
}

sr.setSuccessful(true);
}
catch (Exception e) {
sr.setSuccessful(false);
e.printStackTrace();
}
finally {
// jmeter 结束统计响应时间标记
sr.sampleEnd();
}
return null;
}

// 测试结束时调用;
@Override
public void teardownTest(JavaSamplerContext arg0) {

}

/**
* 本地测试用
*
* @param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
Arguments params = new Arguments();
params.addArgument("name", "guodegang");
params.addArgument("age", "48");
JavaSamplerContext arg0 = new JavaSamplerContext(params);
JmeterTest test = new JmeterTest();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}

}

Export为Runnable Jar File:hello.jar

将此hello.jar包放入JMETER_HOME\lib\ext目录;

打开JMeter,添加线程组,添加Java请求,查看结果树。

Alt text