jmeter.java
来自「测试工具」· Java 代码 · 共 958 行 · 第 1/3 页
JAVA
958 行
}
// Start the server
startServer(JMeterUtils.getPropDefault("server_port", 0));// $NON-NLS-1$
startOptionalServers();
} else if (parser.getArgumentById(NONGUI_OPT) == null) {
startGui(parser.getArgumentById(TESTFILE_OPT));
startOptionalServers();
} else {
CLOption rem=parser.getArgumentById(REMOTE_OPT_PARAM);
if (rem==null) rem=parser.getArgumentById(REMOTE_OPT);
startNonGui(parser.getArgumentById(TESTFILE_OPT),
parser.getArgumentById(LOGFILE_OPT),
rem);
startOptionalServers();
}
} catch (IllegalUserActionException e) {
System.out.println(e.getMessage());
System.out.println("Incorrect Usage");
System.out.println(CLUtil.describeOptions(options).toString());
} catch (Throwable e) {
if (log != null){
log.fatalError("An error occurred: ",e);
} else {
e.printStackTrace();
}
System.out.println("An error occurred: " + e.getMessage());
System.exit(1);
}
}
// Update classloader if necessary
private void updateClassLoader() {
updatePath("search_paths",";"); //$NON-NLS-1$//$NON-NLS-2$
updatePath("user.classpath",File.pathSeparator);//$NON-NLS-1$
}
private void updatePath(String property, String sep) {
String userpath= JMeterUtils.getPropDefault(property,"");// $NON-NLS-1$
if (userpath.length() <= 0) return;
log.info(property+"="+userpath); //$NON-NLS-1$
StringTokenizer tok = new StringTokenizer(userpath, sep);
while(tok.hasMoreTokens()) {
String path=tok.nextToken();
File f=new File(path);
if (!f.canRead() && !f.isDirectory()) {
log.warn("Can't read "+path);
} else {
log.info("Adding to classpath: "+path);
try {
NewDriver.addPath(path);
} catch (MalformedURLException e) {
log.warn("Error adding: "+path+" "+e.getLocalizedMessage());
}
}
}
}
/**
*
*/
private void startOptionalServers() {
int bshport = JMeterUtils.getPropDefault("beanshell.server.port", 0);// $NON-NLS-1$
String bshfile = JMeterUtils.getPropDefault("beanshell.server.file", "");// $NON-NLS-1$ $NON-NLS-2$
if (bshport > 0) {
log.info("Starting Beanshell server (" + bshport + "," + bshfile + ")");
Runnable t = new BeanShellServer(bshport, bshfile);
t.run();
}
// Should we run a beanshell script on startup?
String bshinit = JMeterUtils.getProperty("beanshell.init.file");// $NON-NLS-1$
if (bshinit != null){
log.info("Run Beanshell on file: "+bshinit);
try {
BeanShellInterpreter bsi = new BeanShellInterpreter();//bshinit,log);
bsi.source(bshinit);
} catch (ClassNotFoundException e) {
log.warn("Could not start Beanshell: "+e.getLocalizedMessage());
} catch (JMeterException e) {
log.warn("Could not process Beanshell file: "+e.getLocalizedMessage());
}
}
int mirrorPort=JMeterUtils.getPropDefault("mirror.server.port", 0);// $NON-NLS-1$
if (mirrorPort > 0){
log.info("Starting Mirror server (" + mirrorPort + ")");
try {
Object instance = ClassTools.construct(
"org.apache.jmeter.protocol.http.control.HttpMirrorControl",// $NON-NLS-1$
mirrorPort);
ClassTools.invoke(instance,"startHttpMirror");
} catch (JMeterException e) {
log.warn("Could not start Mirror server",e);
}
}
}
/**
* Sets a proxy server for the JVM if the command line arguments are
* specified.
*/
private void setProxy(CLArgsParser parser) throws IllegalUserActionException {
if (parser.getArgumentById(PROXY_USERNAME) != null) {
Properties jmeterProps = JMeterUtils.getJMeterProperties();
if (parser.getArgumentById(PROXY_PASSWORD) != null) {
String u, p;
Authenticator.setDefault(new ProxyAuthenticator(u = parser.getArgumentById(PROXY_USERNAME)
.getArgument(), p = parser.getArgumentById(PROXY_PASSWORD).getArgument()));
log.info("Set Proxy login: " + u + "/" + p);
jmeterProps.setProperty(HTTP_PROXY_USER, u);//for Httpclient
jmeterProps.setProperty(HTTP_PROXY_PASS, p);//for Httpclient
} else {
String u;
Authenticator.setDefault(new ProxyAuthenticator(u = parser.getArgumentById(PROXY_USERNAME)
.getArgument(), ""));
log.info("Set Proxy login: " + u);
jmeterProps.setProperty(HTTP_PROXY_USER, u);
}
}
if (parser.getArgumentById(PROXY_HOST) != null && parser.getArgumentById(PROXY_PORT) != null) {
String h = parser.getArgumentById(PROXY_HOST).getArgument();
String p = parser.getArgumentById(PROXY_PORT).getArgument();
System.setProperty("http.proxyHost", h );// $NON-NLS-1$
System.setProperty("https.proxyHost", h);// $NON-NLS-1$
System.setProperty("http.proxyPort", p);// $NON-NLS-1$
System.setProperty("https.proxyPort", p);// $NON-NLS-1$
log.info("Set http[s].proxyHost: " + h + " Port: " + p);
} else if (parser.getArgumentById(PROXY_HOST) != null || parser.getArgumentById(PROXY_PORT) != null) {
throw new IllegalUserActionException(JMeterUtils.getResString("proxy_cl_error"));// $NON-NLS-1$
}
if (parser.getArgumentById(NONPROXY_HOSTS) != null) {
String n = parser.getArgumentById(NONPROXY_HOSTS).getArgument();
System.setProperty("http.nonProxyHosts", n );// $NON-NLS-1$
System.setProperty("https.nonProxyHosts", n );// $NON-NLS-1$
log.info("Set http[s].nonProxyHosts: "+n);
}
}
private void initializeProperties(CLArgsParser parser) {
if (parser.getArgumentById(PROPFILE_OPT) != null) {
JMeterUtils.loadJMeterProperties(parser.getArgumentById(PROPFILE_OPT).getArgument());
} else {
JMeterUtils.loadJMeterProperties(NewDriver.getJMeterDir() + File.separator
+ "bin" + File.separator // $NON-NLS-1$
+ "jmeter.properties");// $NON-NLS-1$
}
if (parser.getArgumentById(JMLOGFILE_OPT) != null){
String jmlogfile=parser.getArgumentById(JMLOGFILE_OPT).getArgument();
JMeterUtils.setProperty(LoggingManager.LOG_FILE,jmlogfile);
}
JMeterUtils.initLogging();
JMeterUtils.initLocale();
// Bug 33845 - allow direct override of Home dir
if (parser.getArgumentById(JMETER_HOME_OPT) == null) {
JMeterUtils.setJMeterHome(NewDriver.getJMeterDir());
} else {
JMeterUtils.setJMeterHome(parser.getArgumentById(JMETER_HOME_OPT).getArgument());
}
Properties jmeterProps = JMeterUtils.getJMeterProperties();
remoteProps = new Properties();
// 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 = JMeterUtils.findFile(userProp);
if (file.canRead()){
log.info("Loading user properties from: "+file.getCanonicalPath());
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){
FileInputStream fis=null;
try {
File file = JMeterUtils.findFile(sysProp);
if (file.canRead()){
log.info("Loading system properties from: "+file.getCanonicalPath());
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();
int size = clOptions.size();
for (int i = 0; i < size; i++) {
CLOption option = (CLOption) clOptions.get(i);
String name = option.getArgument(0);
String value = option.getArgument(1);
FileInputStream fis = null;
switch (option.getDescriptor().getId()) {
// Should not have any text arguments
case CLOption.TEXT_ARGUMENT:
throw new IllegalArgumentException("Unknown arg: "+option.getArgument());
case PROPFILE2_OPT: // Bug 33920 - allow multiple props
try {
fis = new FileInputStream(new File(name));
Properties tmp = new Properties();
tmp.load(fis);
jmeterProps.putAll(tmp);
LoggingManager.setLoggingLevels(tmp);//Do what would be done earlier
} catch (FileNotFoundException e) {
log.warn("Can't find additional property file: " + name, e);
} catch (IOException e) {
log.warn("Error loading additional property file: " + name, e);
} finally {
JOrphanUtils.closeQuietly(fis);
}
break;
case SYSTEM_PROPFILE:
log.info("Setting System properties from file: " + name);
try {
fis = new FileInputStream(new File(name));
System.getProperties().load(fis);
} catch (IOException e) {
log.warn("Cannot find system property file "+e.getLocalizedMessage());
} finally {
JOrphanUtils.closeQuietly(fis);
}
break;
case SYSTEM_PROPERTY:
if (value.length() > 0) { // Set it
log.info("Setting System property: " + name + "=" + value);
System.getProperties().setProperty(name, value);
} else { // Reset it
log.warn("Removing System property: " + name);
System.getProperties().remove(name);
}
break;
case JMETER_PROPERTY:
if (value.length() > 0) { // Set it
log.info("Setting JMeter property: " + name + "=" + value);
jmeterProps.setProperty(name, value);
} else { // Reset it
log.warn("Removing JMeter property: " + name);
jmeterProps.remove(name);
}
break;
case JMETER_GLOBAL_PROP:
if (value.length() > 0) { // Set it
log.info("Setting Global property: " + name + "=" + value);
remoteProps.setProperty(name, value);
}
break;
case LOGLEVEL:
if (value.length() > 0) { // Set category
log.info("LogLevel: " + name + "=" + value);
LoggingManager.setPriority(value, name);
} else { // Set root level
log.warn("LogLevel: " + name);
LoggingManager.setPriority(name);
}
break;
case REMOTE_STOP:
remoteStop = true;
break;
}
}
}
private void startServer(int port) {
try {
new RemoteJMeterEngineImpl(port);
} catch (Exception ex) {
log.error("Giving up, as server failed with:", ex);
System.err.println("Server failed to start: "+ex);
System.exit(1);// Give up
}
}
private void startNonGui(CLOption testFile, CLOption logFile, CLOption remoteStart)
throws IllegalUserActionException {
// add a system property so samplers can check to see if JMeter
// is running in NonGui mode
System.setProperty("JMeter.NonGui", "true");// $NON-NLS-1$
// Force the X11 display to be checked
try {
new JLabel();
} catch (InternalError e){
// ignored
}
JMeter driver = new JMeter();// TODO - why does it create a new instance?
driver.remoteProps = this.remoteProps;
driver.remoteStop = this.remoteStop;
driver.parent = this;
PluginManager.install(this, false);
String remote_hosts_string = null;
if (remoteStart != null) {
remote_hosts_string = remoteStart.getArgument();
if (remote_hosts_string == null) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?