对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.setSuccessful(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拷贝到这个目录中;对于其它应用服务器 style="COLOR: #000000" href="http://product.it168.com/files/0402search.shtml" target=_blank>服务器,则拷贝类似的客户端jar文件到这个目录。

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

 
 

【转】使用JMeter测试你的EJB的更多相关文章

  1. 10.Jmeter 快速入门教程 -- 用Jmeter测试你的EJB

    有时候,需要对EJB进行性能基准测试,这对开发非常有帮助. 有很多种方法可以这么做, 当然我们这里介绍Apache's Jmeter 来进行实验测试. 非常不幸的是, Jmeter没有提供一个现成的测 ...

  2. 用JMeter测试monggodb的请求

    JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接测试MongoDB[即通过MongoDB协议测试],另一种是写Java代码方式测试MongoDB[即通过java请求测试] 注: ...

  3. JMeter学习(十九)JMeter测试MongoDB

    JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能. 第一种方法 1.编写Java代码,内容如下: pa ...

  4. Jmeter测试webocket协议

    Jmeter本身不支持websocket协议的,所以需要安装第三方的插件还有6个依赖包. 首先,我们需要准备Jmeter的WebSocket协议的支持插件: JMeterWebSocketSample ...

  5. JMeter 测试Web登录

    JMeter测试 前置条件: 1安装JMeter 下载地址:http://jmeter.apache.org/ 2安装badBoy http://www.badboy.com.au/download/ ...

  6. Windows 7下搭建Jmeter测试环境

    jmeter配置.安装 一. 工具描述 apache jmeter是100%的java桌面应用程序,它被设计用来加载被测试软件功能特性.度量被测试软件的性能.设计jmeter的初衷是测试web应用,后 ...

  7. 【jmeter】JMeter测试MongoDB

    JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能. 第一种方法 1.编写Java代码,内容如下: pa ...

  8. jmeter测试本地myeclips调试状态下的tomcat程序死锁

    在myeclipse调试状态下的tomcat程序,用jmeter测试,居然发生死锁,调试两天无果,直接运行tomcat而不通过myeclipse,无死锁,真是又好气又好笑..

  9. 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较

    对web请求(HTTP/HTML)进行性能测试,确认请求响应时间.分别使用Loadrunner和JMeter进行测试,比较测试结果. 1.LoadRunner测试web请求响应时间 1.1  编制(录 ...

随机推荐

  1. .NET中如何测试Private和Protected方法

    TDD是1)写测试2)写通过这些测试的代码,3)然后重构的实践.在,NET社区中, 这个概念逐渐变得非常流行,这归功于它所增加的质量保证.此时,它很容易测试public方法,但是一个普遍的问题出现了, ...

  2. PHP5+APACHE2.2配置

    注意这里用的是PHP5.3版本 在Windows系统上使用Apache2.2上模块化安装PHP5.3 PHP5.3增加了一些功能,如namespace,静态迟绑定等. 本篇文章将帮您如何安装PHP5. ...

  3. JSON01_资料

    1. 资料网址: http://blog.csdn.net/vincent_czz/article/details/7333977 http://blog.csdn.net/huangwuyi/art ...

  4. Python 导出数据from Mysql

    环境 Anaconda3 Python 3.6, Window 64bit 目的 从MySQL数据库读取目标表数据,并处理 代码 # -*- coding: utf-8 -*- import pand ...

  5. Selenium学习笔记(1) - 自动化测试体系与原理

    技术体系 基于代码的测试(Code-Based Testing) 基于协议的测试(Protocol-Based Testing) 基于界面的测试(GUI-Based Testing) 工作原理 基于代 ...

  6. chrome浏览器经常无响应

    chrome浏览器(v68)安装一个fiddler证书导入后点击关闭,会出现无响应 有时候动不动会无响应,今天百度了一下,发现真正的"罪魁祸首"是搜狗输入法,升级一下就好了 万恶的 ...

  7. combobox默认值为第一个数据,修改为空值

    以前用combobox的时候默认是空的,可是昨天不知道为什么,默认的居然为第一个数据,实在让人烦恼.百度了很多,有些人说默认本来就是为空的,而有些也和我一样默认是第一个数据. 我想造成这个现象的原因应 ...

  8. ASP.NET Core 简单引入教程

    0.简介 开源.跨平台 1.环境安装 参考官方教程   Core 官方文档 2.向世界问个好 sheel/cmd 下: dotnet --help // 查看帮助 dotnet new *     / ...

  9. ubuntu 安装python3.7 以及安装pip3 出现Command '('lsb_release', '-a')' returned non-zero exit status 1问题解决

    最近因为电脑重装,东西全没了,总计一下最近重装环境的过程. 如果没有安装包,请下载: wget http://www.python.org/ftp/python/3.7.0/Python-3.7.0. ...

  10. static-静态类型

    1.基本概念 好像没什么概念. 2.作用 主要是两个:隐藏和保持值 01.隐藏 当在一个文件中定义了一个static全局变量,则该变量对该文件是可见的,对其他的文件不可见,也就减少了变量冲突的问题. ...