Class AbstractThreadGroup

java.lang.Object
org.apache.jmeter.testelement.AbstractTestElement
org.apache.jmeter.threads.AbstractThreadGroup
All Implemented Interfaces:
Serializable, Cloneable, Controller, Searchable, org.apache.jmeter.testelement.TestElement, JMeterThreadMonitor, TestCompilerHelper
Direct Known Subclasses:
ThreadGroup

public abstract class AbstractThreadGroup extends AbstractTestElement implements Serializable, Controller, JMeterThreadMonitor, TestCompilerHelper
ThreadGroup holds the settings for a JMeter thread group. This class is intended to be ThreadSafe.
See Also:
  • Field Details

    • DEFAULT_THREAD_STOP_TIMEOUT

      public static final Duration DEFAULT_THREAD_STOP_TIMEOUT
    • ON_SAMPLE_ERROR

      public static final String ON_SAMPLE_ERROR
      Action to be taken when a Sampler error occurs
      See Also:
    • ON_SAMPLE_ERROR_CONTINUE

      public static final String ON_SAMPLE_ERROR_CONTINUE
      Continue, i.e. ignore sampler errors
      See Also:
    • ON_SAMPLE_ERROR_START_NEXT_LOOP

      public static final String ON_SAMPLE_ERROR_START_NEXT_LOOP
      Start next loop for current thread if sampler error occurs
      See Also:
    • ON_SAMPLE_ERROR_STOPTHREAD

      public static final String ON_SAMPLE_ERROR_STOPTHREAD
      Stop current thread if sampler error occurs
      See Also:
    • ON_SAMPLE_ERROR_STOPTEST

      public static final String ON_SAMPLE_ERROR_STOPTEST
      Stop test (all threads) if sampler error occurs, the entire test is stopped at the end of any current samples
      See Also:
    • ON_SAMPLE_ERROR_STOPTEST_NOW

      public static final String ON_SAMPLE_ERROR_STOPTEST_NOW
      Stop test NOW (all threads) if sampler error occurs, the entire test is stopped abruptly. Any current samplers are interrupted if possible.
      See Also:
    • NUM_THREADS

      public static final String NUM_THREADS
      Number of threads in the thread group
      See Also:
    • MAIN_CONTROLLER

      public static final String MAIN_CONTROLLER
      See Also:
    • IS_SAME_USER_ON_NEXT_ITERATION

      public static final String IS_SAME_USER_ON_NEXT_ITERATION
      The same user or different users
      See Also:
  • Constructor Details

    • AbstractThreadGroup

      public AbstractThreadGroup()
  • Method Details

    • getSchema

      public org.apache.jmeter.threads.AbstractThreadGroupSchema getSchema()
      Specified by:
      getSchema in interface org.apache.jmeter.testelement.TestElement
    • getProps

      @NotNull public @NotNull org.apache.jmeter.testelement.schema.PropertiesAccessor<? extends AbstractThreadGroup,? extends org.apache.jmeter.threads.AbstractThreadGroupSchema> getProps()
      Specified by:
      getProps in interface org.apache.jmeter.testelement.TestElement
    • isDone

      public boolean isDone()
      Indicates whether the Controller is done delivering Samplers for the rest of the test. When the top-level controller returns true to JMeterThread, the thread is complete.
      Specified by:
      isDone in interface Controller
      Returns:
      boolean
    • next

      public Sampler next()
      Delivers the next Sampler or null
      Specified by:
      next in interface Controller
      Returns:
      org.apache.jmeter.samplers.Sampler or null
    • getSamplerController

      public Controller getSamplerController()
      Get the sampler controller.
      Returns:
      the sampler controller.
    • setSamplerController

      public void setSamplerController(LoopController c)
      Set the sampler controller.
      Parameters:
      c - the sampler controller.
    • addTestElement

      public void addTestElement(org.apache.jmeter.testelement.TestElement child)
      Add a test element.
      Specified by:
      addTestElement in interface org.apache.jmeter.testelement.TestElement
      Overrides:
      addTestElement in class AbstractTestElement
      Parameters:
      child - the test element to add.
    • addTestElementOnce

      public final boolean addTestElementOnce(org.apache.jmeter.testelement.TestElement child)
      Add child test element only if it has not already been added.

      Only for use by TestCompiler.

      Specified by:
      addTestElementOnce in interface TestCompilerHelper
      Parameters:
      child - the TestElement to be added
      Returns:
      true if the child was added
    • addIterationListener

      public void addIterationListener(LoopIterationListener lis)
      Controllers have to notify listeners of when they begin an iteration through their sub-elements.
      Specified by:
      addIterationListener in interface Controller
      Parameters:
      lis - The LoopIterationListener to add
    • removeIterationListener

      public void removeIterationListener(LoopIterationListener iterationListener)
      Unregister IterationListener
      Specified by:
      removeIterationListener in interface Controller
      Parameters:
      iterationListener - LoopIterationListener
    • initialize

      public void initialize()
      Called to initialize a controller at the beginning of a test iteration.
      Specified by:
      initialize in interface Controller
    • startNextLoop

      public void startNextLoop()
      Start next iteration after an error
    • triggerEndOfLoop

      public void triggerEndOfLoop()
      NOOP
      Specified by:
      triggerEndOfLoop in interface Controller
    • setNumThreads

      public void setNumThreads(int numThreads)
      Set the total number of threads to start
      Parameters:
      numThreads - the number of threads.
    • getNumberOfThreads

      public int getNumberOfThreads()
      Get the number of active threads
      Returns:
      the number of active threads
    • getNumThreads

      public int getNumThreads()
      Get the number of threads.
      Returns:
      the number of threads.
    • getOnErrorStartNextLoop

      public boolean getOnErrorStartNextLoop()
      Check if a sampler error should cause thread to start next loop.
      Returns:
      true if thread should start next loop
    • getOnErrorStopThread

      public boolean getOnErrorStopThread()
      Check if a sampler error should cause thread to stop.
      Returns:
      true if thread should stop
    • getOnErrorStopTest

      public boolean getOnErrorStopTest()
      Check if a sampler error should cause test to stop.
      Returns:
      true if test (all threads) should stop
    • getOnErrorStopTestNow

      public boolean getOnErrorStopTestNow()
      Check if a sampler error should cause test to stop now.
      Returns:
      true if test (all threads) should stop immediately
    • stopThread

      public abstract boolean stopThread(String threadName, boolean now)
      Hard or graceful stop depending on now flag
      Parameters:
      threadName - String thread name
      now - if true interrupt Thread
      Returns:
      boolean true if stop succeeded
    • numberOfActiveThreads

      public abstract int numberOfActiveThreads()
      Returns:
      int number of active threads
    • start

      public abstract void start(int groupCount, ListenerNotifier notifier, ListedHashTree threadGroupTree, StandardJMeterEngine engine)
      Start the ThreadGroup
      Parameters:
      groupCount - group number
      notifier - ListenerNotifier
      threadGroupTree - ListedHashTree
      engine - StandardJMeterEngine
    • addNewThread

      public abstract JMeterThread addNewThread(int delay, StandardJMeterEngine engine)
      Add a new JMeterThread to this ThreadGroup for engine
      Parameters:
      delay - Delay in milliseconds
      engine - StandardJMeterEngine
      Returns:
      JMeterThread
    • verifyThreadsStopped

      public abstract boolean verifyThreadsStopped()
      Returns:
      true if threads were correctly stopped
    • waitThreadsStopped

      public abstract void waitThreadsStopped()
      Wait for all Group Threads to stop after a graceful stop
    • tellThreadsToStop

      public abstract void tellThreadsToStop()
      This immediately stop threads of Group by interrupting them. It differs from stop() by being a hard stop
    • stop

      public abstract void stop()
      This gracefully stops threads of Group
    • breakThreadLoop

      public void breakThreadLoop()
    • setIsSameUserOnNextIteration

      public void setIsSameUserOnNextIteration(boolean isSameUserOnNextIteration)
      Set the kind of user
      Parameters:
      isSameUserOnNextIteration - true is the same user on next iteration of loop false is a different user on next iteration of loop
    • isSameUserOnNextIteration

      public boolean isSameUserOnNextIteration()
      Get kind of user:
      • true means same user running multiple iterations
      • false means a different user for each iteration
      Returns:
      the kind of user.
    • makeThread

      @API(status=EXPERIMENTAL, since="5.5") protected JMeterThread makeThread(StandardJMeterEngine engine, JMeterThreadMonitor monitor, ListenerNotifier notifier, int groupNumber, int threadNumber, ListedHashTree threadGroupTree, JMeterVariables variables)
      Create JMeterThread. Note: the input tree is not cloned.
      Parameters:
      engine - StandardJMeterEngine
      monitor - JMeterThreadMonitor
      notifier - ListenerNotifier
      groupNumber - thread group number
      threadNumber - int thread number
      threadGroupTree - ListedHashTree
      variables - initial variables
      Returns:
      JMeterThread
    • cloneTree

      @API(status=EXPERIMENTAL, since="5.5") public static ListedHashTree cloneTree(ListedHashTree tree)
      Parameters:
      tree - ListedHashTree
      Returns:
      a clone of tree