一绞惦,什么是jmeter Sampler
jmeterSampler
二,準備工作
需要一些java基礎及java開發(fā)環(huán)境(推薦IDEA)
三勋篓,實施階段
以jemeter自帶的示例ExampleSampler為范:
1.編寫Sampler
package org.apache.jmeter.examples.sampler;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.jmeter.samplers.AbstractSampler;
import org.apache.jmeter.samplers.Entry;
import org.apache.jmeter.samplers.SampleResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExampleSampler extends AbstractSampler {
//每個Sampler都是AbstractSampler 的子類
private static final long serialVersionUID = 240L;
private static final Logger log = LoggerFactory.getLogger(ExampleSampler.class);
//以常量方式定義需要輸入的參數(shù)
public static final String DATA = "ExampleSampler.data";
// keep track of classes created
private static AtomicInteger classCount = new AtomicInteger(0);
// 計數(shù)與日志跟蹤槐脏,可以忽略
public ExampleSampler() {
classCount.incrementAndGet();
trace("ExampleSampler()");
}
//Sampler的測試過程,測試結果設置
@Override
public SampleResult sample(Entry e) {
trace("sample()");
SampleResult res = new SampleResult();
boolean isOK = false; // Did sample succeed?
String data = getData(); // Sampler data
String response = null;
res.setSampleLabel(getTitle());
/*
* Perform the sampling
*/
res.sampleStart(); // Start timing
try {
// Do something here ...
response = Thread.currentThread().getName();
/*
* Set up the sample result details
*/
res.setSamplerData(data);
res.setResponseData(response, null);
res.setDataType(SampleResult.TEXT);
res.setResponseCodeOK();
res.setResponseMessage("OK");// $NON-NLS-1$
isOK = true;
} catch (Exception ex) {
log.debug("", ex);
res.setResponseCode("500");// $NON-NLS-1$
res.setResponseMessage(ex.toString());
}
res.sampleEnd(); // End timimg
res.setSuccessful(isOK);
return res;
}
//測試結果標題
private String getTitle() {
return this.getName();
}
//從JMeterProperty中獲取GUI中得到的參數(shù)值
public String getData() {
return getPropertyAsString(DATA);
}
//跟蹤日志甜刻,可以忽略
private void trace(String s) {
String tl = getTitle();
String tn = Thread.currentThread().getName();
String th = this.toString();
log.debug(tn + " (" + classCount.get() + ") " + tl + " " + s + " " + th);
}
}
2,編寫SamplerGUI
package org.apache.jmeter.examples.sampler.gui;
import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import org.apache.jmeter.examples.sampler.ExampleSampler;
import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
public class ExampleSamplerGui extends AbstractSamplerGui {
private static final long serialVersionUID = 240L;
//定義界面元素正勒,用于獲取參數(shù)輸入
private JTextArea data;
public ExampleSamplerGui() {
init();
}
//設置Sampler標題得院,但由于國際化,需要在core的message.propertis文件中定義章贞,所以getStaticLabel()方法直接設置標題
@Override
public String getLabelResource() {
return "example_title"; // $NON-NLS-1$
}
//從界面獲取參數(shù)
@Override
public void configure(TestElement element) {
data.setText(element.getPropertyAsString(ExampleSampler.DATA));
super.configure(element);
}
//調用ExampleSampler
@Override
public TestElement createTestElement() {
ExampleSampler sampler = new ExampleSampler();
modifyTestElement(sampler);
return sampler;
}
//將從頁面獲取到的參數(shù)值加入JMeterProperty中祥绞,供Sampler中獲取
@Override
public void modifyTestElement(TestElement te) {
te.clear();
configureTestElement(te);
te.setProperty(ExampleSampler.DATA, data.getText());
}
//設置GUI界面
private void init() {
// Standard setup
setLayout(new BorderLayout(0, 5));
setBorder(makeBorder());
add(makeTitlePanel(), BorderLayout.NORTH); // Add the standard title
// Specific setup
add(createDataPanel(), BorderLayout.CENTER);
}
//自定義的參數(shù)輸入單元
private Component createDataPanel() {
JLabel label = new JLabel(JMeterUtils.getResString("example_data")); //$NON-NLS-1$
data = new JTextArea();
data.setName(ExampleSampler.DATA);
label.setLabelFor(data);
JPanel dataPanel = new JPanel(new BorderLayout(5, 0));
dataPanel.add(label, BorderLayout.WEST);
dataPanel.add(data, BorderLayout.CENTER);
return dataPanel;
}
//設置參數(shù)的默認值
@Override
public void clearGui() {
super.clearGui();
data.setText(""); // $NON-NLS-1$
}
}