qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          使用JMeter的Java請求功能測試Hetty性能

           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 -- 以流量做衡量的吞吐量

          posted on 2013-11-25 10:38 順其自然EVO 閱讀(1779) 評論(0)  編輯  收藏 所屬分類: jmeter and badboy

          <2013年11月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临桂县| 道真| 泰顺县| 沙河市| 金坛市| 扶绥县| 崇信县| 岳阳市| 河曲县| 嘉定区| 赣州市| 西峡县| 囊谦县| 左云县| 肇源县| 衡水市| 正镶白旗| 杨浦区| 青河县| 唐海县| 额敏县| 化州市| 岱山县| 镶黄旗| 剑阁县| 鄂托克前旗| 建瓯市| 繁峙县| 华宁县| 溧水县| 鄂州市| 铁力市| 偃师市| 柯坪县| 太和县| 普格县| 天峻县| 汽车| 尚志市| 灌云县| 利津县|