Change order of additonal property loading to be before options

git-svn-id: https://svn.apache.org/repos/asf/jakarta/jmeter/branches/rel-2-1@410911 13f79535-47bb-0310-9956-ffa450edef68

Former-commit-id: 92873bf0a2
This commit is contained in:
Sebastian Bazley 2006-06-01 18:59:54 +00:00
parent 268da3ddb1
commit 8b29bdab6e
3 changed files with 74 additions and 42 deletions

View File

@ -24,7 +24,6 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.net.Authenticator; import java.net.Authenticator;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Enumeration; import java.util.Enumeration;
@ -138,11 +137,8 @@ public class JMeter implements JMeterPlugin {
new CLOptionDescriptor("propfile", CLOptionDescriptor.ARGUMENT_REQUIRED, PROPFILE_OPT, new CLOptionDescriptor("propfile", CLOptionDescriptor.ARGUMENT_REQUIRED, PROPFILE_OPT,
"the jmeter property file to use"), "the jmeter property file to use"),
new CLOptionDescriptor("addprop", CLOptionDescriptor.ARGUMENT_REQUIRED new CLOptionDescriptor("addprop", CLOptionDescriptor.ARGUMENT_REQUIRED
| CLOptionDescriptor.DUPLICATES_ALLOWED, // Bug 33920 - | CLOptionDescriptor.DUPLICATES_ALLOWED, PROPFILE2_OPT,
// allow "additional JMeter property file(s)"),
// multiple
// props
PROPFILE2_OPT, "additional property file(s)"),
new CLOptionDescriptor("testfile", CLOptionDescriptor.ARGUMENT_REQUIRED, TESTFILE_OPT, new CLOptionDescriptor("testfile", CLOptionDescriptor.ARGUMENT_REQUIRED, TESTFILE_OPT,
"the jmeter test(.jmx) file to run"), "the jmeter test(.jmx) file to run"),
new CLOptionDescriptor("logfile", CLOptionDescriptor.ARGUMENT_REQUIRED, LOGFILE_OPT, new CLOptionDescriptor("logfile", CLOptionDescriptor.ARGUMENT_REQUIRED, LOGFILE_OPT,
@ -167,8 +163,9 @@ public class JMeter implements JMeterPlugin {
new CLOptionDescriptor("systemproperty", CLOptionDescriptor.DUPLICATES_ALLOWED new CLOptionDescriptor("systemproperty", CLOptionDescriptor.DUPLICATES_ALLOWED
| CLOptionDescriptor.ARGUMENTS_REQUIRED_2, SYSTEM_PROPERTY, | CLOptionDescriptor.ARGUMENTS_REQUIRED_2, SYSTEM_PROPERTY,
"Define additional system properties"), "Define additional system properties"),
new CLOptionDescriptor("systemPropertyFile", CLOptionDescriptor.ARGUMENT_REQUIRED, SYSTEM_PROPFILE, new CLOptionDescriptor("systemPropertyFile", CLOptionDescriptor.DUPLICATES_ALLOWED
"Define system properties from a file"), | CLOptionDescriptor.ARGUMENT_REQUIRED, SYSTEM_PROPFILE,
"additional system property file(s)"),
new CLOptionDescriptor("loglevel", CLOptionDescriptor.DUPLICATES_ALLOWED new CLOptionDescriptor("loglevel", CLOptionDescriptor.DUPLICATES_ALLOWED
| CLOptionDescriptor.ARGUMENTS_REQUIRED_2, LOGLEVEL, | CLOptionDescriptor.ARGUMENTS_REQUIRED_2, LOGLEVEL,
"[category=]level e.g. jorphan=INFO or jmeter.util=DEBUG"), "[category=]level e.g. jorphan=INFO or jmeter.util=DEBUG"),
@ -326,13 +323,12 @@ public class JMeter implements JMeterPlugin {
if (!f.canRead() && !f.isDirectory()) { if (!f.canRead() && !f.isDirectory()) {
log.warn("Can't read "+path); log.warn("Can't read "+path);
} else { } else {
URL url; log.info("Adding to classpath: "+path);
try { try {
url = new URL("file","",path);// $NON-NLS-1$ NewDriver.addPath(path);
NewDriver.addURL(url); } catch (MalformedURLException e) {
} catch (MalformedURLException e) { log.warn("Error adding: "+path+" "+e.getLocalizedMessage());
log.warn("Can't create URL for "+path+" "+e); }
}
} }
} }
} }
@ -408,9 +404,50 @@ public class JMeter implements JMeterPlugin {
JMeterUtils.setJMeterHome(parser.getArgumentById(JMETER_HOME_OPT).getArgument()); JMeterUtils.setJMeterHome(parser.getArgumentById(JMETER_HOME_OPT).getArgument());
} }
// Process command line property definitions (can occur multiple times)
Properties jmeterProps = JMeterUtils.getJMeterProperties(); Properties jmeterProps = JMeterUtils.getJMeterProperties();
// Add local JMeter properties, if the file is found
String userProp = JMeterUtils.getPropDefault("user.properties",""); //$NON-NLS-1$
if (userProp.length() > 0){ //$NON-NLS-1$
FileInputStream fis=null;
try {
File file = new File(userProp);
if (file.canRead()){
log.info("Loading user properties from: "+userProp);
fis = new FileInputStream(file);
Properties tmp = new Properties();
tmp.load(fis);
jmeterProps.putAll(tmp);
LoggingManager.setLoggingLevels(tmp);//Do what would be done earlier
}
} catch (IOException e) {
log.warn("Error loading user property file: " + userProp, e);
} finally {
JOrphanUtils.closeQuietly(fis);
}
}
// Add local system properties, if the file is found
String sysProp = JMeterUtils.getPropDefault("system.properties",""); //$NON-NLS-1$
if (sysProp.length() > 0){ //$NON-NLS-1$
FileInputStream fis=null;
try {
File file = new File(sysProp);
if (file.canRead()){
log.info("Loading system properties from: "+sysProp);
fis = new FileInputStream(file);
System.getProperties().load(fis);
}
} catch (IOException e) {
log.warn("Error loading system property file: " + sysProp, e);
} finally {
JOrphanUtils.closeQuietly(fis);
}
}
// Process command line property definitions
// These can potentially occur multiple times
List clOptions = parser.getArguments(); List clOptions = parser.getArguments();
int size = clOptions.size(); int size = clOptions.size();
@ -424,7 +461,10 @@ public class JMeter implements JMeterPlugin {
case PROPFILE2_OPT: // Bug 33920 - allow multiple props case PROPFILE2_OPT: // Bug 33920 - allow multiple props
try { try {
fis = new FileInputStream(new File(name)); fis = new FileInputStream(new File(name));
jmeterProps.load(fis); Properties tmp = new Properties();
tmp.load(fis);
jmeterProps.putAll(tmp);
LoggingManager.setLoggingLevels(tmp);//Do what would be done earlier
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
log.warn("Can't find additional property file: " + name, e); log.warn("Can't find additional property file: " + name, e);
} catch (IOException e) { } catch (IOException e) {
@ -473,25 +513,7 @@ public class JMeter implements JMeterPlugin {
break; break;
} }
} }
// Add local properties, if the file is found
if (JMeterUtils.getPropDefault("load.user_properties", true)){ //$NON-NLS-1$
final String name="user.properties"; //$NON-NLS-1$
FileInputStream fis=null;
try {
File file = new File(name);
if (file.canRead()){
log.info("Loading user properties from: "+name);
fis = new FileInputStream(file);
jmeterProps.load(fis);
}
} catch (IOException e) {
log.warn("Error loading user property file: " + name, e);
} finally {
JOrphanUtils.closeQuietly(fis);
}
}
} }
public void startServer() { public void startServer() {
@ -657,10 +679,10 @@ public class JMeter implements JMeterPlugin {
private static class ListenToTest implements TestListener, Runnable, Remoteable { private static class ListenToTest implements TestListener, Runnable, Remoteable {
int started = 0; int started = 0;
private JMeter _parent; //NOT YET USED private JMeter _parent;
private ListenToTest(JMeter parent) { private ListenToTest(JMeter parent) {
_parent = parent; //_parent = parent;
} }
public synchronized void testEnded(String host) { public synchronized void testEnded(String host) {

View File

@ -108,6 +108,7 @@ sample, and the file name can be included in the sample log file.
<li>Bug 39656 - always use SOAP action if it is provided</li> <li>Bug 39656 - always use SOAP action if it is provided</li>
<li>Automatically include properties from user.properties file</li> <li>Automatically include properties from user.properties file</li>
<li>Add __jexl() function - evaluates Commons JEXL expressions</li> <li>Add __jexl() function - evaluates Commons JEXL expressions</li>
<li>Optionally load JMeter properties from user.properties and system properties from system.properties.</li>
</ul> </ul>
<h4>Bug fixes:</h4> <h4>Bug fixes:</h4>

View File

@ -313,9 +313,10 @@ These are shown below.</p>
your own copy of the jmeter.properties and specify it in the command line. your own copy of the jmeter.properties and specify it in the command line.
</p> </p>
<note> <note>
Note: since 2.1.2, you can define additional properties in the file <b>user.properties</b>. Note: since 2.1.2, you can define additional JMeter properties in the file defined by the
This will be automatically loaded if it is found in the current directory. JMeter property <b>user.properties</b> which has the default value <b>user.properties</b>.
To change this behaviour, define the jmeter property <b>load.user_properties=false</b> The file will be automatically loaded if it is found in the current directory.
Similarly, <b>system.properties</b> is used to update system properties.
</note> </note>
<properties> <properties>
<property name="ssl.provider">You can specify the class for your SSL <property name="ssl.provider">You can specify the class for your SSL
@ -342,6 +343,14 @@ These are shown below.</p>
List of paths that JMeter will search for utility classes. List of paths that JMeter will search for utility classes.
This is in addition to any jars found in the lib directory. This is in addition to any jars found in the lib directory.
</property> </property>
<property name="user.properties">
Name of file containing additional JMeter properties.
These are added after the initial property file, but before the -q and -J options are processed.
</property>
<property name="system.properties">
Name of file containing additional system properties.
These are added before the -S and -D options are processed.
</property>
</properties> </properties>
<p><b> <p><b>
See also the comments in the jmeter.properties file for further information on other settings you can change. See also the comments in the jmeter.properties file for further information on other settings you can change.