You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@jmeter.apache.org by bu...@apache.org on 2022/05/18 03:46:34 UTC
[Bug 66070] New: Executed through hashtree, the headermanager does not take effect
https://bz.apache.org/bugzilla/show_bug.cgi?id=66070
Bug ID: 66070
Summary: Executed through hashtree, the headermanager does not
take effect
Product: JMeter
Version: 5.4.3
Hardware: PC
OS: Mac OS X 10.1
Status: NEW
Severity: major
Priority: P2
Component: HTTP
Assignee: issues@jmeter.apache.org
Reporter: amos.chenj@outlook.com
Target Milestone: JMETER_5.5
code:
import lombok.extern.slf4j.Slf4j;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.control.LoopController;
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.sampler.HTTPSamplerProxy;
import org.apache.jmeter.protocol.http.util.HTTPArgument;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.testelement.property.StringProperty;
import org.apache.jmeter.threads.AbstractThreadGroup;
import org.apache.jmeter.threads.ThreadGroup;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
import org.junit.jupiter.api.Test;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Locale;
import java.util.UUID;
/**
* @author AmosChen
* @date 2022/5/17 22:27
*/
@Slf4j
public class HttpBuilderTest {
static {
final String jmeterHome = "/Users/amos/Documents/apache-jmeter-5.4.3";
JMeterUtils.setJMeterHome(jmeterHome);
JMeterUtils.setLocale(Locale.CHINA);
JMeterUtils.loadJMeterProperties(JMeterUtils.getJMeterBinDir() +
"/jmeter.properties");
}
@Test
void build() throws IOException {
final String jmeterHome = "/Users/amos/Documents/apache-jmeter-5.4.3";
JMeterUtils.setJMeterHome(jmeterHome);
JMeterUtils.setLocale(Locale.CHINA);
JMeterUtils.loadJMeterProperties(JMeterUtils.getJMeterBinDir() +
"/jmeter.properties");
// request
final HTTPSamplerProxy samplerProxy = new HTTPSamplerProxy();
final String address = "https://postman-echo.com/post";
final UriComponents uriComponents =
UriComponentsBuilder.fromHttpUrl(address).build();
samplerProxy.setProtocol(uriComponents.getScheme());
samplerProxy.setPath(uriComponents.getPath());
samplerProxy.setFollowRedirects(true);
samplerProxy.setAutoRedirects(true);
samplerProxy.setMethod("POST");
samplerProxy.setContentEncoding("utf-8");
samplerProxy.setUseKeepAlive(false);
samplerProxy.setDoMultipart(false);
samplerProxy.setDomain(uriComponents.getHost());
// Java or HttpClient4(默认的)
// samplerProxy.setImplementation("Java");
samplerProxy.setConnectTimeout(String.valueOf(2000));
samplerProxy.setResponseTimeout(String.valueOf(2000));
// set body
samplerProxy.setPostBodyRaw(true);
final Arguments arguments = new Arguments();
arguments.setProperty(TestElement.GUI_CLASS, "HTTPArgumentsPanel");
final HTTPArgument httpArgument = new HTTPArgument();
httpArgument.setValue("{\"a\":\"123\"}");
httpArgument.setMetaData("=");
httpArgument.setAlwaysEncoded(false);
arguments.addArgument(httpArgument);
samplerProxy.setArguments(arguments);
samplerProxy.setName("HTTP Requests");
samplerProxy.setComment("HTTP");
samplerProxy.setProperty(TestElement.GUI_CLASS, "HttpTestSampleGui");
samplerProxy.setProperty(TestElement.TEST_CLASS, "HTTPSamplerProxy");
samplerProxy.setEnabled(true);
// 头信息
final HeaderManager headerManager = new HeaderManager();
// one header config
final Header header = new Header();
final String contentType = "application/json; charset=utf-8";
header.setProperty(new StringProperty("Header.name", "Content-Type"));
header.setProperty(new StringProperty("Header.value", contentType));
header.setEnabled(true);
// manager config
headerManager.setEnabled(true);
headerManager.add(header);
headerManager.setProperty(TestElement.GUI_CLASS, "HeaderPanel");
headerManager.setProperty(TestElement.TEST_CLASS, "HeaderManager");
final HashTree planTree = new HashTree();
final HashTree groupTree = new HashTree();
final HashTree httpTree = new HashTree();
final HashTree httpConfigTree = new HashTree();
httpConfigTree.add(headerManager);
httpTree.add(samplerProxy, httpConfigTree);
// 线程配置
final ThreadGroup group = new ThreadGroup();
group.setName("ThreadName");
group.setComment("Comments");
group.setNumThreads(1);
group.setRampUp(1);
group.setScheduler(false);
final LoopController controller = new LoopController();
controller.setProperty(TestElement.GUI_CLASS, "LoopControlPanel");
controller.setContinueForever(false);
controller.setLoops(1);
group.setSamplerController(controller);
group.setIsSameUserOnNextIteration(true);
group.setProperty(AbstractThreadGroup.ON_SAMPLE_ERROR,
AbstractThreadGroup.ON_SAMPLE_ERROR_CONTINUE);
group.setProperty(TestElement.GUI_CLASS, "ThreadGroupGui");
group.setProperty(TestElement.TEST_CLASS, "ThreadGroup");
group.setProperty(ThreadGroup.DELAY, "");
group.setProperty(ThreadGroup.DURATION, "");
group.setEnabled(true);
groupTree.add(group, httpTree);
final TestPlan plan = new TestPlan("Plan Name");
plan.setFunctionalMode(false);
plan.setSerialized(false);
plan.setBasedir("");
plan.setTearDownOnShutdown(true);
plan.setComment("");
plan.setProperty(TestElement.GUI_CLASS, "TestPlanGui");
plan.setProperty(TestElement.TEST_CLASS, "TestPlan");
plan.setEnabled(true);
planTree.add(plan, groupTree);
log.info("====================================== tree running");
StandardJMeterEngine engine = new StandardJMeterEngine();
engine.configure(planTree);
engine.run();
log.info("====================================== jxm to tree running");
String name = UUID.randomUUID() + ".jmx";
final File file = new File("/Users/amos/Downloads", name);
final FileOutputStream outputStream = new FileOutputStream(file);
SaveService.saveTree(planTree, outputStream);
HashTree newHashTree = SaveService.loadTree(file);
StandardJMeterEngine newEngine = new StandardJMeterEngine();
newEngine.configure(newHashTree);
newEngine.run();
}
}
step:
1. set log level to debug
2. run this code.
Run hashTree log:
11:41:53.221 [ThreadName 1-1] DEBUG
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl - Headers in request
before:[Connection: close]
Run hashTree after Convert to JMX log:
11:41:54.648 [ThreadName 1-1] DEBUG
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl - Headers in request
before:[Connection: close, Content-Type: application/json; charset=utf-8]
--
You are receiving this mail because:
You are the assignee for the bug.