• 使用JMeter测试你的EJB


    对EJB进行一些性能基准测试是非常有必要和有帮助的,测试的方法和工具有很多,不过我最近发现,Apache JMeter是进行基准测试的一个优秀工具。可惜的是,JMeter没有提供一个可测试任意EJB的通用取样器(sampler),不过,我们可以自己动 手来创建一个。

      首先,让我们简单的了解一下Apache JMeter,它是一个100%的纯Java桌面应用,可用于压力测试和性能测量。它最初被设计用于Web应用测试但后来扩展到其他测试领域。

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

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

      我们需要做的第一件事情是,创建一个简单的Singleton factory class,以为你的测试创建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) {

      try {

      log.info("Loading the service...");

      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、编写测试代码

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

      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.setSuclearcase/" target="_blank" >ccessful(true);

      results.setResponseCodeOK();

      results.setResponseMessage("'myResult:" + myResult);

      } else {

      results.setSuccessful(false);

      }

      results.sampleEnd();

      return results;

      }

      @Override

      public Arguments getDefaultParameters() {

      Arguments args = new Arguments();

      args.addArgument("PARAM_1", "4815162342");

      args.addArgument("PARAM_2", "Iculus");

      return args;

      }

      }

      3、运行JMeter

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

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

  • 相关阅读:
    Vue 静态资源文件下载 以pdf为例
    高德地图POI搜索
    矩阵转置(二维列表行列互换)
    列表动态填加元素
    关于判断值为None的处理
    第2章 小程序项目结构配置
    Python 基础编码风格
    Visual Studio — 模块计算机类型“x64”与目标计算机类型“x86”冲突
    Visual Studio — 无法解析的外部符号的几种可能
    Visual Studio — 包含目录、附加包含目录、库目录、附加库目录、附加依赖项之详解
  • 原文地址:https://www.cnblogs.com/w-20150101/p/4351822.html
Copyright © 2020-2023  润新知