/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.jmeter.protocol.java.sampler; import org.apache.jmeter.config.Arguments; import org.apache.jmeter.samplers.SampleResult; /** * This interface defines the interactions between the JavaSampler and external * Java programs which can be executed by JMeter. Any Java class which wants to * be executed as a JMeter test must implement this interface (either directly * or indirectly through AbstractJavaSamplerClient). * <p> * JMeter will create one instance of a JavaSamplerClient implementation for * each user/thread in the test. Additional instances may be created for * internal use by JMeter (for example, to find out what parameters are * supported by the client). * <p> * When the test is started, setupTest() will be called on each thread's * JavaSamplerClient instance to initialize the client. Then runTest() will be * called for each iteration of the test. Finally, teardownTest() will be called * to allow the client to do any necessary clean-up. * <p> * The JMeter JavaSampler GUI allows a list of parameters to be defined for the * test. These are passed to the various test methods through the * {@link JavaSamplerContext}. A list of default parameters can be defined * through the getDefaultParameters() method. These parameters and any default * values associated with them will be shown in the GUI. Users can add other * parameters as well. * <p> * When possible, Java tests should extend {@link AbstractJavaSamplerClient * AbstractJavaSamplerClient} rather than implementing JavaSamplerClient * directly. This should protect your tests from future changes to the * interface. While it may be necessary to make changes to the JavaSamplerClient * interface from time to time (therefore requiring changes to any * implementations of this interface), we intend to make this abstract class * provide reasonable default implementations of any new methods so that * subclasses do not necessarily need to be updated for new versions. * Implementing JavaSamplerClient directly will continue to be supported for * cases where extending this class is not possible (for example, when the * client class is already a subclass of some other class). * <p> * See {@link org.apache.jmeter.protocol.java.test.SleepTest} for an example of * how to implement this interface. * */ public interface JavaSamplerClient { /** * Do any initialization required by this client. It is generally * recommended to do any initialization such as getting parameter values in * the setupTest method rather than the runTest method in order to add as * little overhead as possible to the test. * * @param context * the context to run with. This provides access to * initialization parameters. */ void setupTest(JavaSamplerContext context); /** * Perform a single sample for each iteration. This method returns a * <code>SampleResult</code> object. <code>SampleResult</code> has many * fields which can be used. At a minimum, the test should use * <code>SampleResult.sampleStart</code> and * <code>SampleResult.sampleEnd</code>to set the time that the test * required to execute. It is also a good idea to set the sampleLabel and * the successful flag. * * @see org.apache.jmeter.samplers.SampleResult#sampleStart() * @see org.apache.jmeter.samplers.SampleResult#sampleEnd() * @see org.apache.jmeter.samplers.SampleResult#setSuccessful(boolean) * @see org.apache.jmeter.samplers.SampleResult#setSampleLabel(String) * * @param context * the context to run with. This provides access to * initialization parameters. * * @return a SampleResult giving the results of this sample. */ SampleResult runTest(JavaSamplerContext context); /** * Do any clean-up required by this test at the end of a test run. * * @param context * the context to run with. This provides access to * initialization parameters. */ void teardownTest(JavaSamplerContext context); /** * Provide a list of parameters which this test supports. Any parameter * names and associated values returned by this method will appear in the * GUI by default so the user doesn't have to remember the exact names. The * user can add other parameters which are not listed here. If this method * returns null then no parameters will be listed. If the value for some * parameter is null then that parameter will be listed in the GUI with an * empty value. * * @return a specification of the parameters used by this test which should * be listed in the GUI, or null if no parameters should be listed. */ Arguments getDefaultParameters(); }