2017-02-26 18 views
2

次のコードを使用してJavaアプリケーションからJMeter負荷テストを実行しています。JavaコードからJMeter負荷テストを実行した後に集計の集計値を取得する

StandardJMeterEngine jmeter = new StandardJMeterEngine(); 

JMeterUtils.setJMeterHome(jmeterHome); 
JMeterUtils.loadJMeterProperties(jmeterProperties); 
JMeterUtils.initLogging(); 
JMeterUtils.initLocale(); 

HTTPSampler httpSampler = new HTTPSampler(); 
httpSampler.setDomain(host); 
httpSampler.setPort(port); 
httpSampler.setPath(path); 
httpSampler.setMethod("GET"); 
httpSampler.setName("load test"); 

LoopController loopController = new LoopController(); 
loopController.setLoops(1); 
loopController.setFirst(true); 
loopController.initialize(); 

ThreadGroup threadGroup = new ThreadGroup(); 
threadGroup.setName("Sample Thread Group"); 
threadGroup.setNumThreads(userCount); 
threadGroup.setRampUp(1); 
threadGroup.setSamplerController(loopController); 

HashTree testPlanTree = new HashTree(); 
TestPlan testPlan = new TestPlan("load test"); 
testPlanTree.add(testPlan); 
HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup); 
threadGroupHashTree.add(httpSampler); 

jmeter.configure(testPlanTree); 
jmeter.run(); 

このスクリプトを実行した後、平均レイテンシのような集計値を取得する必要があります。私は、サマリーレポートがcsvファイルにログインできることを知っています。そして、そのファイルを再度読み込んで平均レイテンシを計算することができます。しかし、私はちょうどcsvファイルを書いたり読んだりすることなくその集計値を得る方法があるのか​​知りたいのですか?

私はすでに以下の記事といくつかの関連する質問をここで紹介しました。

https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui http://uttesh.blogspot.com/2015/04/jmeter-load-testing-by-code-jmeter-api.html

答えて

1

一つのアプローチは、(これはJmeterOutListener.javaである私の場合)ResultCollectorよう、カスタマークラスを作成し、あなたがアクセスそれらを持っているので、そこから値を収集することになります。そこにはsampleOccurredメソッドで何でもできます。

ResultCollectorクラスをデコードして、それがもっと機能的であることを確認できます。

JMeterTestFromCode.java

public class JMeterTestFromCode { 

    public static void main(String[] args) throws Exception{ 

     String jmeterHome1 = "/rezsystem/apache-jmeter-2.11/apache-jmeter-2.11"; 
     File jmeterHome=new File(jmeterHome1); 
     String slash = System.getProperty("file.separator"); 

     if (jmeterHome.exists()) { 
      File jmeterProperties = new File(jmeterHome.getPath() + slash + "bin" + slash + "jmeter.properties"); 
      if (jmeterProperties.exists()) { 
       //JMeter Engine 
       StandardJMeterEngine jmeter = new StandardJMeterEngine(); 

       //JMeter initialization (properties, log levels, locale, etc) 
       JMeterUtils.setJMeterHome(jmeterHome.getPath()); 
       JMeterUtils.loadJMeterProperties(jmeterProperties.getPath()); 
       JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level 
       JMeterUtils.initLocale(); 

       // JMeter Test Plan, basically JOrphan HashTree 
       HashTree testPlanTree = new HashTree();  

       // HTTP Sampler 
       HTTPSampler httpSampler = new HTTPSampler(); 
       httpSampler.setDomain("www.google.com"); 
       httpSampler.setPort(80); 
       httpSampler.setPath("/"); 
       httpSampler.setMethod("GET"); 

       // Loop Controller 
       TestElement loopCtrl = new LoopController(); 
       ((LoopController)loopCtrl).setLoops(1); 
       ((LoopController)loopCtrl).addTestElement(httpSampler); 
       ((LoopController)loopCtrl).setFirst(true); 

       // Thread Group 
       SetupThreadGroup threadGroup = new SetupThreadGroup(); 
       threadGroup.setNumThreads(1); 
       threadGroup.setRampUp(1); 
       threadGroup.setSamplerController((LoopController)loopCtrl); 

       // Test plan 
       TestPlan testPlan = new TestPlan("MY TEST PLAN"); 

       testPlanTree.add("testPlan", testPlan); 
       testPlanTree.add("loopCtrl", loopCtrl); 
       testPlanTree.add("threadGroup", threadGroup); 
       testPlanTree.add("httpSampler", httpSampler);  

       JmeterOutListener jmeterOutListener = new JmeterOutListener(); 
       testPlanTree.add(testPlanTree.getArray()[0], jmeterOutListener); 

       // Run Test Plan 
       jmeter.configure(testPlanTree); 
       jmeter.run(); 

       System.exit(0); 

      } 
     } 

     System.err.println("jmeter.home property is not set or pointing to incorrect location"); 
     System.exit(1);  

    } 
} 

JmeterOutListener.java

public class JmeterOutListener extends AbstractListenerElement implements SampleListener,Clearable,Serializable,TestListener,Remoteable,NoThreadClone{ 

    public JmeterOutListener() { 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void testEnded() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void testEnded(String arg0) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void testStarted() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void testStarted(String arg0) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void testIterationStart(LoopIterationEvent arg0) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void clearData() { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void sampleOccurred(SampleEvent event) { 

     SampleResult sample = event.getResult(); 

     System.out.println("sampleOccurred().sample.getTimeStamp() : " + sample.getTimeStamp()); 
     System.out.println("sampleOccurred().sample.getTime() : " + sample.getTime()); 
     System.out.println("sampleOccurred().sample.getSampleLabel() : " + sample.getSampleLabel()); 
     System.out.println("sampleOccurred().sample.getResponseCode() : " + sample.getResponseCode()); 
     System.out.println("sampleOccurred().sample.getResponseMessage() : " + sample.getResponseMessage()); 
     System.out.println("sampleOccurred().sample.getThreadName() : " + sample.getThreadName()); 
     System.out.println("sampleOccurred().sample.isSuccessful() : " + sample.isSuccessful()); 

     String    message    = null; 
     AssertionResult[] results    = sample.getAssertionResults(); 
     if (results != null) 
     { 
      for (int i = 0; i < results.length; ++i) { 
       message = results[i].getFailureMessage(); 
       System.out.println("sampleOccurred().message : " + message); 
       if (message != null) { 
        break; 
       } 
      } 
     } 

     System.out.println("sampleOccurred().sample.getBytes() : " + sample.getBytes()); 
     System.out.println("sampleOccurred().sample.getGroupThreads() : " + sample.getGroupThreads()); 
     System.out.println("sampleOccurred().sample.getAllThreads() : " + sample.getAllThreads()); 
     System.out.println("sampleOccurred().sample.getURL() : " + sample.getURL()); 
     System.out.println("sampleOccurred().sample.getLatency() : " + sample.getLatency()); 
     System.out.println("sampleOccurred().sample.getDataEncodingWithDefault() : " + sample.getDataEncodingWithDefault()); 
     System.out.println("sampleOccurred().sample.getSampleCount() : " + sample.getSampleCount()); 
     System.out.println("sampleOccurred().sample.getErrorCount() : " + sample.getErrorCount()); 

    } 

    @Override 
    public void sampleStarted(SampleEvent arg0) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void sampleStopped(SampleEvent arg0) { 
     // TODO Auto-generated method stub 
    } 

} 
関連する問題