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 2003/06/05 02:13:41 UTC

cvs commit: jakarta-jmeter/src/functions/org/apache/jmeter/functions Random.java

mstover1    2003/06/04 17:13:40

  Modified:    src/core/org/apache/jmeter/engine/util CompoundVariable.java
                        ReplaceStringWithFunctions.java
               src/core/org/apache/jmeter/resources messages.properties
                        messages_de.properties messages_ja.properties
                        messages_no.properties
               src/core/org/apache/jmeter/util JMeterUtils.java
  Added:       src/functions/org/apache/jmeter/functions Random.java
  Log:
  New Random Function
  Efficiency improvements to variable resolution
  
  Revision  Changes    Path
  1.12      +23 -20    jakarta-jmeter/src/core/org/apache/jmeter/engine/util/CompoundVariable.java
  
  Index: CompoundVariable.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/util/CompoundVariable.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- CompoundVariable.java	2 Jun 2003 00:34:44 -0000	1.11
  +++ CompoundVariable.java	5 Jun 2003 00:13:40 -0000	1.12
  @@ -99,11 +99,12 @@
   	private Map varMap = new HashMap();
   
       static Map functions = new HashMap();
  -    private boolean hasFunction, hasStatics, hasUnknowns;
  +    private boolean hasFunction, isDynamic;
       private String staticSubstitution;
       private Perl5Util util = new Perl5Util();
       private Perl5Compiler compiler = new Perl5Compiler();
       private static final String unescapePattern = "[\\\\]([${}\\,])";
  +    private String permanentResults = "";
       
       LinkedList compiledComponents = new LinkedList();
   
  @@ -133,9 +134,8 @@
       public CompoundVariable()
       {
       	super();
  +        isDynamic = true;
           hasFunction = false;
  -        hasStatics = false;
  -        hasUnknowns = false;
           staticSubstitution = "";
       }
       
  @@ -149,10 +149,17 @@
   
   	public String execute() 
   	{
  -		JMeterContext context = JMeterContextService.getContext();
  -		SampleResult previousResult = context.getPreviousResult();
  -		Sampler currentSampler = context.getCurrentSampler();
  -		return execute( previousResult, currentSampler );
  +        if(isDynamic)
  +        {
  +    		JMeterContext context = JMeterContextService.getContext();
  +    		SampleResult previousResult = context.getPreviousResult();
  +    		Sampler currentSampler = context.getCurrentSampler();
  +    		return execute( previousResult, currentSampler );
  +        }
  +        else
  +        {
  +            return permanentResults;
  +        }
   	}
       
       /**
  @@ -173,6 +180,7 @@
           {
               return "";
           }
  +        boolean testDynamic = false;
           StringBuffer results = new StringBuffer();
           Iterator iter = compiledComponents.iterator();
           while (iter.hasNext())
  @@ -181,6 +189,7 @@
               log.debug("executing object: " + item);
               if (item instanceof Function)
               {
  +                testDynamic = true;
                   try
                   {
                       results.append(
  @@ -194,6 +203,7 @@
               }
               else if (item instanceof SimpleVariable)
               {
  +                testDynamic = true;
              		results.append( ((SimpleVariable) item).toString() );	
               }
               else
  @@ -201,6 +211,11 @@
                   results.append(item);
               }
           }
  +        if(!testDynamic)
  +        {
  +            isDynamic = false;
  +            permanentResults = results.toString();
  +        }
           return results.toString();
       }
   
  @@ -220,7 +235,6 @@
       public void clear()
       {
           hasFunction = false;
  -        hasStatics = false;
           compiledComponents.clear();
           staticSubstitution = "";
       }
  @@ -481,17 +495,6 @@
       public boolean hasFunction()
       {
           return hasFunction;
  -    }
  -
  -	public boolean hasStatics()
  -    {
  -        return hasStatics;
  -    }
  -
  -
  -    public String getStaticSubstitution()
  -    {
  -        return staticSubstitution;
       }
   
       /**
  
  
  
  1.2       +0 -5      jakarta-jmeter/src/core/org/apache/jmeter/engine/util/ReplaceStringWithFunctions.java
  
  Index: ReplaceStringWithFunctions.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/util/ReplaceStringWithFunctions.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ReplaceStringWithFunctions.java	5 May 2003 17:23:01 -0000	1.1
  +++ ReplaceStringWithFunctions.java	5 Jun 2003 00:13:40 -0000	1.2
  @@ -11,7 +11,6 @@
   import org.apache.jmeter.functions.InvalidVariableException;
   import org.apache.jmeter.testelement.property.FunctionProperty;
   import org.apache.jmeter.testelement.property.JMeterProperty;
  -import org.apache.jmeter.testelement.property.StringProperty;
   
   /**
    * @author ano ano
  @@ -40,10 +39,6 @@
           if (getMasterFunction().hasFunction())
           {
               newValue = new FunctionProperty(prop.getName(), getMasterFunction().getFunction());
  -        }
  -        else if (getMasterFunction().hasStatics())
  -        {
  -            newValue = new StringProperty(prop.getName(), getMasterFunction().getStaticSubstitution());
           }
           return newValue;
       }
  
  
  
  1.42      +2 -0      jakarta-jmeter/src/core/org/apache/jmeter/resources/messages.properties
  
  Index: messages.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages.properties,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- messages.properties	4 Jun 2003 14:31:43 -0000	1.41
  +++ messages.properties	5 Jun 2003 00:13:40 -0000	1.42
  @@ -286,6 +286,8 @@
   mailer_attributes_panel=Mailing attributes
   duration_assertion_input_error=Please enter a valid positive integer.
   function_name_param=Name of function.  Used to store values for use elsewhere in the testplan.
  +minimum_param=The minimum value allowed for a range of values
  +maximum_param=The maximum value allowed for a range of values
   user_parameters_title=User Parameters
   user=User
   user_parameters_table=Parameters
  
  
  
  1.34      +2 -0      jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_de.properties
  
  Index: messages_de.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_de.properties,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- messages_de.properties	4 Jun 2003 14:31:43 -0000	1.33
  +++ messages_de.properties	5 Jun 2003 00:13:40 -0000	1.34
  @@ -355,3 +355,5 @@
   test_configuration=Test Configuration
   test =Test
   ldap_testing_title= LDAP Request
  +minimum_param=The minimum value allowed for a range of values
  +maximum_param=The maximum value allowed for a range of values
  \ No newline at end of file
  
  
  
  1.30      +2 -0      jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_ja.properties
  
  Index: messages_ja.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_ja.properties,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- messages_ja.properties	4 Jun 2003 14:31:43 -0000	1.29
  +++ messages_ja.properties	5 Jun 2003 00:13:40 -0000	1.30
  @@ -349,3 +349,5 @@
   test_configuration=Test Configuration
   test =Test
   ldap_testing_title= LDAP Request
  +minimum_param=The minimum value allowed for a range of values
  +maximum_param=The maximum value allowed for a range of values
  \ No newline at end of file
  
  
  
  1.30      +2 -0      jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_no.properties
  
  Index: messages_no.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_no.properties,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- messages_no.properties	4 Jun 2003 14:31:43 -0000	1.29
  +++ messages_no.properties	5 Jun 2003 00:13:40 -0000	1.30
  @@ -341,3 +341,5 @@
   test_configuration=Test Configuration
   test =Test
   ldap_testing_title= LDAP Request
  +minimum_param=The minimum value allowed for a range of values
  +maximum_param=The maximum value allowed for a range of values
  \ No newline at end of file
  
  
  
  1.23      +3 -2      jakarta-jmeter/src/core/org/apache/jmeter/util/JMeterUtils.java
  
  Index: JMeterUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/util/JMeterUtils.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- JMeterUtils.java	4 Jun 2003 14:31:43 -0000	1.22
  +++ JMeterUtils.java	5 Jun 2003 00:13:40 -0000	1.23
  @@ -97,7 +97,7 @@
    */
   public class JMeterUtils implements UnitTestManager
   {
  -        private static final String VERSION="20030604";
  +        private static final String VERSION="1.9.RC20030604";
           private static PatternCacheLRU patternCache = new PatternCacheLRU(1000,new Perl5Compiler());
   
   	transient private static Logger log =
  @@ -977,6 +977,7 @@
   		return VERSION;
   	}
   }
  +
   
   
   
  
  
  
  1.1                  jakarta-jmeter/src/functions/org/apache/jmeter/functions/Random.java
  
  Index: Random.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.functions;
  
  import java.io.Serializable;
  import java.util.Collection;
  import java.util.LinkedList;
  import java.util.List;
  
  import org.apache.jmeter.engine.util.CompoundVariable;
  import org.apache.jmeter.samplers.SampleResult;
  import org.apache.jmeter.samplers.Sampler;
  import org.apache.jmeter.threads.JMeterVariables;
  import org.apache.jmeter.util.JMeterUtils;
  
  /**
   * Provides a Random function which returns a random integer between
   * a min (first argument) and a max (seceond argument).
   *
   * @author <a href="mailto:sjkwadzo@praize.com">Jonathan Kwadzo</a>
   * @version $Id: Random.java,v 1.1 2003/06/05 00:13:40 mstover1 Exp $
   */
  public class Random extends AbstractFunction implements Serializable
  {
  
  	private static final List desc = new LinkedList();
  	private static final String KEY = "__Random";
  
  	static
  	{
  		desc.add(JMeterUtils.getResString("minimum_param"));
  		desc.add(JMeterUtils.getResString("maximum_param"));
  		desc.add(JMeterUtils.getResString("function_name_param"));
  	}
  
  	private CompoundVariable varName,minimum,maximum;
  
  
      /**
       * No-arg constructor.
       */
  	public Random() {}
  
      /**
       * Clone this Add object.
       *
       * @return A new Add object.
       */
  	public Object clone()
  	{
  		Random newRandom = new Random();
  		return newRandom;
  	}
  
  	/**
  	 * Execute the function.
  	 *
  	 * @see Function#execute(SampleResult, Sampler)
  	 */
  	public synchronized String execute(SampleResult previousResult, Sampler currentSampler)
  			throws InvalidVariableException
  	{
  
  		JMeterVariables vars = getVariables();
  
  		int min = Integer.parseInt(minimum.execute());
  		int max = Integer.parseInt(maximum.execute());
          
  		int rand = (int)Math.round(min + Math.random()*(max-min));
  
  		String randString = Integer.toString(rand);
  		vars.put(varName.execute(), randString);
  
  		return randString;
  
  	}
  
  	/**
  	 * Set the parameters for the function.
  	 *
  	 * @see Function#setParameters(Collection)
  	 */
  	public void setParameters(Collection parameters)
  			throws InvalidVariableException
  	{
  		Object[] values = parameters.toArray();
  
  		if ( values.length < 3 ) {
  			throw new InvalidVariableException();
  		}
          else
          {
              varName = (CompoundVariable)values[2];
              minimum = (CompoundVariable)values[0];
              maximum = (CompoundVariable)values[1];
          }
  
  	}
  
  	/**
  	 * Get the invocation key for this function.
  	 *
  	 * @see Function#getReferenceKey()
  	 */
  	public String getReferenceKey() {
  		return KEY;
  	}
  
  	/**
  	 * Get the description of this function.
  	 *
  	 * @see Function#getArgumentDesc()
  	 */
  	public List getArgumentDesc() {
  		return desc;
  	}
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org