提问者:小点点

为什么异常发生在JMeterjava代码时尝试执行?


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);
    }
}

我写了一个java的代码加载性能,我编译与谷歌网址它执行成功,但我输入我的网址没有ssl证书,代码是不执行,它显示这个异常,


共1个答案

匿名用户

根据JMeter文档SSL加密章节:

JMeterHTTP采样器配置为接受所有证书,无论是否受信任,无论有效期如何等。这是为了在测试服务器时提供最大的灵活性。

这意味着如果您使用HTTP请求采样器,即使服务器端证书有问题,它也会成功执行。

如果您编写了自己的java代码并尝试在JSR223测试元素中使用它或尝试创建JMeter插件,您可以创建一个特殊的SSLSocketFactory,它将信任所有证书,就像在使用HttpClient over HTTPS线程信任所有证书中描述的那样

在任何情况下,如果没有看到您的完整代码,我们都无法全面提供帮助。