You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by ms...@apache.org on 2001/07/19 23:04:38 UTC

cvs commit: jakarta-jmeter/src/org/apache/jmeter/gui/tree NonGuiTree.java NonGuiTreeNode.java

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 apache@apache.org.
   *
   * 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 apache@apache.org.
   *
   * 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 apache@apache.org.
   *
   * 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: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org