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 se...@apache.org on 2003/11/20 18:59:14 UTC

cvs commit: jakarta-jmeter/src/core/org/apache/jmeter/reporters ResultSaver.java

sebb        2003/11/20 09:59:14

  Added:       src/core/org/apache/jmeter/reporters/gui ResultSaverGui.java
               src/core/org/apache/jmeter/reporters ResultSaver.java
  Log:
  Result Saver PostProcessor saves results to individual files
  
  Revision  Changes    Path
  1.1                  jakarta-jmeter/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java
  
  Index: ResultSaverGui.java
  ===================================================================
  package org.apache.jmeter.reporters.gui;
  
  import java.awt.BorderLayout;
  
  import javax.swing.Box;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JTextField;
  
  import org.apache.jmeter.reporters.ResultSaver;
  import org.apache.jmeter.processor.gui.AbstractPostProcessorGui;
  import org.apache.jmeter.testelement.TestElement;
  import org.apache.jmeter.util.JMeterUtils;
  
  /**
   * Create a ResultSaver test element, which saves the sample information
   * in set of files
   * 
   * @author sebb AT apache DOT org
   * @version $Revision: 1.1 $ Last updated: $date$
   */
  public class ResultSaverGui extends AbstractPostProcessorGui
  {
     
      private JTextField filename;
  
  	public ResultSaverGui()
      {
          super();
          init();
      }
  
      /**
       * @see org.apache.jmeter.gui.JMeterGUIComponent#getStaticLabel()
       */
      public String getStaticLabel()
      {
          return JMeterUtils.getResString("resultsaver_title");
      }
      
      public void configure(TestElement el)
      {
          super.configure(el);
          filename.setText(el.getPropertyAsString(ResultSaver.FILENAME));
      }
  
      /**
       * @see org.apache.jmeter.gui.JMeterGUIComponent#createTestElement()
       */
      public TestElement createTestElement()
      {
          ResultSaver ResultSaver = new ResultSaver();
          modifyTestElement(ResultSaver);
          return ResultSaver;
      }
  
      /**
       * Modifies a given TestElement to mirror the data in the gui components.
       * @see org.apache.jmeter.gui.JMeterGUIComponent#modifyTestElement(TestElement)
       */
      public void modifyTestElement(TestElement te)
      {
          super.configureTestElement(te);
  		te.setProperty(ResultSaver.FILENAME, filename.getText());
      }
      
      private void init()
      {
          setLayout(new BorderLayout());
          setBorder(makeBorder());
  		Box box = Box.createVerticalBox();
  		box.add(makeTitlePanel());
  		box.add(createFilenamePanel());
  		add(box,BorderLayout.NORTH);
          
  //        add(makeTitlePanel(),BorderLayout.NORTH);
      }
  	private JPanel createFilenamePanel()//TODO ought to be a FileChooser ...
  	{
  		JLabel label = new JLabel(JMeterUtils.getResString("resultsaver_prefix"));
  		
  		filename = new JTextField(10);
  		filename.setName(ResultSaver.FILENAME);
  		label.setLabelFor(filename);
  
  		JPanel filenamePanel = new JPanel(new BorderLayout(5, 0));
  		filenamePanel.add(label, BorderLayout.WEST);
  		filenamePanel.add(filename, BorderLayout.CENTER);
  		return filenamePanel;
  	}
  
  }
  
  
  
  1.1                  jakarta-jmeter/src/core/org/apache/jmeter/reporters/ResultSaver.java
  
  Index: ResultSaver.java
  ===================================================================
  package org.apache.jmeter.reporters;
  
  import java.io.File;
  import java.io.FileNotFoundException;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.Serializable;
  
  import org.apache.jmeter.samplers.Clearable;
  import org.apache.jmeter.samplers.SampleEvent;
  import org.apache.jmeter.samplers.SampleListener;
  import org.apache.jmeter.samplers.SampleResult;
  import org.apache.jmeter.testelement.AbstractTestElement;
  import org.apache.jorphan.logging.LoggingManager;
  import org.apache.log.Logger;
  
  /**
   * Save Result responseData to a set of files
   * TODO - perhaps save other items such as headers?
   * 
   * This is mainly intended for validation tests
   * 
   * @author sebb AT apache DOT org
   * @version $Revision: 1.1 $ Last updated: $Date: 2003/11/20 17:59:14 $
   */
  public class ResultSaver
      extends AbstractTestElement
      implements Serializable,
      SampleListener,
      Clearable
  {
  	private static final Logger log = LoggingManager.getLoggerForClass();
      
      // File name sequence number 
      private static long sequenceNumber = 0;    
      
  	public static final String FILENAME = "FileSaver.filename";
  
      private static synchronized long nextNumber(){
      	return ++sequenceNumber;
      }
      /*
       * Constructor is initially called once for each occurrence in the test plan
       * For GUI, several more instances are created
       * Then clear is called at start of test
       * Called several times during test startup
       * The name will not necessarily have been set at this point.
       */
  	public ResultSaver(){
  		super();
  		//log.debug(Thread.currentThread().getName());
  		//System.out.println(">> "+me+"        "+this.getName()+" "+Thread.currentThread().getName());		
  	}
  
      /*
       * Constructor for use during startup
       * (intended for non-GUI use)
       * @param name of summariser
       */
      public ResultSaver(String name){
      	this();
      	setName(name);
      }
      
      /*
       * This is called once for each occurrence in the test plan, before the start of the test.
       * The super.clear() method clears the name (and all other properties),
       * so it is called last.
       */
  	public void clear()
  	{
  		//System.out.println("-- "+me+this.getName()+" "+Thread.currentThread().getName());
  		super.clear();
  		sequenceNumber=0; //TODO is this the right thing to do?
  	}
  	
  	/**
  	 * Contains the items needed to collect stats for a summariser
  	 * 
  	 * @author sebb AT apache DOT org
  	 * @version $revision$ Last updated: $date$
  	 */
  	private static class Totals{
  
  	}
  	
  	/**
  	 * Accumulates the sample in two SampleResult objects
  	 * - one for running totals, and the other for deltas
  	 * 
  	 * @see org.apache.jmeter.samplers.SampleListener#sampleOccurred(org.apache.jmeter.samplers.SampleEvent)
  	 */
  	public void sampleOccurred(SampleEvent e) {
  		SampleResult s = e.getResult();
  		saveSample(s);
  		SampleResult []sr = s.getSubResults();
  		if (sr != null){
  			for (int i = 0; i < sr.length; i++){
  				saveSample(sr[i]);
  			}
  
  		}
      }
  
  	/**
  	 * @param s SampleResult to save
  	 */
  	private void saveSample(SampleResult s) {
  		nextNumber();
  		String fileName=makeFileName(s.getContentType());
  		log.debug("Saving "+s.getSampleLabel()+" in "+fileName);
  		//System.out.println(fileName);
  		File out = new File(fileName);
  		FileOutputStream pw=null;
  		try {
  			pw = new FileOutputStream(out);
  			pw.write(s.getResponseData());
  			pw.close();
  		} catch (FileNotFoundException e1) {
  			log.error("Error creating sample file for "+s.getSampleLabel(),e1);
  		} catch (IOException e1) {
  			log.error("Error saving sample "+s.getSampleLabel(),e1);
  		}
  	}
  	/**
  	 * @return fileName composed of fixed prefix, a number,
  	 * and a suffix derived from the contentType
  	 */
  	private String makeFileName(String contentType) {
  		String suffix;
  		int i = contentType.indexOf("/");
  		if (i == -1){
  			suffix="unknown";
  		} else {
  			suffix=contentType.substring(i+1);
  		}
  		return getFilename()+sequenceNumber+"."+suffix;
  	}
  	/* (non-Javadoc)
  	 * @see org.apache.jmeter.samplers.SampleListener#sampleStarted(org.apache.jmeter.samplers.SampleEvent)
  	 */
  	public void sampleStarted(SampleEvent e) 
  	{
  		// not used
  	}
  
  	/* (non-Javadoc)
  	 * @see org.apache.jmeter.samplers.SampleListener#sampleStopped(org.apache.jmeter.samplers.SampleEvent)
  	 */
  	public void sampleStopped(SampleEvent e)
  	{
  		// not used
  	}
  	private String getFilename()
  	{
  		return getPropertyAsString(FILENAME);
  	}
  }
  
  
  

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