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:24:22 UTC
cvs commit: jakarta-jmeter/xdocs/usermanual component_reference.xml
mstover1 2003/06/04 17:24:22
Modified: docs/usermanual component_reference.html
src/functions/org/apache/jmeter/functions
StringFromFile.java
xdocs/usermanual component_reference.xml
Log:
applying patch to StringFromFile and documentation for it from Sebastian Bazley
Revision Changes Path
1.38 +76 -4 jakarta-jmeter/docs/usermanual/component_reference.html
Index: component_reference.html
===================================================================
RCS file: /home/cvs/jakarta-jmeter/docs/usermanual/component_reference.html,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- component_reference.html 4 Jun 2003 14:31:42 -0000 1.37
+++ component_reference.html 5 Jun 2003 00:24:22 -0000 1.38
@@ -12,7 +12,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
- <title>JMeter - User's Manual: Samplers</title>
+ <title>JMeter - User's Manual: Component Reference</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#525D76">
@@ -156,7 +156,8 @@
<li><a href="#__regexFunction">__regexFunction</a></li>
<li><a href="#__counter">__counter</a></li>
<li><a href="#__threadNum">__threadNum</a></li>
- <li><a href="#__sumInt">__sumInt</a></li>
+ <li><a href="#__intsum">__intsum</a></li>
+ <li><a href="#_StringFromFile">_StringFromFile</a></li>
</ul>
</ul>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
@@ -3601,12 +3602,12 @@
<table border="0" cellspacing="0" cellpadding="2">
<tr><td>
<font face="arial,helvetica,sanserif">
- <a name="__sumInt"><h3>13.9.4 __sumInt</h3></a>
+ <a name="__intsum"><h3>13.9.4 __intsum</h3></a>
</font>
</td></tr>
<tr><td>
<p >
- The sumInt function can be used to compute the sum of two or more integer values.
+ The intsum function can be used to compute the sum of two or more integer values.
</p>
<p>
@@ -3648,6 +3649,77 @@
</tr>
</table>
</p>
+ </td></tr>
+ <tr><td><br/></td></tr>
+ </table>
+ <hr>
+ <table border="0" cellspacing="0" cellpadding="2">
+ <tr><td>
+ <font face="arial,helvetica,sanserif">
+ <a name="_StringFromFile"><h3>13.9.5 _StringFromFile</h3></a>
+ </font>
+ </td></tr>
+ <tr><td>
+
+
+ <p >
+
+ The StringFromFile function can be used to read strings from a text file.
+ This is useful for running tests that require lots of variable data.
+ For example when testing a banking application, 100s or 1000s of different account numbers might be required.
+
+ </p>
+
+
+ <p >
+
+ Each time it is called it reads the next line from the file.
+ When the end of the file is reached, it will start reading again from the beginning.
+ If there are multiple references to the function in a test script, each will open the file independently,
+ even if the file names are the same.
+ [If the value is to be used again elsewhere, use different variable names for each function call.]
+
+ </p>
+
+
+ <p >
+ If an error occurs opening or reading the file, then the function returns the string "**ERR**"
+ </p>
+
+
+ <p>
+ <b>Parameters</b>
+ <table border="1" cellspacing="0" cellpadding="2">
+ <tr><th>Attribute</th><th>Description</th><th>Required</th></tr>
+ <tr>
+ <td>First argument</td>
+ <td> Path to the file name.
+ (The path can be relative to the JMeter launch directory)
+
+ </td>
+ <td>
+ Yes
+ </td>
+ </tr>
+ <tr>
+ <td>Second argument</td>
+ <td>
+ A reference name - refName - for reusing the value created by this function.
+ Stored values are of the form ${refName}.
+
+ </td>
+ <td>
+ No
+ </td>
+ </tr>
+ </table>
+ </p>
+ <p >
+ The file name parameter is resolved when the file is opened or re-opened.
+ </p>
+ <p >
+ The reference name parameter (if supplied) is resolved every time the function is executed.
+ </p>
</td></tr>
<tr><td><br/></td></tr>
</table>
1.6 +113 -17 jakarta-jmeter/src/functions/org/apache/jmeter/functions/StringFromFile.java
Index: StringFromFile.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/functions/org/apache/jmeter/functions/StringFromFile.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- StringFromFile.java 3 May 2003 15:34:33 -0000 1.5
+++ StringFromFile.java 5 Jun 2003 00:24:22 -0000 1.6
@@ -1,3 +1,58 @@
+/*
+ * ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001,2003 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.BufferedReader;
@@ -16,11 +71,34 @@
import org.apache.log.Logger;
-/*
- * It appears that JMeter instantiates a new copy of each function for every reference in a Sampler
- * or elsewhere.
- */
+/**
+ * StringFromFile (Function)
+ *
+ * @author default
+ *
+ * @version $Id$
+ *
+ * Function to read a String from a text file
+ *
+ * Parameters:
+ * - file name
+ * - variable name (optional - defaults to StringFromFile_)
+ *
+ * Returns:
+ * - the next line from the file - or **ERR** if an error occurs
+ * - value is also saved in the variable for later re-use.
+ *
+ * Ensure that different variable names are used for each call to the function
+ *
+ *
+ * Notes:
+ * - JMeter instantiates a copy of each function for every reference in a Sampler
+ * or elsewhere; each instance will open its own copy of the the file
+ * - the file name is resolved at file (re-)open time
+ * - the output variable name is resolved every time the function is invoked
+ *
+ */
public class StringFromFile extends AbstractFunction implements Serializable
{
transient private static Logger log = Hierarchy.getDefaultHierarchy().getLoggerFor(
@@ -40,6 +118,7 @@
private Object[] values;
private BufferedReader myBread; // Buffered reader
private boolean reopenFile=true; // Set from parameter list one day ...
+ private String fileName; // needed for error messages
public StringFromFile()
{
@@ -48,15 +127,21 @@
public Object clone()
{
StringFromFile newReader = new StringFromFile();
+ if (log.isDebugEnabled()){ // Skip expensive paramter creation ..
+ log.debug(this+"::StringFromFile.clone()",new Throwable("debug"));
+ }
+
return newReader;
}
- private void openFile( String fileName ){
+ private void openFile(){
+ fileName = ((CompoundVariable)values[0]).execute();
try {
FileReader fis = new FileReader(fileName);
myBread = new BufferedReader(fis);
+ log.info("Opened "+fileName);
} catch (Exception e) {
- log.error("openFile",e);
+ log.error("Error in openFile "+fileName,e);
}
}
@@ -68,44 +153,55 @@
JMeterVariables vars = getVariables();
- String fileName = ((CompoundVariable)values[0]).execute();
- myName = ((CompoundVariable)values[1]).execute();
-
- if(myBread == null)
- {
- openFile(fileName);
- }
-
+ if (values.length >= 2) {
+ myName = ((CompoundVariable)values[1]).execute();
+ }
+
myValue="**ERR**";
if (null != myBread) {// Did we open the file?
try {
String line = myBread.readLine();
if (line == null && reopenFile) { // EOF, re-open file
+ log.info("Reached EOF on "+fileName);
myBread.close();
- openFile(fileName);
+ openFile();
line = myBread.readLine();
}
myValue = line;
} catch (Exception e) {
- log.error("Token",e);
+ log.error("Error reading file "+fileName,e);
}
}
vars.put(myName,myValue);
+
+ log.debug(this+"::StringFromFile.execute() value " + myValue);
+
return myValue;
}
/* (non-Javadoc)
+ * Parameters:
+ * - file name
+ * - variable name (optional)
+ *
* @see org.apache.jmeter.functions.Function#setParameters(Collection)
*/
public void setParameters(Collection parameters)
throws InvalidVariableException {
+ log.debug(this+"::StringFromFile.setParameters()");
+
values = parameters.toArray();
- if ( values.length > 2 )
+ if (( values.length > 2 ) || (values.length < 1)) {
throw new InvalidVariableException();
+ }
+
+ openFile();
+
+ log.info("Variable name: "+ myName);
}
1.36 +32 -3 jakarta-jmeter/xdocs/usermanual/component_reference.xml
Index: component_reference.xml
===================================================================
RCS file: /home/cvs/jakarta-jmeter/xdocs/usermanual/component_reference.xml,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- component_reference.xml 4 Jun 2003 14:31:45 -0000 1.35
+++ component_reference.xml 5 Jun 2003 00:24:22 -0000 1.36
@@ -2,7 +2,7 @@
<document index="yes">
<properties>
- <title>User's Manual: Samplers</title>
+ <title>User's Manual: Component Reference</title>
</properties>
<body>
@@ -1232,8 +1232,8 @@
</description>
</component>
-<component index="13.9.4" name="__sumInt">
-<description><p>The sumInt function can be used to compute the sum of two or more integer values.
+<component index="13.9.4" name="__intsum">
+<description><p>The intsum function can be used to compute the sum of two or more integer values.
</p></description>
<properties>
@@ -1245,6 +1245,35 @@
</properties>
</component>
+<component index="13.9.5" name="_StringFromFile">
+<description>
+ <p>
+ The StringFromFile function can be used to read strings from a text file.
+ This is useful for running tests that require lots of variable data.
+ For example when testing a banking application, 100s or 1000s of different account numbers might be required.
+ </p>
+ <p>
+ Each time it is called it reads the next line from the file.
+ When the end of the file is reached, it will start reading again from the beginning.
+ If there are multiple references to the function in a test script, each will open the file independently,
+ even if the file names are the same.
+ [If the value is to be used again elsewhere, use different variable names for each function call.]
+ </p>
+ <p>If an error occurs opening or reading the file, then the function returns the string "**ERR**"</p>
+</description>
+
+<properties>
+ <property name="First argument" required="Yes">Path to the file name.
+ (The path can be relative to the JMeter launch directory)
+ </property>
+ <property name="Second argument" required="No">
+ A reference name - refName - for reusing the value created by this function.
+ Stored values are of the form ${refName}.
+ </property>
+</properties>
+<p>The file name parameter is resolved when the file is opened or re-opened.</p>
+<p>The reference name parameter (if supplied) is resolved every time the function is executed.</p>
+</component>
</section>
</body>
</document>
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org