// 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= NetMeterUtils.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 initializeProperties(CLArgsParser parser) //{ // if (parser.GetArgumentById(PROPFILE_OPT) != null) // { // NetMeterUtils.loadJMeterProperties(parser.GetArgumentById(PROPFILE_OPT).GetArgument()); // } // else // { // NetMeterUtils.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(); // jmlogfile = processLAST(jmlogfile, ".log");// $NON-NLS-1$ // NetMeterUtils.setProperty(LoggingManager.LOG_FILE,jmlogfile); // } // NetMeterUtils.initLogging(); // // Bug 33845 - allow direct override of Home dir // if (parser.GetArgumentById(JMETER_HOME_OPT) == null) { // NetMeterUtils.setJMeterHome(NewDriver.getJMeterDir()); // } else { // NetMeterUtils.setJMeterHome(parser.GetArgumentById(JMETER_HOME_OPT).GetArgument()); // } // Properties jmeterProps = NetMeterUtils.getJMeterProperties(); // remoteProps = new Properties(); // // Add local JMeter properties, if the file is found // String userProp = NetMeterUtils.getPropDefault("user.properties",""); //$NON-NLS-1$ // if (userProp.length() > 0){ //$NON-NLS-1$ // FileInputStream fis=null; // try { // File file = NetMeterUtils.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 = NetMeterUtils.getPropDefault("system.properties",""); //$NON-NLS-1$ // if (sysProp.length() > 0) // { // FileInputStream fis=null; // try // { // File file = NetMeterUtils.findFile(sysProp); // if (file()) // { // 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<CLOption> clOptions = parser.GetArguments(); // int size = clOptions.Count; // for (int i = 0; i < size; i++) // { // CLOption option = clOptions[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); // } else { // File propFile = new File(name); // if (propFile.canRead()) { // log.Info("Setting Global properties from the file " + name); // try // { // fis = new FileInputStream(propFile); // remoteProps.load(fis); // } // catch (FileNotFoundException e) // { // log.Warn("Could not find properties file: "+e.Message); // } // catch (IOException e) // { // log.Warn("Could not load properties file: " + e.Message); // } // finally // { // JOrphanUtils.closeQuietly(fis); // } // } // } // 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; // default: // // ignored // break; // } // } // String sample_variables = (String) jmeterProps.get(SampleEvent.SAMPLE_VARIABLES); // if (sample_variables != null){ // remoteProps.put(SampleEvent.SAMPLE_VARIABLES, sample_variables); // } // jmeterProps.put("jmeter.version", NetMeterUtils.getJMeterVersion()); //} /* * Checks for LAST or LASTsuffix. * Returns the LAST name with .JMX replaced by suffix. */ //private String processLAST(String jmlogfile, String suffix) //{ // if (USE_LAST_JMX.Equals(jmlogfile) || USE_LAST_JMX.concat(suffix).equals(jmlogfile)){ // String last = LoadRecentProject.getRecentFile(0);// most recent // String JMX_SUFFIX = ".JMX"; // $NON-NLS-1$ // if (last.ToUpper().EndsWith(JMX_SUFFIX)) // { // jmlogfile = last.Substring(0, last.Length - JMX_SUFFIX.Length).concat(suffix); // } // } // return jmlogfile; //} private void StartTest(String testFile, String logFile, CLOption remoteStart) { // add a system property so samplers can check to see if JMeter // is running in NonGui mode //System.setProperty(JMETER_NON_GUI, "true");// $NON-NLS-1$ NetMeterServer driver = new NetMeterServer();// TODO - why does it create a new instance? driver.remoteProps = this.remoteProps; driver.remoteStop = this.remoteStop; driver.parent = this; String remote_hosts_string = null; if (remoteStart != null) { remote_hosts_string = remoteStart.GetArgument(); if (remote_hosts_string == null) { remote_hosts_string = "127.0.0.1"; } } if (testFile == null) { throw new Exception("Non-GUI runs require a test plan"); } driver.RunTest(testFile, logFile, remoteStart != null, remote_hosts_string); }
/** * Takes the command line arguments and uses them to determine how to * startup JMeter. * * Called reflectively by {@link NewDriver#main(String[])} */ public void Start(String[] args) { CLArgsParser parser = new CLArgsParser(args, options); String error = parser.GetErrorString(); if (null != error) { System.Console.WriteLine("Error: " + error); System.Console.WriteLine("Usage"); System.Console.WriteLine(CLUtil.DescribeOptions(options).ToString()); return; } try { //initializeProperties(parser); // Also initialises JMeter logging ///* // * The following is needed for HTTPClient. // * (originally tried doing this in HTTPSampler2, // * but it appears that it was done too late when running in GUI mode) // * Set the commons logging default to Avalon Logkit, if not already defined // */ //if (System.getProperty("org.apache.commons.logging.Log") == null) //{ // $NON-NLS-1$ // System.setProperty("org.apache.commons.logging.Log" // $NON-NLS-1$ // , "org.apache.commons.logging.impl.LogKitLogger"); // $NON-NLS-1$ //} //logProperty("java.version"); //$NON-NLS-1$ //logProperty("java.vm.name"); //$NON-NLS-1$ //logProperty("os.name"); //$NON-NLS-1$ //logProperty("os.arch"); //$NON-NLS-1$ //logProperty("os.version"); //$NON-NLS-1$ //logProperty("file.encoding"); // $NON-NLS-1$ //log.Info("NetMeterHome=" + NetMeterUtils.getJMeterHome()); //logProperty("user.dir"," ="); //$NON-NLS-1$ //log.Info("PWD =" + new File(".").getCanonicalPath());//$NON-NLS-1$ //log.Info("IP: "+NetMeterUtils.getLocalHostIP() // +" Name: "+NetMeterUtils.getLocalHostName() // +" FullName: "+NetMeterUtils.getLocalHostFullName()); //updateClassLoader(); //if (log.IsDebugEnabled) //{ // String jcp = System.getProperty("java.class.path");// $NON-NLS-1$ // String[] bits = jcp.Split(File.pathSeparator); // log.Debug("ClassPath"); // foreach(String bit in bits) // { // log.Debug(bit); // } // log.Debug(jcp); //} // Set some (hopefully!) useful properties Int64 now = DateTime.Now.Ticks; NetMeterUtils.setProperty("START.MS", now.ToString()); // $NON-NLS-1$ DateTime today = DateTime.Now; // so it agrees with above // TODO perhaps should share code with __time() function for this... //NetMeterUtils.setProperty("START.YMD",new SimpleDateFormat("yyyyMMdd").format(today));// $NON-NLS-1$ $NON-NLS-2$ //NetMeterUtils.setProperty("START.HMS",new SimpleDateFormat("HHmmss").format(today));// $NON-NLS-1$ $NON-NLS-2$ if (parser.GetArgumentById(SERVER_OPT) != null) { // Start the server try { ClientEngine.StartClient(); // $NON-NLS-1$ } catch (Exception ex) { System.Console.WriteLine("Server failed to start: " + ex); log.Error("Giving up, as server failed with:", ex); throw ex; } //startOptionalServers(); } else { String testFile = null; CLOption testFileOpt = parser.GetArgumentById(TESTFILE_OPT); if (testFileOpt != null) { testFile = testFileOpt.GetArgument(); if (USE_LAST_JMX.Equals(testFile)) { testFile = LoadRecentProject.getRecentFile(0);// most recent } } CLOption rem = parser.GetArgumentById(REMOTE_OPT_PARAM); if (rem == null) { rem = parser.GetArgumentById(REMOTE_OPT); } CLOption jtl = parser.GetArgumentById(LOGFILE_OPT); String jtlFile = null; //if (jtl != null) //{ // jtlFile=processLAST(jtl.GetArgument(), ".jtl"); // $NON-NLS-1$ //} StartTest(testFile, jtlFile, rem); } } //catch (IllegalUserActionException e) //{ // System.Console.WriteLine(e); // System.Console.WriteLine("Incorrect Usage"); // System.Console.WriteLine(CLUtil.DescribeOptions(options).toString()); //} catch (Exception ex) { log.Fatal("An error occurred: ", ex); System.Console.WriteLine("An error occurred: " + ex.Message); return; } }