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/17 01:52:14 UTC
cvs commit: jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/sampler BSFSampler.java
sebb 2003/11/16 16:52:14
Added: src/protocol/java/org/apache/jmeter/protocol/java/control/gui
BSFSamplerGui.java
src/protocol/java/org/apache/jmeter/protocol/java/sampler
BSFSampler.java
Log:
Alpha version of BSF sampler
Revision Changes Path
1.1 jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/control/gui/BSFSamplerGui.java
Index: BSFSamplerGui.java
===================================================================
package org.apache.jmeter.protocol.java.control.gui;
import java.awt.BorderLayout;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import org.apache.jmeter.protocol.java.sampler.BSFSampler;
import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
/**
* @author sebb AT apache DOT org
* @version $Revision: 1.1 $ $Date: 2003/11/17 00:52:14 $
*/
public class BSFSamplerGui extends AbstractSamplerGui
{
private JTextArea scriptField;
private JTextField langField;// Language TODO should this be a drop-down list?
private JTextField filename;// script file name (if present)
private JTextField parameters;// parameters to pass to script file (or script)
public BSFSamplerGui()
{
init();
}
public void configure(TestElement element)
{
super.configure(element);
scriptField.setText(element.getProperty(BSFSampler.SCRIPT).toString());
langField.setText(element.getProperty(BSFSampler.LANGUAGE).toString());
}
public TestElement createTestElement()
{
BSFSampler sampler = new BSFSampler();
modifyTestElement(sampler);
return sampler;
}
/**
* 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)
{
te.clear();
this.configureTestElement(te);
te.setProperty(BSFSampler.FILENAME,filename.getText());
te.setProperty(BSFSampler.LANGUAGE,langField.getText());
te.setProperty(BSFSampler.PARAMETERS,parameters.getText());
te.setProperty(BSFSampler.SCRIPT, scriptField.getText());
}
public String getStaticLabel()
{
return JMeterUtils.getResString("bsf_sampler_title") + " (ALPHA CODE)";
}
private void init()
{
setLayout(new BorderLayout(0, 5));
setBorder(makeBorder());
Box box = Box.createVerticalBox();
box.add(makeTitlePanel());
box.add(createLanguagePanel());
box.add(createFilenamePanel());
box.add(createParameterPanel());
add(box,BorderLayout.NORTH);
JPanel panel = createScriptPanel();
add(panel, BorderLayout.CENTER);
// Don't let the input field shrink too much
add(
Box.createVerticalStrut(panel.getPreferredSize().height),
BorderLayout.WEST);
}
private JPanel createParameterPanel()
{
JLabel label = new JLabel(JMeterUtils.getResString("bsf_script_parameters"));
parameters = new JTextField(10);
parameters.setName(BSFSampler.PARAMETERS);
label.setLabelFor(parameters);
JPanel parameterPanel = new JPanel(new BorderLayout(5,0));
parameterPanel.add(label,BorderLayout.WEST);
parameterPanel.add(parameters, BorderLayout.CENTER);
return parameterPanel;
}
private JPanel createFilenamePanel()//TODO ought to be a FileChooser ...
{
JLabel label = new JLabel(JMeterUtils.getResString("bsf_script_file"));
filename = new JTextField(10);
filename.setName(BSFSampler.FILENAME);
label.setLabelFor(filename);
JPanel filenamePanel = new JPanel(new BorderLayout(5, 0));
filenamePanel.add(label, BorderLayout.WEST);
filenamePanel.add(filename, BorderLayout.CENTER);
return filenamePanel;
}
private JPanel createLanguagePanel()
{
JLabel label = new JLabel(JMeterUtils.getResString("bsf_script_language"));
langField = new JTextField(10);
langField.setName(BSFSampler.LANGUAGE);
label.setLabelFor(langField);
JPanel langPanel = new JPanel(new BorderLayout(5,0));
langPanel.add(label,BorderLayout.WEST);
langPanel.add(langField, BorderLayout.CENTER);
return langPanel;
}
private JPanel createScriptPanel()
{
scriptField = new JTextArea();
scriptField.setRows(4);
scriptField.setLineWrap(true);
scriptField.setWrapStyleWord(true);
JLabel label = new JLabel(JMeterUtils.getResString("bsf_script"));
label.setLabelFor(scriptField);
JPanel panel = new JPanel(new BorderLayout());
panel.add(label, BorderLayout.NORTH);
panel.add(new JScrollPane(scriptField), BorderLayout.CENTER);
return panel;
}
}
1.1 jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/sampler/BSFSampler.java
Index: BSFSampler.java
===================================================================
package org.apache.jmeter.protocol.java.sampler;
import org.apache.bsf.*;
import org.apache.jmeter.samplers.AbstractSampler;
import org.apache.jmeter.samplers.Entry;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
/**
* A sampler which understands BSF
*
* @author sebb AT apache DOT org
* @version $Revision: 1.1 $ Updated on: $Date: 2003/11/17 00:52:14 $
*/
public class BSFSampler extends AbstractSampler
{
protected static Logger log = LoggingManager.getLoggerForClass();
public static final String FILENAME = "BSFSampler.filename"; //$NON-NLS-1$
public static final String SCRIPT = "BSFSampler.query"; //$NON-NLS-1$
public static final String LANGUAGE = "BSFSampler.language"; //$NON-NLS-1$
public static final String PARAMETERS = "BSFSampler.parameters"; //$NON-NLS-1$
private BSFManager mgr;
private BSFEngine bsfEngine;
public BSFSampler()
{
try {
// register beanshell with the BSF framework
BSFManager.registerScriptingEngine("beanshell",
"bsh.util.BeanShellBSFEngine", new String [] { "bsh"} );
} catch (NoClassDefFoundError e){
}
//TODO: register other scripting languages ...
}
public String getFilename()
{
return getPropertyAsString(FILENAME);
}
public void setFilename(String newFilename)
{
this.setProperty(FILENAME, newFilename);
}
public String getScript()
{
return this.getPropertyAsString(SCRIPT);
}
public void setScript(String newScript)
{
this.setProperty(SCRIPT, newScript);
}
public String getParameters()
{
return this.getPropertyAsString(PARAMETERS);
}
public void setParameters(String newScript)
{
this.setProperty(PARAMETERS, newScript);
}
public String getScriptLanguage()
{
return this.getPropertyAsString(LANGUAGE);
}
public void setScriptLanguage(String lang)
{
this.setProperty(LANGUAGE,lang);
}
/**
* Returns a formatted string label describing this sampler
*
* @return a formatted string label describing this sampler
*/
public String getLabel()
{
return getName();
}
public SampleResult sample(Entry e)// Entry tends to be ignored ...
{
log.info(getLabel()+" "+getFilename());
SampleResult res = new SampleResult();
boolean isSuccessful = false;
res.setSampleLabel(getLabel());
long start = System.currentTimeMillis();
try
{
String request=getScript();
res.setSamplerData(request);
mgr.registerBean("Label",getLabel());
mgr.registerBean("Name",getFilename());
bsfEngine = mgr.loadScriptingEngine(getScriptLanguage());
Object bsfOut = bsfEngine.eval("Sampler",0,0,request);
res.setResponseData(bsfOut.toString().getBytes());
res.setDataType(SampleResult.TEXT);
res.setResponseCode("200");//TODO set from script
res.setResponseMessage("OK");//TODO set from script
isSuccessful = true;//TODO set from script
}
catch (NoClassDefFoundError ex)
{
log.warn("",ex);
res.setResponseCode("500");
res.setResponseMessage(ex.toString());
}
catch (Exception ex)
{
log.warn("",ex);
res.setResponseCode("500");
res.setResponseMessage(ex.toString());
}
// Calculate response time
long end = System.currentTimeMillis();
res.setTime(end - start);
// Set if we were successful or not
res.setSuccessful(isSuccessful);
return res;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org