org.apache.jmeter.control

## Class ForeachController

- java.lang.Object
- - org.apache.jmeter.testelement.AbstractTestElement
  - - org.apache.jmeter.control.GenericController
    - - org.apache.jmeter.control.ForeachController

- All Implemented Interfaces:
    Serializable, Cloneable, Controller, IteratingController, LoopIterationListener, Searchable, TestElement, TestCompilerHelper

      public class ForeachController
      extends GenericController
      implements Serializable, IteratingController

  ForeachController that iterates over a list of variables named XXXX_NN stored in `JMeterVariables` where NN is a number starting from 1 to number of occurrences. This list of variable is usually set by PostProcessor (Regexp PostProcessor or `HtmlExtractor`) Iteration can take the full list or only a subset (configured through indexes)
  See Also:
    Serialized Form

- - ### Field Summary

    - ### Fields inherited from class org.apache.jmeter.control.GenericController

      `current, subControllersAndSamplers`

    - ### Fields inherited from interface org.apache.jmeter.testelement.TestElement

      `COMMENTS, ENABLED, GUI_CLASS, NAME, TEST_CLASS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ForeachController()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `breakLoop()` Break loop ("break" keyword equivalent)
    `String` | `getEndIndexAsString()`
    `String` | `getInputValString()`
    `protected int` | `getIterCount()`
    `String` | `getReturnValString()`
    `String` | `getStartIndexAsString()`
    `boolean` | `getUseSeparator()`
    `protected void` | `incrementLoopCount()`
    `void` | `initialize()` Reset loopCount to Start index
    `boolean` | `isDone()` Indicates whether the Controller is done delivering Samplers for the rest of the test.
    `void` | `iterationStart(LoopIterationEvent iterEvent)` Called when a loop iteration is about to start.
    `Sampler` | `next()` Determines the next sampler to be processed.
    `protected Sampler` | `nextIsNull()` Called by `GenericController.next()` when `GenericController.getCurrentElement()` returns `null`.
    `protected void` | `reInitialize()` Resets the controller (called after execution of last child of controller): resetCurrent() (i.e.
    `protected void` | `resetLoopCount()`
    `void` | `setEndIndex(String endIndex)`
    `void` | `setInputVal(String inputValue)`
    `void` | `setReturnVal(String inputValue)`
    `void` | `setStartIndex(String startIndex)`
    `void` | `setUseSeparator(boolean b)`
    `void` | `startNextLoop()` Start next iteration ("continue" keyword equivalent in loops)
    `void` | `triggerEndOfLoop()` Trigger end of loop condition on controller (used by Start Next Loop feature)

    - ### Methods inherited from class org.apache.jmeter.control.GenericController

      `addIterationListener, addTestElement, addTestElementOnce, currentReturnedNull, fireIterationStart, fireIterEvents, getCurrentElement, getSubControllers, incrementCurrent, incrementIterCount, initializeSubControllers, isFirst, nextIsAController, nextIsASampler, readResolve, removeCurrentElement, removeIterationListener, resetCurrent, resetIterCount, setCurrentElement, setDone, setFirst`

    - ### Methods inherited from class org.apache.jmeter.testelement.AbstractTestElement

      `addPropertiesValues, addProperty, addProperty, canRemove, clear, clearTemporary, clearTestElementChildren, clone, 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, toString, wait, wait, wait`

    - ### Methods inherited from interface org.apache.jmeter.control.IteratingController

      `updateIterationIndex`

    - ### Methods inherited from interface org.apache.jmeter.testelement.TestElement

      `canRemove, clear, clearTestElementChildren, clone, getComment, getName, getProperty, getPropertyAsBoolean, getPropertyAsBoolean, getPropertyAsDouble, getPropertyAsFloat, getPropertyAsInt, getPropertyAsInt, getPropertyAsLong, getPropertyAsLong, getPropertyAsString, getPropertyAsString, getThreadContext, getThreadName, isEnabled, isRunningVersion, isTemporary, propertyIterator, recoverRunningVersion, removed, removeProperty, setComment, setEnabled, setName, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setProperty, setRunningVersion, setTemporary, setThreadContext, setThreadName, traverse`

- - ### Constructor Detail

    - #### ForeachController

          public ForeachController()

  - ### Method Detail

    - #### setStartIndex

          public void setStartIndex(String startIndex)

      Parameters:
        `startIndex` - Start index of loop

    - #### getStartIndexAsString

          public String getStartIndexAsString()

      Returns:
        start index of loop as String

    - #### setEndIndex

          public void setEndIndex(String endIndex)

      Parameters:
        `endIndex` - End index of loop

    - #### getEndIndexAsString

          public String getEndIndexAsString()

      Returns:
        end index of loop

    - #### setInputVal

          public void setInputVal(String inputValue)

    - #### getInputValString

          public String getInputValString()

    - #### setReturnVal

          public void setReturnVal(String inputValue)

    - #### getReturnValString

          public String getReturnValString()

    - #### setUseSeparator

          public void setUseSeparator(boolean b)

    - #### getUseSeparator

          public boolean getUseSeparator()

    - #### 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`
      Overrides:
        `isDone` in class `GenericController`
      Returns:
        boolean
      See Also:
        `Controller.isDone()`

    - #### next

          public Sampler next()

      Description copied from class: `GenericController`

      Determines the next sampler to be processed.

      If `GenericController.isDone()` is `true`, returns null.

      Gets the list element using current pointer. If this is `null`, calls `GenericController.nextIsNull()`.

      If the list element is a `Sampler`, calls `GenericController.nextIsASampler(Sampler)`, otherwise calls `GenericController.nextIsAController(Controller)`

      If any of the called methods throws `NextIsNullException`, returns `null`, otherwise the value obtained above is returned.

      Specified by:
        `next` in interface `Controller`
      Overrides:
        `next` in class `GenericController`
      Returns:
        the next sampler or `null`

    - #### nextIsNull

          protected Sampler nextIsNull()
                                throws NextIsNullException

      Called by `GenericController.next()` when `GenericController.getCurrentElement()` returns `null`. Reinitialises the controller.
      Overrides:
        `nextIsNull` in class `GenericController`
      Returns:
        null (always, for this class)
      Throws:
        `NextIsNullException` - when the end of the list has already been reached

    - #### incrementLoopCount

          protected void incrementLoopCount()

    - #### resetLoopCount

          protected void resetLoopCount()

    - #### getIterCount

          protected int getIterCount()

      Overrides:
        `getIterCount` in class `GenericController`

    - #### reInitialize

          protected void reInitialize()

      Resets the controller (called after execution of last child of controller):
      - resetCurrent() (i.e. current=0)
      - increment iteration count
      - sets first=true
      - recoverRunningVersion() to set the controller back to the initial state
      Overrides:
        `reInitialize` in class `GenericController`

    - #### triggerEndOfLoop

          public void triggerEndOfLoop()

      Trigger end of loop condition on controller (used by Start Next Loop feature)
      Specified by:
        `triggerEndOfLoop` in interface `Controller`
      Overrides:
        `triggerEndOfLoop` in class `GenericController`

    - #### initialize

          public void initialize()

      Reset loopCount to Start index
      Specified by:
        `initialize` in interface `Controller`
      Overrides:
        `initialize` in class `GenericController`
      See Also:
        `GenericController.initialize()`

    - #### startNextLoop

          public void startNextLoop()

      Description copied from interface: `IteratingController`
      Start next iteration ("continue" keyword equivalent in loops)
      Specified by:
        `startNextLoop` in interface `IteratingController`

    - #### breakLoop

          public void breakLoop()

      Description copied from interface: `IteratingController`
      Break loop ("break" keyword equivalent)
      Specified by:
        `breakLoop` in interface `IteratingController`

    - #### iterationStart

          public void iterationStart(LoopIterationEvent iterEvent)

      Description copied from interface: `LoopIterationListener`
      Called when a loop iteration is about to start.
      Specified by:
        `iterationStart` in interface `LoopIterationListener`
      Parameters:
        `iterEvent` - the event

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