mstover1    01/07/19 14:04:38

  Added:       src/org/apache/jmeter NonGuiDriver.java
               src/org/apache/jmeter/gui/tree NonGuiTree.java
                        NonGuiTreeNode.java
  Log:
  Classes to run jmeter in non-gui mode
  
  Revision  Changes    Path
  1.1                  jakarta-jmeter/src/org/apache/jmeter/NonGuiDriver.java
  
  Index: NonGuiDriver.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jmeter;
  
  import java.io.FileInputStream;
  import java.io.File;
  
  import org.apache.jmeter.engine.StandardJMeterEngine;
  import org.apache.jmeter.threads.ThreadGroup;
  import org.xml.sax.InputSource;
  import org.apache.xerces.parsers.SAXParser;
  import org.xml.sax.XMLReader;
  import org.apache.jmeter.save.xml.XmlHandler;
  import org.apache.jmeter.save.JMeterNameSpaceHandler;
  import org.apache.jmeter.control.TestPlan;
  import org.apache.jmeter.util.JMeterUtils;
  import org.apache.jmeter.util.ListedHashTree;
  import org.apache.jmeter.gui.tree.NonGuiTree;
  
  import java.util.*;
  
  /************************************************************
   *  Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
   *    This class uses a JMeter file that has been saved using 
org.apache.jmeter.NewDriver
   *    (The GUI version of the program). It eliminates the need for Swing components 
while
   *    running JMeter tests and hence can be run from non window clients.
  
   *  Usage:    java org.apache.jmeter.NonGuiDriver <propery file> <source file>
   *
   *    @see    org.apache.jmeter.gui.tree.NonGuiTree
   *
   *    @author     Tushar Bhatia
   *    @created    June 18, 2001
   *    @version    1.0
   ***********************************************************/
  
  public class NonGuiDriver {
  
        public static void main(String arg[]){
                if(arg.length != 2){
                        System.out.println("Non GUI Driver for JMeter Run. 
\nUsage:java org.apache.jmeter.NonGuiDriver <propery file> <source file>");
                        System.exit(1);
                }
                JMeterUtils.getProperties(arg[0]);
  
                NonGuiDriver driver = new NonGuiDriver();
                driver.run(arg[1]);
        }
  
        private void run(String fileName){
                FileInputStream reader = null;
                try {
                         File f = new File(fileName);
                         if(!f.exists() || !f.isFile()) {
                                 println("Could not open " + fileName);
                                 return;
                         }
  
                        reader = new FileInputStream(f);
                        XmlHandler handler =
                                 new XmlHandler(new JMeterNameSpaceHandler());
                        XMLReader parser = JMeterUtils.getXMLParser();
                        parser.setContentHandler(handler);
                        parser.setErrorHandler(handler);
                        parser.parse(new InputSource(reader));
  
                        ListedHashTree tree = handler.getDataTree();
                        println("Created the tree successfully");
  
                        NonGuiTree ngt = new NonGuiTree();
                        ngt.addSubTree(tree, null);
                        TestPlan tp = 
(TestPlan)ngt.compileComponent(ngt.getChildAt(0));
                        println("Compiled the Test Plan successfully");
  
                        Collection groups = tp.getThreadGroups();
                        StandardJMeterEngine engine = new StandardJMeterEngine();
                        for (Iterator i = groups.iterator(); i.hasNext(); ) {
                                println("Adding a threadgroup");
                                engine.addThreadGroup((ThreadGroup) i.next());
                        }
                        println("Starting the test");
                        engine.runTest();
  
                }catch(Exception e){
                        System.out.println("Error in NonGUIDriver" + e.getMessage());
                        e.printStackTrace();
                }
        }
  
        private static void println(String str){
                System.out.println(str);
        }
  
  }
  
  
  1.1                  jakarta-jmeter/src/org/apache/jmeter/gui/tree/NonGuiTree.java
  
  Index: NonGuiTree.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jmeter.gui.tree;
  
  import java.util.*;
  import org.apache.jmeter.util.*;
  import org.apache.jmeter.control.TestPlan;
  import org.apache.jmeter.threads.ThreadGroup;
  import org.apache.jmeter.config.ConfigElement;
  import org.apache.jmeter.control.*;
  import org.apache.jmeter.timers.Timer;
  import org.apache.jmeter.samplers.SampleListener;
  import org.apache.jmeter.gui.JMeterComponentModel;
  import org.apache.jmeter.util.ListedHashTree;
  
  /************************************************************
   *  Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
   *    This class simulates a tree and eliminates the need for the swing components.
   *    Most of the code in this class has been borrowed from JMeterTreeModel.
   *
   *    @see    org.apache.jmeter.NonGuiDriver
   *
   *    @author     Tushar Bhatia
   *    @created    June 18, 2001
   *    @version    1.0
   ***********************************************************/
  
  public class NonGuiTree extends NonGuiTreeNode{
  
        public NonGuiTree(){
                super(null);
                this.insertNodeInto(new NonGuiTreeNode(TestPlan.createTestPlan("Test 
Plan")),0);
                this.insertNodeInto(new NonGuiTreeNode(new WorkBench("WorkBench")),1);
        }
  
        public void addSubTree(ListedHashTree subTree, NonGuiTreeNode current)
        {
                Iterator iter = subTree.list().iterator();
                while (iter.hasNext())
                {
                        JMeterComponentModel item = (JMeterComponentModel)iter.next();
                        if(item instanceof TestPlan)
                        {
                                current = 
(NonGuiTreeNode)((NonGuiTreeNode)getRoot()).getChildAt(0);
                                addSubTree(subTree.get(item), current);
                        }
                        else
                        {
                                addSubTree(subTree.get(item), 
addComponent(item,current));
                        }
                }
        }
  
        private NonGuiTreeNode addComponent(JMeterComponentModel 
component,NonGuiTreeNode node)
        {
                NonGuiTreeNode newNode = new NonGuiTreeNode(component);
                node.insertNodeInto(newNode, node.getChildCount());
                newNode.setParent(node);
                return newNode;
        }
  
        public NonGuiTreeNode getRoot(){
                return this;
        }
  
        /** Returns the JMeterComponentModel after compiling(adding all children to 
different objects)
                after parsing the tree. To invoke this method use the following code:
                <br><pre>
                        NonGuiTree ngt = new NonGuiTree();
                        // pass the LinkedHashTree to this class to store all the 
components.
                        ngt.addSubTree(linkedHashTree, null);
                        // now compile
                        TestPlan tp = 
(TestPlan)ngt.compileComponent(ngt.getChildAt(0));
                        Collection threads = tp.getThreadGroups();
                        .
                        .
                        // and work on the threads by passing them to the engine etc.
                </pre>
                @see org.apache.NonGuiDriver
        */
        public JMeterComponentModel compileComponent(NonGuiTreeNode node)
        {
                traverseNode(node);
                return (JMeterComponentModel)node.getUserObject();
        }
  
        private void traverseNode(NonGuiTreeNode node)
        {
                Enumeration enum = node.children();
                while (enum.hasMoreElements())
                {
                        NonGuiTreeNode child = (NonGuiTreeNode)enum.nextElement();
                        traverseNode(child);
                }
                NonGuiTreeNode parent = (NonGuiTreeNode)node.getParent();
                if(node != null && parent != null)
                        addChildToParent(node.getUserObject(),parent.getUserObject());
        }
  
        private void addChildToParent(Object child,Object parent)
        {
                if(parent instanceof ThreadGroup)
                {
                        if(child instanceof Timer)
                        {
                                ((ThreadGroup)parent).addTimer((Timer)child);
                        }
                        else if(child instanceof ConfigElement)
                        {
                                
((ThreadGroup)parent).addConfigElement((ConfigElement)child);
                        }
                        else if(child instanceof SamplerController)
                        {
                                
((ThreadGroup)parent).addSamplerController((SamplerController)child);
                        }
                        else if(child instanceof SampleListener)
                        {
                                
((ThreadGroup)parent).addListener((SampleListener)child);
                        }
                }
                else if(parent instanceof SamplerController)
                {
                        if(child instanceof SamplerController)
                        {
                                
((SamplerController)parent).addSamplerController((SamplerController)child);
                        }
                        else if(child instanceof ConfigElement)
                        {
                                
((SamplerController)parent).addConfigElement((ConfigElement)child);
                        }
                }
                else if(parent instanceof TestPlan)
                {
                        if(child instanceof ThreadGroup)
                        {
                                ((TestPlan)parent).addThreadGroup((ThreadGroup)child);
                        }
                }
        }
  
  }
  
  
  1.1                  
jakarta-jmeter/src/org/apache/jmeter/gui/tree/NonGuiTreeNode.java
  
  Index: NonGuiTreeNode.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jmeter.gui.tree;
  
  import java.util.*;
  
  import org.apache.jmeter.gui.JMeterComponentModel;
  
  /************************************************************
   *  Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
   *    This class simulates a node of the tree. It eliminates the need for the swing
   *    components. The code for this class mimics JMeterTreeNode
   *    This class does not implement the JMeterComponentModel as JMeterTreeNode 
because
   *    we are not interested in displaying anything. Remember - No GUI here!
   *
   *    @see    org.apache.jmeter.NonGuiTree
   *
   *    @author     Tushar Bhatia
   *    @created    June 18, 2001
   *    @version    1.0
   ***********************************************************/
  
  public class NonGuiTreeNode {
        /** All the sub nodes in this node. Each would be a NonGuiTreeNode
        */
        private Vector children = new Vector();
        /** The user object this NonGuiTreeNode represents. This could be a 
ThreadGroup, SampleController,
                UrlConfig, Timer, etc.
        */
        private JMeterComponentModel userObject = null;
  
        /** The parent for this Node.
                @see insertNodeInto
        */
        private NonGuiTreeNode parent;
  
        /** returns an enumeration of all nodes for the current node.
        */
        public Enumeration children(){
                return children.elements();
        }
  
        /** Constructor. Creates a NonGuiTreeNode based on a JMeterComponentModel
        */
        public NonGuiTreeNode(JMeterComponentModel component){
                this.userObject = component;
        }
  
        /** returns the user object that this node represents.
        */
        public JMeterComponentModel getUserObject(){
                return userObject;
        }
  
  
        public NonGuiTreeNode getParent(){
                return parent;
        }
  
        public void setParent(NonGuiTreeNode parent){
                this.parent = parent;
        }
  
        /** Inserts a child node at the specified position.
        */
        public void insertNodeInto(NonGuiTreeNode child, int position){
                children.insertElementAt(child, position);
        }
  
        public int getChildCount(){
                return children.size();
        }
  
        public NonGuiTreeNode getChildAt(int position){
                return (NonGuiTreeNode)children.elementAt(position);
        }
  }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to