[英]How to add the request body data in the post request for JMeter testing using Java code in the non-GUI mode?
這是一個 Java 代碼形式的 Jmeter POST 請求。 我運行此代碼沒有錯誤,但我也沒有得到響應,因為我處理請求正文數據的方法似乎是錯誤的。
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\" :
\"xx@gmail.com\",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
。
也許您應該向httpSampler
添加參數,而不是向sampler
添加參數,例如:
HTTPSamplerProxy httpSampler = new HTTPSamplerProxy();
httpSampler.setDomain(xx);
httpSampler.setPort(xx);
httpSampler.setPath("xx");
httpSampler.setMethod("xx");
httpSampler.addNonEncodedArgument("body", body, "");
如果您正在使用 JMeter API 從 Java 代碼構建 JMeter 測試,請查看在不使用 JMeter GUI和jmeter-from-code存儲庫的情況下啟動 JMeter 測試的五種方法,了解一些可以重復使用的代碼片段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.