做了个简单的jmeter java request 测试,
public class SimpleTest implements JavaSamplerClient {
private SampleResult results;
private String testStr;
// 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("testStr", ""); // 定义一个参数,显示到Jmeter的参数列表中,第一个参数为参数默认的显示名称,第二个参数为默认值
System.out.println("getDefaultParameters:"+testStr);
return params;
}
// 测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法
public SampleResult runTest(JavaSamplerContext arg0) {
results.setSamplerData(testStr);
int len = 0;
results.sampleStart(); // 定义一个事务,表示这是事务的起始点,类似于LoadRunner的lr.start_transaction
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
len = testStr.length();
results.sampleEnd(); // 定义一个事务,表示这是事务的结束点,类似于LoadRunner的lr.end_transaction
if (len < 5) {
System.out.println(testStr);
results.setSuccessful(false); // 用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功
} else
results.setSuccessful(true);
System.out.println("runTest:"+testStr);
return results;
}
// 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法
public void teardownTest(JavaSamplerContext arg0) {
}
// 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法
public void setupTest(JavaSamplerContext arg0) {
results = new SampleResult();
testStr = arg0.getParameter("testStr", "");
if (testStr != null && testStr.length() > 0) {
results.setSamplerData(testStr);
}
// System.out.println("setupTest:"+testStr);
System.out.println("current thread | current instance address "+Thread.currentThread().getName() + " | " +this);
}
}
背景: 2 threadgroup , forever 1
运行后结果:
current thread | current in
r.test.SimpleTest@13e7ff6
current thread | current in
r.test.SimpleTest@944d75
明显:jmeter 对测试类 by thread 做了两个instance
要测并发,得让多线程JavaSamplerClient 子类实例 使用同一个service/action/...的实例,基于此才能做并发测试.
揣测 junit request 也是如此.
spring ,seam 框架该如何做jmeter测试呢...? 是否有测试用例编程模型.
得好好看看jmeter core 才行.