Apache JMeter

org.apache.jmeter.protocol.http.sampler
Class AccessLogSampler

java.lang.Object
  extended by org.apache.jmeter.testelement.AbstractTestElement
      extended by org.apache.jmeter.samplers.AbstractSampler
          extended by org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase
              extended by org.apache.jmeter.protocol.http.sampler.HTTPSampler
                  extended by org.apache.jmeter.protocol.http.sampler.AccessLogSampler
All Implemented Interfaces:
Serializable, Cloneable, ConfigMergabilityIndicator, Searchable, HTTPConstantsInterface, Interruptible, Sampler, TestBean, TestElement, TestIterationListener, TestStateListener, ThreadListener

public class AccessLogSampler
extends HTTPSampler
implements TestBean, ThreadListener

Description:

AccessLogSampler is responsible for a couple of things:

The intent of this sampler is it uses the generator and parser to create a HTTPSampler when it is needed. It does not contain logic about how to parse the logs. It also doesn't care how Generator is implemented, as long as it implements the interface. This means a person could simply implement a dummy parser to generate random parameters and the generator consumes the results. This wasn't the original intent of the sampler. I originaly wanted to write this sampler, so that I can take production logs to simulate production traffic in a test environment. Doing so is desirable to study odd or unusual behavior. It's also good to compare a new system against an existing system to get near apples- to-apples comparison. I've been asked if benchmarks are really fair comparisons just about every single time, so this helps me accomplish that task.

Some bugs only appear under production traffic, so it is useful to generate traffic using production logs. This way, JMeter can record when problems occur and provide a way to match the server logs.

Created on: Jun 26, 2003

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase
HTTPSamplerBase.SourceType
 
Field Summary
static String DEFAULT_CLASS
           
 
Fields inherited from class org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase
ARGUMENTS, AUTH_MANAGER, AUTO_REDIRECTS, BROWSER_COMPATIBLE_MULTIPART, BROWSER_COMPATIBLE_MULTIPART_MODE_DEFAULT, CACHE_MANAGER, CONCURRENT_DWN, CONCURRENT_POOL, CONCURRENT_POOL_SIZE, CONNECT_TIMEOUT, CONTENT_ENCODING, CONTENT_TYPE, COOKIE_MANAGER, DEFAULT_METHOD, DO_MULTIPART_POST, DOMAIN, EMBEDDED_URL_RE, FOLLOW_REDIRECTS, HEADER_MANAGER, IMAGE_PARSER, IMPLEMENTATION, IP_SOURCE, IP_SOURCE_TYPE, MAX_FRAME_DEPTH, MAX_REDIRECTS, METHOD, MONITOR, NON_HTTP_RESPONSE_CODE, NON_HTTP_RESPONSE_MESSAGE, PATH, PORT, POST_BODY_RAW, POST_BODY_RAW_DEFAULT, PROTOCOL, PROXYHOST, PROXYPASS, PROXYPORT, PROXYUSER, RESPONSE_TIMEOUT, UNSPECIFIED_PORT, UNSPECIFIED_PORT_AS_STRING, URL, URL_UNSPECIFIED_PORT, URL_UNSPECIFIED_PORT_AS_STRING, USE_KEEPALIVE
 
Fields inherited from interface org.apache.jmeter.protocol.http.util.HTTPConstantsInterface
APPLICATION_X_WWW_FORM_URLENCODED, CACHE_CONTROL, CONNECT, CONNECTION_CLOSE, DATE, DEFAULT_HTTP_PORT, DEFAULT_HTTP_PORT_STRING, DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_PORT_STRING, DELETE, ENCODING_GZIP, ETAG, EXPIRES, GET, HEAD, HEADER_AUTHORIZATION, HEADER_CONNECTION, HEADER_CONTENT_DISPOSITION, HEADER_CONTENT_ENCODING, HEADER_CONTENT_LENGTH, HEADER_CONTENT_TYPE, HEADER_COOKIE, HEADER_HOST, HEADER_LOCAL_ADDRESS, HEADER_LOCATION, HEADER_SET_COOKIE, HTTP_1_1, IF_MODIFIED_SINCE, IF_NONE_MATCH, KEEP_ALIVE, LAST_MODIFIED, MULTIPART_FORM_DATA, OPTIONS, PATCH, POST, PROTOCOL_HTTP, PROTOCOL_HTTPS, PUT, TRACE, TRANSFER_ENCODING
 
Fields inherited from interface org.apache.jmeter.testelement.TestElement
COMMENTS, ENABLED, GUI_CLASS, NAME, TEST_CLASS
 
Constructor Summary
AccessLogSampler()
           
 
Method Summary
 Object clone()
          
 String getDomain()
           
 String getFilterClassName()
           
 String getLogFile()
          Get the path where XML messages are stored. this is the directory where JMeter will randomly select a file.
 String getParserClassName()
          Get the file location of the xml file.
 String getPortString()
           
protected  void initFilter()
           
 void instantiateParser()
          Method will instantiate the log parser based on the class in the text field.
 boolean isImageParsing()
           
 SampleResult sample(Entry e)
          sample(Entry e) simply calls sample().
 SampleResult sampleWithParser()
          sample gets a new HTTPSampler from the generator and calls it's sample() method.
 void setDomain(String domain)
           
 void setFilterClassName(String filterClassName)
           
 void setImageParsing(boolean imageParsing)
           
 void setLogFile(String path)
          Set the path where XML messages are stored for random selection.
 void setParserClassName(String classname)
          it's kinda obvious, but we state it anyways.
 void setPortString(String port)
           
 void testEnded()
           Called once for all threads after the end of a test.
 void testStarted()
           Called just before the start of the test from the main engine thread.
 void threadFinished()
          Called for each thread after all samples have been processed.
 
Methods inherited from class org.apache.jmeter.protocol.http.sampler.HTTPSampler
interrupt, sample
 
Methods inherited from class org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase
addArgument, addArgument, addEncodedArgument, addEncodedArgument, addEncodedArgument, addNonEncodedArgument, addTestElement, applies, clearTestElementChildren, downloadPageResources, encodeBackSlashes, encodeSpaces, errorResult, followRedirects, getArguments, getAuthManager, getAutoRedirects, getCacheManager, getConcurrentPool, getConnectTimeout, getContentEncoding, getCookieManager, getDefaultPort, getDoBrowserCompatibleMultipart, getDoMultipartPost, getEmbeddedUrlRE, getFollowRedirects, getHeaderManager, getHTTPFileCount, getHTTPFiles, getImplementation, getIpSource, getIpSourceType, getMethod, getMonitor, getPath, getPort, getPortIfSpecified, getPostBodyRaw, getProtocol, getProxyHost, getProxyPass, getProxyPortInt, getProxyUser, getQueryString, getQueryString, getResponseTimeout, getSendFileAsPostBody, getSendParameterValuesAsPostBody, getSourceTypeList, getUrl, getUseKeepAlive, getUseMultipartForPost, getValidMethodsAsArray, hasArguments, isConcurrentDwn, isImageParser, isMonitor, isProtocolDefaultPort, isSecure, isSecure, isSuccessCode, parseArguments, parseArguments, readResponse, resultProcessing, sample, setArguments, setAuthManager, setAutoRedirects, setCacheManager, setConcurrentDwn, setConcurrentPool, setConnectTimeout, setContentEncoding, setCookieManager, setDoBrowserCompatibleMultipart, setDoMultipartPost, setEmbeddedUrlRE, setFollowRedirects, setHeaderManager, setHTTPFiles, setImageParser, setImplementation, setIpSource, setIpSourceType, setMD5, setMethod, setMonitor, setMonitor, setPath, setPath, setPort, setPostBodyRaw, setProtocol, setResponseTimeout, setUseKeepAlive, testEnded, testIterationStart, testStarted, threadStarted, toString, useMD5
 
Methods inherited from class org.apache.jmeter.testelement.AbstractTestElement
addPropertiesValues, addProperty, addProperty, canRemove, clear, clearTemporary, emptyTemporary, equals, getComment, getName, getProperty, getPropertyAsBoolean, getPropertyAsBoolean, getPropertyAsDouble, getPropertyAsFloat, getPropertyAsInt, getPropertyAsInt, getPropertyAsLong, getPropertyAsLong, getPropertyAsString, getPropertyAsString, getSearchableTokens, getThreadContext, getThreadName, hashCode, isEnabled, isRunningVersion, isTemporary, logProperties, mergeIn, propertyIterator, recoverRunningVersion, removeProperty, setComment, setEnabled, setName, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setRunningVersion, setTemporary, setThreadContext, setThreadName, traverse, traverseCollection, traverseMap, traverseProperty
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.apache.jmeter.testelement.ThreadListener
threadStarted
 
Methods inherited from interface org.apache.jmeter.testelement.TestElement
canRemove, clear, getComment, getName, getProperty, getPropertyAsBoolean, getPropertyAsBoolean, getPropertyAsDouble, getPropertyAsFloat, getPropertyAsInt, getPropertyAsInt, getPropertyAsLong, getPropertyAsLong, getPropertyAsString, getPropertyAsString, getThreadContext, getThreadName, isEnabled, isRunningVersion, isTemporary, propertyIterator, recoverRunningVersion, removeProperty, setComment, setEnabled, setName, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setRunningVersion, setTemporary, setThreadContext, setThreadName, traverse
 

Field Detail

DEFAULT_CLASS

public static final String DEFAULT_CLASS
See Also:
Constant Field Values
Constructor Detail

AccessLogSampler

public AccessLogSampler()
Method Detail

setLogFile

public void setLogFile(String path)
Set the path where XML messages are stored for random selection.


getLogFile

public String getLogFile()
Get the path where XML messages are stored. this is the directory where JMeter will randomly select a file.


setParserClassName

public void setParserClassName(String classname)
it's kinda obvious, but we state it anyways. Set the xml file with a string path.

Parameters:
classname - - parser class name

getParserClassName

public String getParserClassName()
Get the file location of the xml file.

Returns:
String file path.

sampleWithParser

public SampleResult sampleWithParser()
sample gets a new HTTPSampler from the generator and calls it's sample() method.


sample

public SampleResult sample(Entry e)
sample(Entry e) simply calls sample().

Specified by:
sample in interface Sampler
Overrides:
sample in class HTTPSamplerBase
Parameters:
e - - ignored
Returns:
the new sample

instantiateParser

public void instantiateParser()
Method will instantiate the log parser based on the class in the text field. This was done to make it easier for people to plugin their own log parser and use different log parser.


getFilterClassName

public String getFilterClassName()
Returns:
Returns the filterClassName.

setFilterClassName

public void setFilterClassName(String filterClassName)
Parameters:
filterClassName - The filterClassName to set.

getDomain

public String getDomain()
Overrides:
getDomain in class HTTPSamplerBase
Returns:
Returns the domain.

setDomain

public void setDomain(String domain)
Overrides:
setDomain in class HTTPSamplerBase
Parameters:
domain - The domain to set.

isImageParsing

public boolean isImageParsing()
Returns:
Returns the imageParsing.

setImageParsing

public void setImageParsing(boolean imageParsing)
Parameters:
imageParsing - The imageParsing to set.

getPortString

public String getPortString()
Returns:
Returns the port.

setPortString

public void setPortString(String port)
Parameters:
port - The port to set.

initFilter

protected void initFilter()

clone

public Object clone()

Specified by:
clone in interface TestElement
Overrides:
clone in class HTTPSamplerBase

testEnded

public void testEnded()

Called once for all threads after the end of a test. This will use the same element instances as at the start of the test.

N.B. testStarted() and testEnded() are called from different threads.

Specified by:
testEnded in interface TestStateListener
Overrides:
testEnded in class HTTPSamplerBase
See Also:
StandardJMeterEngine.stopTest()

testStarted

public void testStarted()

Called just before the start of the test from the main engine thread. This is before the test elements are cloned. Note that not all the test variables will have been set up at this point.

N.B. testStarted() and testEnded() are called from different threads.

Specified by:
testStarted in interface TestStateListener
Overrides:
testStarted in class HTTPSamplerBase
See Also:
StandardJMeterEngine.run()

threadFinished

public void threadFinished()
Called for each thread after all samples have been processed.

Specified by:
threadFinished in interface ThreadListener
Overrides:
threadFinished in class HTTPSamplerBase
See Also:
JMeterThread.threadFinished(org.apache.jmeter.engine.event.LoopIterationListener)

Apache JMeter

Copyright © 1998-2013 Apache Software Foundation. All Rights Reserved.