使用JMeter的Java请求功能测试Hetty性能

标签: jmeter java 功能测试 | 发表时间:2013-11-25 10:38 | 作者:顺其自然EVO
出处:http://www.blogjava.net/qileilove/
 1.JMeter介绍
  JMeter是Apache组织的开放源代码项目,它是功能和 性能测试的工具,100%的用 java实现。JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、 数据库和查询、ftp服务器或者其他的资源)。JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。
   2.启动JMeter
  进入JMeter的bin目录,然后执行:
  sudo ./jmeter.sh
   3.原始的测试方法
  在没有使用JMeter前,我对hetty的性能测试,都是通过自己写多线程代码去完成的,相当苦逼,相当麻烦,不过也能锻炼自己的编码能力,我先贴出比较原始的测试方法,如下:
public class RpcHessianClient {
public static void main(String[] args) {
String url = "http://localhost:8081/apis/hello";
HessianProxyFactory factory = new HessianProxyFactory();
ExecutorService es = Executors.newFixedThreadPool(10);
int size = 1000000;
final CountDownLatch cdl = new CountDownLatch(size);
try {
long start = System.currentTimeMillis();
factory.setUser("client1");
factory.setPassword("client1");
factory.setOverloadEnabled(true);
final Hello basic = (Hello) factory.create(Hello.class,
url);
for (int i = 0; i < size; i++) {
es.submit(new Runnable() {
@Override
public void run() {
String u=basic.hello("guolei");
//System.out.println(u);
cdl.countDown();
}
});
}
cdl.await();
long time = System.currentTimeMillis() - start;
System.out.println("SayHello:");
System.out.println("耗时:" + (double) time / 1000 + " s");
System.out.println("平均:" + ((double) time) / size +" ms");
System.out.println("TPS:" + (double) size / ((double) time / 1000));
// System.out.println("Hello, " + s.getMail());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
es.shutdown();
}
}

  4.使用JMeter来进行现代化测试
  我们要使用JMeter来测试hetty,由于hetty是一款基于hessian和netty的RPC产品,我们必须使用JMeter的JAVA请求功能来进行测试,Java请求是指JMeter对Java Class进行性能测试。首先我们需要编写测试用例:
  1)新建JAVA工程。
  2)引入ApacheJMeter_java.jar 、ApacheJMeter_core.jar以及测试所需要的jar(jar包在JMeter目录的lib/ext目录中)。
  3)继承AbstractJavaSamplerClient类开始编写主业务。如下:
public class HettyTest extends AbstractJavaSamplerClient {
private static String label = "hettyTest";
/**
* 执行runTest()方法前会调用此方法,可放一些初始化代码
*/
public void setupTest(JavaSamplerContext arg0) {
}
/**
* JMeter测试用例入口
*/
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult sr = new SampleResult();
sr.setSampleLabel(label);
try { // 这里调用我们要测试的java类,这里我调用的是一个Test类
Map<String,String> map = getDefaultParameters().getArgumentsAsMap();
sr.sampleStart(); // 记录程序执行时间,以及执行结果
Test.execute(map.get("ip"),map.get("port"));
sr.sampleEnd();
sr.setSuccessful(true);
} catch (Throwable e) {
sr.setSamplerData(e.getMessage());
e.printStackTrace();
sr.setSuccessful(false); // 用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功
}
return sr;
}
/**
* JMeter界面中可手工输入参数,代码里面通过此方法获取
*/
public Arguments getDefaultParameters() {
Arguments args = new Arguments();
args.addArgument("ip", "localhost");
args.addArgument("port", "8081");
return args;
}
/**
* 执行runTest()方法后会调用此方法.
*/
public void teardownTest(JavaSamplerContext arg0) {
}
}
  Test类是我测试逻辑,如下:
public class Test {
public static void execute(String ip,String port) throws MalformedURLException {
String url = "http://"+ip+":"+port+"/apis/hello";
HessianProxyFactory factory = new HessianProxyFactory();
factory.setUser("client1");
factory.setPassword("client1");
factory.setOverloadEnabled(true);
final Hello basic = (Hello) factory.create(Hello.class, url);
//System.out.println("SayHello:" + basic.hello("guolei"));
}
}
  代码中都有注释,按照注释实际操作去理解。  System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。

 代码中都有注释,按照注释实际操作去理解。  System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。
  4)将项目打为jar包,放到JMeter目录下的lib/ext下(将项目依赖的jar也放到此目录)。
  5)重启JMeter。
   5.JMeter使用
  1)选中主界面左侧的“测试计划”,右键菜单->添加->Threads(Users)->线程组。
  2)再选中刚才新增的"线程组",右键菜单->添加->Sampler->Java请求。
  3)再选中刚才新增的"Java请求",右键菜单->添加->监视器->聚合报告。
  4)Ctrl + R,开始运行, Ctrl + E,清除历史结果。
   6.查看测试结果
  聚合报告中基本已经包含我们所关心的几个数据了:
  Samples -- 本次场景中一共完成了多少个Transaction
  Average -- 平均响应时间
  Median -- 统计意义上面的响应时间的中值
  90% Line -- 所有transaction中90%的transaction的响应时间都小于xx
  Min -- 最小响应时间
  Max -- 最大响应时间
  PS: 以上时间的单位均为ms
  Error -- 出错率
  Troughput -- 吞吐量,单位:transaction/sec
  KB/sec -- 以流量做衡量的吞吐量


顺其自然EVO 2013-11-25 10:38 发表评论

相关 [jmeter java 功能测试] 推荐:

使用JMeter的Java请求功能测试Hetty性能

- - BlogJava-qileilove
  JMeter是Apache组织的开放源代码项目,它是功能和. 性能测试的工具,100%的用. JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、. 数据库和查询、ftp服务器或者其他的资源). JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况.

JMETER 参数化

- - 开源软件 - ITeye博客
用Jmeter中的函数获取参数值,__Random,__threadNum,__CSVRead,__StringFromFile. 2.用户定义的变量 “配置元件”->“用户定义的变量”. 从csv文件中读取“配置元件”->“CSV Data Set Config”. 调用方法${id_g1} ${id_g2} ${id_g3}.

JMeter使用技巧

- - 博客园_首页
在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享. 如何使用英文界面的jmeter. 如何使用英文界面的JMeter.   Jmeter启动时会自动判断操作系统的locale 并选择合适的语言启动,所以,我们启动jmeter后,其会出现一个倍感亲切的中文界面.

[转]JMeter进行WebService测试

- - 小鸥的博客
1. Building a WebService Test Plan参考. 1.   建立WebServiceTest Plan. 参考 http://jmeter.apache.org/usermanual/build-ws-test-plan.html. 1)      添加ThreadGroup.

[转]Jmeter测试结果分析

- - 小鸥的博客
Jmeter测试结果分析这一篇,我打算分成上下两部分. 上篇,主要讲述如何使用jmeter中Assertion对结果进行简单的分类;下篇,主要讲述的是当我们拿到测试结果后,我们应该如何去看待这些测试结果. 用过LoadRunner的人都知道,LoadRunner本身提供了很多函数可以对收集回来的结果进行一些初步的分析.

Jmeter分布式部署文档

- - BlogJava-qileilove
测试时,如果进行大数据量的并发测试时,单个电脑的CPU和内存可能无法承受,这个时候,我们需要进行一个分布式的测试,比如10000个并发,使用三台电脑来进行并发,. Jmeter提供了这种功能,你可以很轻松的实现Jmeter的这种分布式测试.   1 首先确何所有的电脑上都安装Jmeter.   2 在所有电脑上开起Jmeter,开启命令是jmeter-server.bat,而不是以前的jmeter.bat.

JMeter使用记录1 -- JDBC测试

- - CSDN博客互联网推荐文章
场景:使用jmeter对web应用和mysql数据库进行压力测试. JMeter是一款非常强大的测试工具,可以用来测试web,数据库,从07年用过之后一直对它情有独钟,下面记录下在一个项目中对它的简单使用. 项目分数据库测试和web应用测试. 数据库测试比较简单,将要测试的数据库的jdbc driver放到jmeter的lib文件夹,新建线程组,配置起100线程,循环10次,10秒启动所有线程,加入一个jdbc connection configuration,加入要进行的CRUD操作,点击启动按钮,然后通过summary report看performance.

Jmeter常用函数之__CSVRead使用

- - 行业应用 - ITeye博客
__CSVRead函数用于对脚本进行参数话,当脚本中不同变量需要不同参数值时,可以考虑__CSVRead函数. 以登录的用户名、密码为例:实际进行压力测试时,需要模拟使用不同的用户并发访问系统,此时需要我们对脚本中的用户名、密码进行参数化;下面具体介绍如何使用csvread函数:. 准备好参数取值List清单,文件格式为:csv或者txt文件,里面保存变量要读取的参数值,每个变量间用逗号相隔.

jmeter beanShell 修改http请求参数

- - ITeye博客
在使用jmeter进行测试时,需要对上一步响应的明文参数,如userName='tom' token='%sdf%sdkdfj'之类的参数,加密一下,才能进行下一步http请求,. 1、加密要引入自定义的加密函数. 2、要可以拿到第一次http的响应. 3、第二次http请求前,要动态构建参数. 2、在beanShell里拿上一次请求的响应.

Jmeter教程 简单的压力测试

- - 行业应用 - ITeye博客
Jmeter是一个非常好用的压力测试工具.   Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好.     做压力测试的常用工具.     做压力测试的步骤如下:.     本文做压力测试的例子.     第一步: 使用CSV Data Set Config 来参数化.