【转载】使用JMeter的Java请求功能测试Hetty性能

上一篇 / 下一篇  2013-03-21 14:05:51 / 个人分类:其他

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

2.启动JMeter 
进入JMeter的bin目录,然后执行: 
Java代码  收藏代码
  1. sudo ./jmeter.sh  

3.原始的测试方法 
在没有使用JMeter前,我对hetty的性能测试,都是通过自己写多线程代码去完成的,相当苦逼,相当麻烦,不过也能锻炼自己的编码能力,我先贴出比较原始的测试方法,如下: 

Java代码  收藏代码
  1. public class RpcHessianClient {  
  2.     public static void main(String[] args) {  
  3.         String url = "http://localhost:8081/apis/hello";  
  4.         HessianProxyFactory factory = new HessianProxyFactory();  
  5.         ExecutorService es = Executors.newFixedThreadPool(10);  
  6.         int size = 1000000;  
  7.         final CountDownLatch cdl = new CountDownLatch(size);  
  8.         try {  
  9.   
  10.             long start = System.currentTimeMillis();  
  11.             factory.setUser("client1");  
  12.             factory.setPassword("client1");  
  13.             factory.setOverloadEnabled(true);  
  14.             final Hello basic = (Hello) factory.create(Hello.class,url);  
  15.             for (int i = 0; i < size; i++) {  
  16.                 es.submit(new Runnable() {  
  17.                     @Override  
  18.                     public void run() {  
  19.                         String u = basic.hello("guolei");  
  20.                         //System.out.println(u);  
  21.                         cdl.countDown();  
  22.                     }  
  23.                 });  
  24.             }  
  25.   
  26.             cdl.await();  
  27.             long time = System.currentTimeMillis() - start;  
  28.             System.out.println("SayHello:");  
  29.             System.out.println("耗时:" + (double) time / 1000 + " s");  
  30.             System.out.println("平均:" + ((double) time) / size + " ms");  
  31.             System.out.println("TPS:" + (double) size / ((double) time / 1000));  
  32.             // System.out.println("Hello, " + s.getMail());  
  33.         } catch (MalformedURLException e) {  
  34.             e.printStackTrace();  
  35.         } catch (InterruptedException e) {  
  36.             e.printStackTrace();  
  37.         } finally {  
  38.             es.shutdown();  
  39.         }  
  40.     }  
  41. }  



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类开始编写主业务。如下: 
Java代码  收藏代码
  1. public class HettyTest extends AbstractJavaSamplerClient {  
  2.   
  3.     private static String label = "hettyTest";  
  4.     /** 
  5.  
  6.      * 执行runTest()方法前会调用此方法,可放一些初始化代码 
  7.  
  8.      */  
  9.     public void setupTest(JavaSamplerContext arg0) {  
  10.   
  11.     }  
  12.   
  13.     /** 
  14.  
  15.      * JMeter测试用例入口 
  16.  
  17.      */  
  18.   
  19.     public SampleResult runTest(JavaSamplerContext arg0) {  
  20.   
  21.         SampleResult sr = new SampleResult();  
  22.   
  23.         sr.setSampleLabel(label);  
  24.   
  25.         try { // 这里调用我们要测试的java类,这里我调用的是一个Test类  
  26.   
  27.             Map<String,String> map = getDefaultParameters().getArgumentsAsMap();  
  28.   
  29.             sr.sampleStart(); // 记录程序执行时间,以及执行结果  
  30.   
  31.             Test.execute(map.get("ip"),map.get("port"));  
  32.   
  33.             sr.sampleEnd();  
  34.   
  35.             sr.setSuccessful(true);  
  36.   
  37.         } catch (Throwable e) {  
  38.   
  39.             sr.setSamplerData(e.getMessage());  
  40.   
  41.             e.printStackTrace();  
  42.   
  43.             sr.setSuccessful(false); // 用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功  
  44.   
  45.         }  
  46.   
  47.         return sr;  
  48.   
  49.     }  
  50.   
  51.    
  52.   
  53.     /** 
  54.  
  55.      * JMeter界面中可手工输入参数,代码里面通过此方法获取 
  56.  
  57.     */  
  58.   
  59.     public Arguments getDefaultParameters() {  
  60.   
  61.    
  62.   
  63.         Arguments args = new Arguments();  
  64.   
  65.         args.addArgument("ip""localhost");  
  66.   
  67.         args.addArgument("port""8081");  
  68.   
  69.         return args;  
  70.   
  71.     }  
  72.   
  73.     /** 
  74.  
  75.      * 执行runTest()方法后会调用此方法. 
  76.  
  77.      */  
  78.   
  79.     public void teardownTest(JavaSamplerContext arg0) {  
  80.   
  81.     }  

TAG:

 

评分:0

我来说两句

Open Toolbar