import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
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.gui.HttpTestSampleGui;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.reporters.Summariser;
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;
public class Load Performance {
static Scanner s = new Scanner(System.in);
public static void main(String[] arg) throws Exception {
// Prompt user to enter URL
System.out.print("Enter URL: ");
String url = System.console().readLine();
System.out.println("Enter the No.of USER: ");
int user = s.nextInt();
System.out.println("Enter the No.of LOOP: ");
int loop = s.nextInt();
System.out.println("Enter the ramp up: ");
int rampup = s.nextInt();
String jmeter = "~/Downloads/Apache_Jars/apache-jmeter-5.5";
File jmeterHome=new File(jmeter);
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 jmeter1 = 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 - open client
HTTPSamplerProxy client = new HTTPSamplerProxy();
client.setDomain(url);
client.setPath("/");
client.setMethod("GET");
client.setName("Open Client");
client.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
client.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());
// Loop Controller
LoopController loopController = new LoopController();
loopController.setLoops(loop);
loopController.setFirst(true);
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("Example Thread Group");
threadGroup.setNumThreads(user);
threadGroup.setRampUp(rampup);
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());
// Construct Test Plan from previously initialized elements
testPlanTree.add(testPlan);
HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup);
threadGroupHashTree.add(client);
// save generated test plan to JMeter's .jmx file format
SaveService.saveTree(testPlanTree, Files.newOutputStream(Paths.get(jmeterHome + slash + "example.jmx")));
Summariser summer = null;
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
if (summariserName.length() > 0) {
summer = new Summariser(summariserName);
}
// Store execution results into a .jtl file
String logFile = jmeterHome + slash + "example.jtl";
ResultCollector logger = new ResultCollector(summer);
logger.setFilename(logFile);
testPlanTree.add(testPlanTree.getArray()[0], logger);
// Run Test Plan
jmeter1.configure(testPlanTree);
jmeter1.run();
System.out.println("Test completed. See " + jmeterHome + slash + "example.jtl file for results");
System.out.println("JMeter .jmx script is available at " + jmeterHome + slash + "example.jmx");
System.exit(0);
}
}
System.err.println("jmeter.home property is not set or pointing to incorrect location");
System.exit(1);
}
}
线程“示例线程组 1-1”中的异常 java.lang.NoSuchMethodError: org.apache.jmeter.util.HttpSSLProtocolSocketFactory.(Lorg/apache/jmeter/util/JsseSSLManager;I)V 在 org.apache.jmeter.protocol.http.util.HC4TrustAllSSLSocketFactory.(HC4TrustAllSSLSocketFactory.java:55) 在 org.apache.jmeter.protocol.http.sampler.LazySchemeSocketFactory$AdapteeHolder.checkAndInit(LazySchemeSocketFactory.java:52) 在 org.apache.jmeter.protocol.http.sampler.LazySchemeSocketFactory$AdapteeHolder.(LazySchemeSocketFactory.java:44) 在 org.apache.jmeter.protocol.http.sampler.LazySchemeSocketFactory.createSocket(LazySchemeSocketFactory.java:79) 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:168) 在 org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326) 在 org.apache.jmeter.protocol.http.sampler.MeasuringConnectionManager$MeasuredConnection.open(MeasuringConnectionManager.java:114) 在 org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) 在 org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) 在 org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:654) 在 org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:413) 在 org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:76) 在 org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1166) 在 org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1155) 在 org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651) 在 org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570) 在 org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) 在 org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) 在 java.lang.Thread.run(Thread.java:748)
我写了一个用于加载性能的 java 代码,我用 google url 编译它执行成功但是我输入了我的没有 ssl 证书的 url,代码不执行并且它显示这个异常,
根据 JMeter 文档的 SSL 加密 章节:
JMeter HTTP 采样器配置为接受所有证书,无论是否受信任,无论有效期等如何。 这是为了在测试服务器时提供最大的灵活性。
这意味着如果你使用 HTTP Request 采样器,即使服务器端证书有问题,它也会成功执行。
如果您编写了自己的 Java 代码并尝试在 JSR223 测试元素 中使用它或尝试 创建 JMeter 插件 您可以创建一个特殊的 SSLSocketFactory,它将信任所有证书,如 Trusting all certificates using HttpClient over HTTPS 线程
无论如何,如果没有看到您的完整代码,我们无法提供全面的帮助。