Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Targetted to Eclipse 3.1 and JMeter 2.1 trunk version. JMeter isn't designed to be edited from Eclipse IDE, so some work has to be done before we get wheels running.

Building JMeter from sources with Eclipse

It's useful to have JMeter Eclipse project in hand, since you need to do debugging and possible bug fixing of JMeter.

  1. Check out JMeter trunk from Subversion

...

  • Now Eclipse should build JMeter without errors (stop icons in source tree)

...


Setting up plug-in project

This project will build your custom components and launch JMeter so that it will find them.

  1. Set up your custom plug-in project
    • Create a new Java project
    • Add jmeter-trunk to project dependencies
    • Create bin/ and src/ folders
    • Create jmeter.properties in the bin/
      • This defines where JMeter internal class loader looks for classes
      • It should look like this
No Format
# JMeter uses case sensitive string matching to test these paths against class path.
# This is very bad since paths must be *exactly* here as they appear in Java classpath.
# Hopefully this will be fixed in the future versions. Note Windows needs to escape \ character as \\.

# Add JMeter output folder and our plug-in output folder to paths from which 
# plug-ins are searched
search_paths=C:\\xxx\\jmeter-trunk\\bin;.
			 .

...

No Format
log4j.rootLogger=debug, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

42. Setting up a JMeter launcher

  • Set working directory to bin/ in your project
    • JMeter is hard coded to look up jmeter.properties in the launch folder
    • E.g. ${workspace_loc:SIPPerformanceStresser/bin}
  • Copy lib/ from jmeter-trunk to your plug-in project root
    • JMeter is hard coded to look up jars from ../lib
  • Main class: org.apache.jmeter.NewDriver

Creating components

JMeter 2.x uses its internal TestBean-framework for adding new components.

For each component you need

  1. Wiki Markup
    An element class which interits from \[TestElement, ConfigurationElement, XXXElement\] and implements [TestBean] interface. [TestBean] interface marks classes which JMeter plug-in class loader loads automatically.

2. Each TestBean class needs BeanInfoSupport class whichs describes the properties of the element class 3. Properties file which gives out user interface strings for properties

Example:

  • Here are some examples with some dummy non-working implemenation details
  • fi.xxx.jmeter.sip.core.SIPReceiver implements TestBean extends AbstractSampler
No Format

package fi.xxx.jmeter.sip.core;

import org.apache.jmeter.samplers.AbstractSampler;
import org.apache.jmeter.samplers.Entry;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testbeans.TestBean;

public class SIPReceiver extends AbstractSampler implements TestBean {

	public SampleResult sample(Entry e) {
		return null;
	}

}

No Format


package fi.xxx.jmeter.sip.core;

import java.beans.PropertyDescriptor;

import org.apache.jmeter.config.CSVDataSet;
import org.apache.jmeter.testbeans.BeanInfoSupport;

public class SIPReceiverBeanInfoSupport extends BeanInfoSupport {
	
	public SIPReceiverBeanInfoSupport() {
		super(SIPReceiver.class);
		
		createPropertyGroup("sip_receiver", new String[] { "filename", "variableNames", "delimiter" });
		PropertyDescriptor p = property("filename");
		p.setValue(NOT_UNDEFINED, Boolean.TRUE);
		p.setValue(DEFAULT, "");
		p.setValue(NOT_EXPRESSION, Boolean.TRUE);
		p = property("variableNames");
		p.setValue(NOT_UNDEFINED, Boolean.TRUE);
		p.setValue(DEFAULT, "");
		p.setValue(NOT_EXPRESSION, Boolean.TRUE);
		p = property("delimiter");
		p.setValue(NOT_UNDEFINED, Boolean.TRUE);
		p.setValue(DEFAULT, ",");
		p.setValue(NOT_EXPRESSION, Boolean.TRUE);
	}
}


  • fi/xxx/jmeter/sip/core/SIPreceiver.properties
No Format


displayName=SIP Receiver
sip_receiver.displayName=Configure SIP receiver
filename.displayName=Filename
filename.shortDescription=Name of the file (within your supporting file directory) that holds cvs data
variableNames.displayName=Variable Names (comma-delimited)
variableNames.shortDescription=List your variable names in order to match the order of columns in your csv data.  Separate by commas.
delimiter.displayName=Delimiter (use '\\t' for tab)
delimiter.shortDescription=Enter the delimiter ('\\t' for tab)

Notes

Faulty jorphan logging launcher

...