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