Search in sources :

Example 1 with JMeterEngine

use of org.apache.jmeter.engine.JMeterEngine in project jmeter-plugins by undera.

the class TestPlanCheckTool method loadJMX.

private HashTree loadJMX(File file) throws Exception {
    HashTree tree = SaveService.loadTree(file);
    // unfortunately core JMeter code does not throw exception, we may only guess...
    if (tree == null) {
        throw new TestPlanBrokenException("There was problems loading test plan. Please investigate error messages above.");
    }
    // Remove the disabled items
    JMeter.convertSubTree(tree);
    JMeterEngine engine = new StandardJMeterEngine();
    engine.configure(tree);
    return tree;
}
Also used : HashTree(org.apache.jorphan.collections.HashTree) StandardJMeterEngine(org.apache.jmeter.engine.StandardJMeterEngine) JMeterEngine(org.apache.jmeter.engine.JMeterEngine) StandardJMeterEngine(org.apache.jmeter.engine.StandardJMeterEngine)

Example 2 with JMeterEngine

use of org.apache.jmeter.engine.JMeterEngine in project jmeter by apache.

the class JMeter method runNonGui.

// run test in batch mode
@SuppressWarnings("JdkObsolete")
void runNonGui(String testFile, String logFile, boolean remoteStart, String remoteHostsString, boolean generateReportDashboard) throws ConfigurationException {
    try {
        File f = new File(testFile);
        if (!f.exists() || !f.isFile()) {
            throw new ConfigurationException("The file " + f.getAbsolutePath() + " doesn't exist or can't be opened");
        }
        FileServer.getFileServer().setBaseForScript(f);
        HashTree tree = SaveService.loadTree(f);
        // Deliberate use of deprecated ctor
        @SuppressWarnings("deprecation") JMeterTreeModel // NOSONAR Create non-GUI version to avoid headless problems
        treeModel = new JMeterTreeModel(new Object());
        JMeterTreeNode root = (JMeterTreeNode) treeModel.getRoot();
        treeModel.addSubTree(tree, root);
        // Hack to resolve ModuleControllers in non GUI mode
        SearchByClass<ReplaceableController> replaceableControllers = new SearchByClass<>(ReplaceableController.class);
        tree.traverse(replaceableControllers);
        Collection<ReplaceableController> replaceableControllersRes = replaceableControllers.getSearchResults();
        for (ReplaceableController replaceableController : replaceableControllersRes) {
            replaceableController.resolveReplacementSubTree(root);
        }
        // Ensure tree is interpreted (ReplaceableControllers are replaced)
        // For GUI runs this is done in Start.java
        HashTree clonedTree = convertSubTree(tree, true);
        Summariser summariser = null;
        // $NON-NLS-1$
        String summariserName = JMeterUtils.getPropDefault("summariser.name", "");
        if (summariserName.length() > 0) {
            log.info("Creating summariser <{}>", summariserName);
            println("Creating summariser <" + summariserName + ">");
            summariser = new Summariser(summariserName);
        }
        ResultCollector resultCollector = null;
        if (logFile != null) {
            resultCollector = new ResultCollector(summariser);
            resultCollector.setFilename(logFile);
            clonedTree.add(clonedTree.getArray()[0], resultCollector);
        } else {
            // only add Summariser if it can not be shared with the ResultCollector
            if (summariser != null) {
                clonedTree.add(clonedTree.getArray()[0], summariser);
            }
        }
        if (deleteResultFile) {
            SearchByClass<ResultCollector> resultListeners = new SearchByClass<>(ResultCollector.class);
            clonedTree.traverse(resultListeners);
            Iterator<ResultCollector> irc = resultListeners.getSearchResults().iterator();
            while (irc.hasNext()) {
                ResultCollector rc = irc.next();
                File resultFile = new File(rc.getFilename());
                if (resultFile.exists() && !resultFile.delete()) {
                    throw new IllegalStateException("Could not delete results file " + resultFile.getAbsolutePath() + "(canRead:" + resultFile.canRead() + ", canWrite:" + resultFile.canWrite() + ")");
                }
            }
        }
        ReportGenerator reportGenerator = null;
        if (logFile != null && generateReportDashboard) {
            reportGenerator = new ReportGenerator(logFile, resultCollector);
        }
        // Used for remote notification of threads start/stop,see BUG 54152
        // Summariser uses this feature to compute correctly number of threads
        // when NON GUI mode is used
        clonedTree.add(clonedTree.getArray()[0], new RemoteThreadsListenerTestElement());
        List<JMeterEngine> engines = new ArrayList<>();
        println("Created the tree successfully using " + testFile);
        if (!remoteStart) {
            JMeterEngine engine = new StandardJMeterEngine();
            clonedTree.add(clonedTree.getArray()[0], new ListenToTest(org.apache.jmeter.JMeter.ListenToTest.RunMode.LOCAL, false, reportGenerator));
            engine.configure(clonedTree);
            long now = System.currentTimeMillis();
            println("Starting standalone test @ " + new Date(now) + " (" + now + ")");
            engines.add(engine);
            engine.runTest();
        } else {
            // $NON-NLS-1$
            java.util.StringTokenizer st = new java.util.StringTokenizer(remoteHostsString.trim(), ",");
            List<String> hosts = new ArrayList<>();
            while (st.hasMoreElements()) {
                hosts.add(((String) st.nextElement()).trim());
            }
            ListenToTest testListener = new ListenToTest(org.apache.jmeter.JMeter.ListenToTest.RunMode.REMOTE, remoteStop, reportGenerator);
            clonedTree.add(clonedTree.getArray()[0], testListener);
            DistributedRunner distributedRunner = new DistributedRunner(this.remoteProps);
            // NOSONAR
            distributedRunner.setStdout(System.out);
            // NOSONAR
            distributedRunner.setStdErr(System.err);
            distributedRunner.init(hosts, clonedTree);
            engines.addAll(distributedRunner.getEngines());
            testListener.setStartedRemoteEngines(engines);
            distributedRunner.start();
        }
        startUdpDdaemon(engines);
    } catch (ConfigurationException e) {
        throw e;
    } catch (Exception e) {
        // NOSONAR
        System.out.println("Error in NonGUIDriver " + e.toString());
        log.error("Error in NonGUIDriver", e);
        throw new ConfigurationException("Error in NonGUIDriver " + e.getMessage(), e);
    }
}
Also used : HashTree(org.apache.jorphan.collections.HashTree) RemoteThreadsListenerTestElement(org.apache.jmeter.threads.RemoteThreadsListenerTestElement) ArrayList(java.util.ArrayList) JMeterTreeModel(org.apache.jmeter.gui.tree.JMeterTreeModel) Summariser(org.apache.jmeter.reporters.Summariser) ReportGenerator(org.apache.jmeter.report.dashboard.ReportGenerator) ConfigurationException(org.apache.jmeter.report.config.ConfigurationException) StringTokenizer(java.util.StringTokenizer) JMeterTreeNode(org.apache.jmeter.gui.tree.JMeterTreeNode) ReplaceableController(org.apache.jmeter.control.ReplaceableController) ResultCollector(org.apache.jmeter.reporters.ResultCollector) StandardJMeterEngine(org.apache.jmeter.engine.StandardJMeterEngine) SearchByClass(org.apache.jorphan.collections.SearchByClass) Date(java.util.Date) ConfigurationException(org.apache.jmeter.report.config.ConfigurationException) ScriptException(javax.script.ScriptException) JMeterException(org.apache.jorphan.util.JMeterException) ConversionException(com.thoughtworks.xstream.converters.ConversionException) SocketException(java.net.SocketException) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) MalformedURLException(java.net.MalformedURLException) IllegalUserActionException(org.apache.jmeter.exceptions.IllegalUserActionException) StringTokenizer(java.util.StringTokenizer) JMeterEngine(org.apache.jmeter.engine.JMeterEngine) ClientJMeterEngine(org.apache.jmeter.engine.ClientJMeterEngine) StandardJMeterEngine(org.apache.jmeter.engine.StandardJMeterEngine) DistributedRunner(org.apache.jmeter.engine.DistributedRunner) File(java.io.File)

Example 3 with JMeterEngine

use of org.apache.jmeter.engine.JMeterEngine in project jmeter by apache.

the class JMeter method waitForSignals.

private static void waitForSignals(final List<JMeterEngine> engines, DatagramSocket socket) {
    byte[] buf = new byte[80];
    // NOSONAR
    System.out.println("Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port " + socket.getLocalPort());
    DatagramPacket request = new DatagramPacket(buf, buf.length);
    try {
        while (true) {
            socket.receive(request);
            InetAddress address = request.getAddress();
            // Only accept commands from the local host
            if (address.isLoopbackAddress()) {
                String command = new String(request.getData(), request.getOffset(), request.getLength(), StandardCharsets.US_ASCII);
                // NOSONAR
                System.out.println("Command: " + command + " received from " + address);
                log.info("Command: {} received from {}", command, address);
                switch(command) {
                    case "StopTestNow":
                        for (JMeterEngine engine : engines) {
                            engine.stopTest(true);
                        }
                        break;
                    case "Shutdown":
                        for (JMeterEngine engine : engines) {
                            engine.stopTest(false);
                        }
                        break;
                    case "HeapDump":
                        HeapDumper.dumpHeap();
                        break;
                    case "ThreadDump":
                        ThreadDumper.threadDump();
                        break;
                    default:
                        // NOSONAR
                        System.out.println("Command: " + command + " not recognised ");
                }
            }
        }
    } catch (Exception e) {
        // NOSONAR
        System.out.println(e);
    } finally {
        socket.close();
    }
}
Also used : DatagramPacket(java.net.DatagramPacket) JMeterEngine(org.apache.jmeter.engine.JMeterEngine) ClientJMeterEngine(org.apache.jmeter.engine.ClientJMeterEngine) StandardJMeterEngine(org.apache.jmeter.engine.StandardJMeterEngine) InetAddress(java.net.InetAddress) ConfigurationException(org.apache.jmeter.report.config.ConfigurationException) ScriptException(javax.script.ScriptException) JMeterException(org.apache.jorphan.util.JMeterException) ConversionException(com.thoughtworks.xstream.converters.ConversionException) SocketException(java.net.SocketException) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) MalformedURLException(java.net.MalformedURLException) IllegalUserActionException(org.apache.jmeter.exceptions.IllegalUserActionException)

Aggregations

JMeterEngine (org.apache.jmeter.engine.JMeterEngine)3 StandardJMeterEngine (org.apache.jmeter.engine.StandardJMeterEngine)3 ConversionException (com.thoughtworks.xstream.converters.ConversionException)2 FileNotFoundException (java.io.FileNotFoundException)2 IOException (java.io.IOException)2 MalformedURLException (java.net.MalformedURLException)2 SocketException (java.net.SocketException)2 ScriptException (javax.script.ScriptException)2 ClientJMeterEngine (org.apache.jmeter.engine.ClientJMeterEngine)2 IllegalUserActionException (org.apache.jmeter.exceptions.IllegalUserActionException)2 ConfigurationException (org.apache.jmeter.report.config.ConfigurationException)2 HashTree (org.apache.jorphan.collections.HashTree)2 JMeterException (org.apache.jorphan.util.JMeterException)2 File (java.io.File)1 DatagramPacket (java.net.DatagramPacket)1 InetAddress (java.net.InetAddress)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 StringTokenizer (java.util.StringTokenizer)1 ReplaceableController (org.apache.jmeter.control.ReplaceableController)1