使用JMeter测试你的EJB

对EJB进行一些性能基准测试是非常有必要和有帮助的,测试EJB的方法和工具有很多,不过我最近发现,Apache JMeter是进行基准测试的一个优秀工具。可惜的是,JMeter没有提供一个可测试任意EJB的通用取样器(sampler),不过,我们可以自己动手来创建一个。
 
首先,让我们简单的了解一下Apache JMeter,它是一个100%的纯Java桌面应用,可用于压力测试和性能测量。它最初被设计用于Web应用测试但后来扩展到其他测试领域。

博州网站建设公司创新互联建站,博州网站设计制作,有大型网站制作公司丰富经验。已为博州上1000+提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的博州做网站的公司定做!

在本篇文章中,我使用JBoss应用服务器来运行我的EJB。使用其它容器的实现过程应该也非常类似。

1、首先为EJB创建一个工厂(factory)类

我们需要做的第一件事情是,创建一个简单的Singleton factory class,以为你的测试EJB客户端实例。参考代码如下:

 
 
 
  1. public class MyServiceFactory {   
  2.  
  3.   private static final Log log = LogFactory.getLog(MyServiceFactory.class);   
  4.  
  5.   private static MyService service;   
  6.  
  7.   private static MyServiceFactory me;   
  8.  
  9.   private MyServiceFactory() { }   
  10.  
  11.   static {   
  12.  
  13.   MyServiceFactory.me = new MyServiceFactory();   
  14.  
  15.   }   
  16.  
  17.   public static MyServiceFactory getInstance() {   
  18.  
  19.   return MyServiceFactory.me;   
  20.  
  21.   }   
  22.  
  23.   public MyService getService() {   
  24.  
  25.   if (MyService.service == null) {   
  26.  
  27.   try {   
  28.  
  29.   log.info("Loading the service...");   
  30.  
  31.   Context ctx = new InitialContext();   
  32.  
  33.   service = (MyService)ctx.lookup("MyAction/remote");   
  34.  
  35.   if (service == null) {   
  36.  
  37.   log.error("Didn't get the service!");   
  38.  
  39.   }   
  40.  
  41.   } catch (NamingException e) {   
  42.  
  43.   log.error("Error looking up the remote service", e);   
  44.  
  45.   return null;   
  46.  
  47.   }   
  48.  
  49.   }   
  50.  
  51.   return service;   
  52.  
  53.   }   
  54.  
  55.   }  

2、编写测试代码

接下来我们需要自己编写测试EJB代码,为了实现这个目的,我们可以对JMeter的org.apache.jmeter.protocol.java.sampler包中的AbstractJavaSamplerClient类进行扩展。这个抽象类具有一个runTest方法,我们需要对其进行重写(override),使用这个方法来实现实际的测试。另外,我们还将重写getDefaultParameters方法,以使其提供某些合理的默认值,它们将在JMeter图形应用界面中

 
 
 
  1. package us.mikedesjardins.demo.jmeter;   
  2.  
  3.   import org.apache.jmeter.config.Arguments;   
  4.  
  5.   import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;   
  6.  
  7.   import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;   
  8.  
  9.   import org.apache.jmeter.samplers.SampleResult;   
  10.  
  11.   public class DigitalContentServiceEJBTestSampler extends AbstractJavaSamplerClient {   
  12.  
  13.   public SampleResult runTest(JavaSamplerContext context) {   
  14.  
  15.   SampleResult results = new SampleResult();   
  16.  
  17.   MyService service = MyServiceFactory.getInstance().getService();   
  18.  
  19.   results.sampleStart();   
  20.  
  21.   Long param1 = context.getLongParameter("PARAM_1");   
  22.  
  23.   String param2 = context.getStringParameter("PARAM_2");   
  24.  
  25.   MyResult result = service.myMethod(param1, param2);   
  26.  
  27.   if (result != null) {   
  28.  
  29.   results.setSuccessful(true);   
  30.  
  31.   results.setResponseCodeOK();   
  32.  
  33.   results.setResponseMessage("'myResult:" + myResult);   
  34.  
  35.   } else {   
  36.  
  37.   results.setSuccessful(false);   
  38.  
  39.   }   
  40.  
  41.   results.sampleEnd();   
  42.  
  43.   return results;   
  44.  
  45.   }   
  46.  
  47.   @Override   
  48.  
  49.   public Arguments getDefaultParameters() {   
  50.  
  51.   Arguments args = new Arguments();   
  52.  
  53.   args.addArgument("PARAM_1", "4815162342");   
  54.  
  55.   args.addArgument("PARAM_2", "Iculus");   
  56.  
  57.   return args;   
  58.  
  59.   }   
  60.  
  61.   }   

3、运行JMeter

JMeter的扩展lib目录是${JMETER_INSTALL_LIB}/lib/ext。你需要把所有EJB客户端所需要的jar文件拷贝到这个目录中。如果你使用的是JBoss,则需要把jbossall-client.jar拷贝到这个目录中;对于其它应用服务器,则拷贝类似的客户端jar文件到这个目录。

当你启动JMeter后,你的新取样器(sampler)将会出现在它的Sampler菜单中,这样你就可以使用它来测试EJB了。

网页标题:使用JMeter测试你的EJB
标题来源:http://www.shufengxianlan.com/qtweb/news49/482449.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联