Jmeter 快速入门教程(六) -- 用Jmeter测试你的EJB |
![]() |
![]() |
作者:WhoisTester |
2012-01-09 21:35 |
有时候,需要对EJB进行性能基准测试,这对开发非常有帮助. 有很多种方法可以这么做, 当然我们这里介绍Apache's Jmeter 来进行实验测试. 非常不幸的是, Jmeter没有提供一个现成的测试EJB的sampler, 但是我们可以很方便的自己创建一个. 这篇文章,我们用Jboss容器服务来作为ejb服务. 1) 创建一个工厂来查询你的EJB 第一件事情,我们来创建一个简单的一个工厂类用来创建EJB客户段实例.这个实例用来进行测试. public class MyServiceFactory { private static final Log log = LogFactory.getLog(MyServiceFactory.class); private static MyService service; private static MyServiceFactory me; private MyServiceFactory() { } static { MyServiceFactory.me = new MyServiceFactory(); } public static MyServiceFactory getInstance() { return MyServiceFactory.me; } public MyService getService() { if (MyService.service == null) { // Get the remote interface of the music search service try { log.info("Loading the service..."); // JNDI the old-fashioned way: Context ctx = new InitialContext(); service = (MyService)ctx.lookup("MyAction/remote"); if (service == null) { log.error("Didn't get the service!"); } } catch (NamingException e) { log.error("Error looking up the remote service", e); return null; } } return service; } } 2) 写测试类. 接下来,我们就写测试的主体class. 这个class因为是一个sampler,所以我们要继承jmeter的 org.apache.jmeter.protocol.java.sampler package. 这个抽象类由一个runtest方法,我们需要重写这个方法即可. 除了这个,我们可能还需要重写getDefaultParameters 方法. 这个方法用来提供一些参数值,用来展现在Jmeter's GUI . 就是我们可以通过gui上的输入框等ui空间,将参数传给该class测试类. (package 包位于 \lib\ext\ApacheJMeter_java.jar 和 \lib\ext\ApacheJMeter_core.jar) 需要被引用.
package us.mikedesjardins.demo.jmeter; 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; public class DigitalContentServiceEJBTestSampler extends AbstractJavaSamplerClient { public SampleResult runTest(JavaSamplerContext context) { SampleResult results = new SampleResult(); MyService service = MyServiceFactory.getInstance().getService(); results.sampleStart(); Long param1 = context.getLongParameter("PARAM_1"); String param2 = context.getStringParameter("PARAM_2"); MyResult result = service.myMethod(param1, param2); if (result != null) { results.setSuccessful(true); results.setResponseCodeOK(); results.setResponseMessage("'myResult:" + myResult); } else { results.setSuccessful(false); } results.sampleEnd(); return results; }
public Arguments getDefaultParameters() { Arguments args = new Arguments(); args.addArgument("PARAM_1", "4815162342"); args.addArgument("PARAM_2", "Iculus"); return args; } 2) 设置jmeter ${JMETER_INSTALL_LIB}/lib/ext 是jmeter额外需要的库的文件夹. 里面放的都是需要的第三方的额外库.因为我们进行测试ejb,用刀了ejb client 依赖一些ejb client库,所以我们需要将jbossall-client.jar 放入此文件夹. 将我们自己写的sampler 声称jar包,也放入该目录. 然后重启Jmeter. 3) 启动后, 添加threadGroup, 然后添加java Request Sampler, 然后选择你要进行测试的类名称. 4) 那么你就可以开始测试你的EJBs了. |