2017-05-26 12 views
-1

これはJavaコードの形式でJmeter POSTリクエストです。このコードを実行するとエラーは発生しませんが、リクエスト本体のデータを操作するメソッドが間違っているように見えるため、応答も得られません。非GUIモードでJavaコードを使用してJMeterテストのリクエスト要求データを追加する方法はありますか?

import java.io.FileOutputStream; 

import org.apache.jmeter.config.Arguments; 
import org.apache.jmeter.config.gui.ArgumentsPanel; 
import org.apache.jmeter.control.LoopController; 
import org.apache.jmeter.control.gui.LoopControlPanel; 
import org.apache.jmeter.control.gui.TestPlanGui; 
import org.apache.jmeter.engine.StandardJMeterEngine; 
import org.apache.jmeter.protocol.http.control.Header; 
import org.apache.jmeter.protocol.http.control.HeaderManager; 
import org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui; 
import org.apache.jmeter.protocol.http.gui.HeaderPanel; 
//import org.apache.jmeter.protocol.http.sampler.HTTPSampler; 
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy; 
import org.apache.jmeter.reporters.ResultCollector; 
import org.apache.jmeter.reporters.Summariser; 
//import org.apache.jmeter.samplers.SampleEvent; 
//import org.apache.jmeter.samplers.SampleResult; 
import org.apache.jmeter.samplers.SampleSaveConfiguration; 
import org.apache.jmeter.save.SaveService; 
import org.apache.jmeter.testelement.TestElement; 
import org.apache.jmeter.testelement.TestPlan; 
import org.apache.jmeter.threads.ThreadGroup; 
import org.apache.jmeter.threads.gui.ThreadGroupGui; 
import org.apache.jmeter.util.JMeterUtils; 
import org.apache.jorphan.collections.HashTree; 
import org.apache.jmeter.protocol.http.util.HTTPArgument; 


public class PostRequest { 

public static void main(String[] argv) throws Exception { 
    //JMeter Engine 
    StandardJMeterEngine jmeter = new StandardJMeterEngine(); 

    //JMeter initialization (properties, log levels, locale, etc) 
    JMeterUtils.setJMeterHome("/C:/Users/xxx"); 
    JMeterUtils.loadJMeterProperties("/C:/xxx"); 
    JMeterUtils.initLogging(); 
    JMeterUtils.initLocale(); 

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

    //HTTP Sampler 
    HTTPSamplerProxy httpSampler = new HTTPSamplerProxy(); 
    httpSampler.setDomain("100.100.100.100"); 
    httpSampler.setPort(1111); 
    httpSampler.setPath("/"); 
    httpSampler.setMethod("POST"); 
    httpSampler.addNonEncodedArgument("","{data:{ \"email\" : 
\"[email protected]\",there are more values in the body"}]}",""); 
    httpSampler.setPostBodyRaw(true); 

    httpSampler.setFollowRedirects(true); 
    httpSampler.setAutoRedirects(false); 
    httpSampler.setUseKeepAlive(true); 
    httpSampler.setDoMultipartPost(false); 
    httpSampler.setProperty(TestElement.TEST_CLASS, 
HTTPSamplerProxy.class.getName()); 
    httpSampler.setProperty(TestElement.GUI_CLASS, 
HttpTestSampleGui.class.getName()); 

    //Header Manager 
    HeaderManager headerManager = new HeaderManager(); 

    headerManager.setName(JMeterUtils.getResString("header_manager_title")); 
    headerManager.add(new Header("abcs", "asdasd")); 
    headerManager.add(new Header("dsferdg", "ertret")); 
    headerManager.setProperty(TestElement.TEST_CLASS, 
HeaderManager.class.getName()); 
    headerManager.setProperty(TestElement.GUI_CLASS, 
HeaderPanel.class.getName()); 
    httpSampler.setHeaderManager(headerManager); 

    //Loop Controller 
    LoopController loopController = new LoopController(); 
    loopController.setLoops(1); 
    loopController.setFirst(true); 
    loopController.addTestElement(httpSampler); 
    loopController.setProperty(TestElement.TEST_CLASS, 
LoopController.class.getName()); 
    loopController.setProperty(TestElement.GUI_CLASS, 
LoopControlPanel.class.getName()); 
    loopController.initialize(); 

    //Thread Group 
    ThreadGroup threadGroup = new ThreadGroup(); 
    threadGroup.setName("Sample Thread Group"); 
    threadGroup.setNumThreads(1); 
    threadGroup.setRampUp(1); 
    threadGroup.setSamplerController(loopController); 
    threadGroup.setProperty(TestElement.TEST_CLASS, 
ThreadGroup.class.getName()); 
    threadGroup.setProperty(TestElement.GUI_CLASS, 
ThreadGroupGui.class.getName()); 

    //Test Plan 
    TestPlan testPlan = new TestPlan("Create JMeter Script From Java Code"); 
    testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName()); 
    testPlan.setProperty(TestElement.GUI_CLASS, 
TestPlanGui.class.getName()); 
    testPlan.setUserDefinedVariables((Arguments) new 
ArgumentsPanel().createTestElement()); 

    HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup); 
    threadGroupHashTree.add(httpSampler,headerManager); 

    //Construct Test Plan from previously initialized elements 
    testPlanTree.add("testPlan", testPlan); 
    testPlanTree.add("loopController", loopController); 
    testPlanTree.add("threadGroup", threadGroup); 
    testPlanTree.add("httpSampler", httpSampler); 
    testPlanTree.add("headerManager", headerManager); 

    Summariser summer = null; 
    String summariserName = JMeterUtils.getPropDefault("summariser.name", 
"summary"); 
    if (summariserName.length() > 0) { 
     summer = new Summariser(summariserName); 
      } 


    ResultCollector resultcoll = new ResultCollector(); 
    testPlanTree.add("resultcoll", resultcoll); 
    resultcoll.setFilename("C:/Users/xxx"); 
    SampleSaveConfiguration saveConfiguration = new 
SampleSaveConfiguration(); 
    saveConfiguration.setAsXml(true); 
    saveConfiguration.setCode(true); 
    saveConfiguration.setLatency(true); 
    saveConfiguration.setTime(true); 
    saveConfiguration.setTimestamp(true); 
    resultcoll.setSaveConfig(saveConfiguration); 

    //Store execution results into a .jtl file, we can save file as csv also 
    String reportFile = "C:/Users/xxx.jtl"; 
    String csvFile = "C:/Users/xxx.csv"; 
    ResultCollector logger = new ResultCollector(summer); 
    logger.setFilename(reportFile); 
    ResultCollector csvlogger = new ResultCollector(summer); 
    csvlogger.setFilename(csvFile); 
    testPlanTree.add(testPlanTree.getArray()[0], logger); 
    testPlanTree.add(testPlanTree.getArray()[0], csvlogger); 

    //save generated test plan to JMeter's .jmx file format 
    SaveService.saveTree(threadGroupHashTree, new 
FileOutputStream("C:\\Users\read.jmx")); 

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

    /*System.out.println("Test completed. See " + JMeterHome + slash + 
"report.jtl file for results"); 
    System.out.println("JMeter .jmx script is available at " + jmeterHome + 
slash + "jmeter_api_sample.jmx");*/ 
    System.exit(0); 
} 

} 

私はJMeterのPOSTリクエストを設定し、身体データを追加するには、このコードを使用しているが、リクエストボディは、私は、応答を確認したときにnullように見えます。

答えて

0

はたぶん、あなたは、samplerに何かhttpSamplerに引数を追加することではなく、する必要があります:あなたはJMeterのAPIを使用してJavaコードからJMeterのテストを構築している場合

HTTPSamplerProxy httpSampler = new HTTPSamplerProxy(); 
httpSampler.setDomain(xx); 
httpSampler.setPort(xx); 
httpSampler.setPath("xx"); 
httpSampler.setMethod("xx"); 
httpSampler.addNonEncodedArgument("body", body, ""); 

をいくつかのためのFive Ways To Launch a JMeter Test without Using the JMeter GUIjmeter-from-codeリポジトリをチェックアウト再利用できるスニペット。

+0

ご返信ありがとうございます。私は前に述べた方法を試しましたが、パテを使用して応答をチェックすると、要求本体はまだnullになります。 –

+0

完全なコードを確認する必要があります。問題のトラブルシューティングに必要な情報が不足しています。これまでは、以下の[JMeterプロパティ](https://www.blazemeter.com/blog/apache-jmeter-properties-customization): 'jmeter.save.saveservice 'を設定することで、.jtl結果ファイルに要求データを保存することをお勧めします。 output_format = xml'と 'jmeter.save.saveservice.samplerData = true'を使用し、[結果ツリーのリスナーを表示](http://jmeter.apache.org/usermanual/component_reference.html#View_Results_Tree)を使用して要求の詳細を調べます。 "パテ"を意味しますか? –

+0

私は最初の質問を編集し、コード全体を追加しました。 –

関連する問題