Skip to content

HTTP Testing Task

The HTTP Testing Task defines an HTTP protocol testing task for functional, performance, stability, and custom testing of HTTP services.

Main Parameter List

ParameterTypeRequiredLength LimitDescription
targetenumYes-Task Type Identifier
Fixed value HTTP
namestringYes≤400 charsInterface Identifier
Unique identifier in test scenarios
descriptionstringNo≤800 charsDetailed Description
Explains the business purpose of the interface
enabledbooleanYes-Enable Status
true: Execute this interface (default)
false: Skip this interface
beforeNamestringNo≤400 charsExecution Order Control
Specifies the preceding task name to ensure execution order
transactionNamestringNo≤400 charsTransaction Identifier
Associates with the start transaction name of a transaction controller
apisIdintegerNo-API Resource Association
Links to API repository ID (test results auto-sync)
caseIdintegerNo-Test Case Association
Links to test case ID (test results auto-sync)
requestobjectYes-Request Configuration
Defines request method/URL/parameters/authentication etc.
assertionsarray[object]No-Result Validation Rules
Sets response validation conditions
variablesarray[object]No-Dynamic Sample Variable Extraction
Extracts values from responses for subsequent use
See Variable Definition
datasetsarray[object]No-Test Datasets
Drives multi-scenario data testing
See Dataset Definition
actionOnEOFenumNo-Dataset End Strategy
RECYCLE: Recycle data (default)
STOP_THREAD: Stop thread
sharingModeenumNo-Data Sharing Mode
ALL_THREAD: Thread-shared (default)
CURRENT_THREAD: Thread-independent

Key Parameter Notes:

  1. Transaction Control (transactionName)
    • Used to associate with transaction controllers (TRANS_START)
    • Enables atomic business operation statistics
  2. Data-Driven (datasets+sharingMode)
    • ALL_THREAD: All threads share the same dataset
    • CURRENT_THREAD: Each thread has an independent data copy
  3. End Strategy (actionOnEOF)
    • RECYCLE: Recycle data (for stress testing)
    • STOP_THREAD: Stop thread when data is exhausted (precise control)
  4. Result Association (apisId/caseId)
    • Enables automatic test result synchronization with API repository/test cases
    • Supports continuous integration report generation

Complete HTTP structure example:

yaml
- target: HTTP
  name: Add User
  description: This is an example of complete HTTP parameters
  enabled: true
  beforeName: BusinessTransaction
  transactionName: BusinessTransaction
  apisId: 193234753355265004
  caseId: 193234753355265004
  request:
    # Request parameter configuration... assertions:
    # Assertion parameter configuration... variables:
    # Variable parameter configuration... datasets:
    # Dataset parameter configuration... actionOnEOF: RECYCLE
  sharingMode: ALL_THREAD

Request Construction (request)

ParameterTypeRequiredLimitDescription
methodenumYes-Request Method
POST/GET/PUT/PATCH/
DELETE/HEAD/OPTIONS/TRACE
urlstringNo≤2000 charsComplete Request URL
Takes precedence over server+endpoint combination
serverobjectNo-Server Configuration
Defines base URL and environment variables
endpointstringNo≤800 charsInterface Path
Combined with server to form complete URL
authenticationobjectNo-Authentication Configuration
Supports Basic/Bearer/APIKey/OAuth2 etc.
parametersarrayNo1-200 itemsRequest Parameters
Path/Query/Header/Cookie parameter configuration
bodyobjectNo-Request Body Configuration
Supports JSON/Form/binary formats

Relationship between complete URL, server, and endpoint:

txt
https://api.example.com/v1/users?role=admin&status=active
\________________________/\____/ \______________________/
         server URL       endpoint    query parameters
                    Complete URL(path)

Complete request example structure:

yaml
request:
  method: PUT
  url: "http://serv01-sample.angusmock.cloud:30010/user/{username}"
  server:
    # Server parameter configuration... endpoint: "/user/{username}"
  authentication:
    # Authentication parameter configuration... parameters:
    # Request parameter configuration... body:
    # Request body configuration...

Server Configuration (server)

ParameterTypeRequiredLength LimitDescription
urlstringYes≤400 charsBase Server URL
descriptionstringNo≤800 charsServer Description
Purpose or environment details
variablesMap<string,serverVariable>No1-200 itemsEnvironment Variables
Supports dynamic environment switching

Server Variable Configuration (serverVariable)

ParameterTypeRequiredLength LimitDescription
allowableValuesarray[string]Yes1-200 itemsAllowed Values List
Defines variable value range
defaultValuestringYes≤400 charsDefault Value
Fallback when unspecified
descriptionstringNo≤800 charsVariable Description
Explains variable purpose

Server Configuration Example:

yaml
server:
  url: "http://{env}-sample.angusmock.cloud:660"
  description: The example of server
  variables:
    env:
      allowableValues:
      - dev
      - beta
      - prod
      defaultValue: beta
      description: The example of server variable

Authentication Configuration (authentication)

ParameterTypeRequiredLength LimitDescription
typeenumYes-Authentication Type
none: No auth
http: Basic auth
apiKey: API key
oauth2: OAuth2
namestringYes≤400 charsScheme Name
Examples: User Auth/API Key Auth
descriptionstringNo≤800 charsScheme Description
Detailed auth mechanism
enabledbooleanYes-Enabled Status
true: Enabled (default)
false: Disabled
valuestringNo≤4096 charsCredential Value
Supports variable expressions
Example: Bearer {accessToken}
apiKeysarrayNo1-10 itemsAPI Key Group
Multi-key combination auth
oauth2objectYes-OAuth2 Configuration
Supports multiple grant flows

Authentication Configuration Example Structure:

yaml
authentication:
  type: http
  name: Security schema
  description: The security scheme used for HTTP requests
  enabled: true
  value: Bearer 181622ea2a1f4934ad6bec0308390da9
  apiKeys:
    # API key auth configuration
  oauth2:
   # OAuth2 auth configuration

Basic Authentication (http)

yaml
authentication:
  type: http
  name: Security schema
  description: The security scheme used for HTTP requests
  enabled: true
  value: Basic YWRtaW46YWRtaW4xMjM=  # Base64 username:password

Bearer Token Authentication (http)

yaml
authentication:
  type: http
  name: Security schema
  description: The security scheme used for HTTP requests
  enabled: true
  value: Bearer 181622ea2a1f4934ad6bec0308390da9

API Key Authentication (apiKeys)

ParameterTypeRequiredLength LimitDescription
namestringYes≤400 charsParameter Identifier
Supports variables
Example: X-{variable1}-API-Key
inenumYes-Parameter Location
header: Request header
query: URL query
cookie: Cookie
valuestringYes≤1024 charsParameter Value
Supports variables
Example: {apiKey}
yaml
type: apiKey
name: Security schema
description: The security scheme used for HTTP requests
enabled: true
apiKeys:
- name: ak
  in: cookie
  value: cLpyeth1YGcZ8iZFJQilCJi4m979D1To
- name: sk
  in: cookie
  value: ypIPSxeI7ylgCW44FIFugZKmld63eQO3xqbGxsVIor3EWqxRgwA1YXtDsVrUwuMX

OAuth2 Authentication (oauth2)

ParameterTypeRequiredLength LimitDescription
clientCredentialsobjectNo-Client Credentials Flow
For server-to-server auth
passwordobjectNo≤400 charsPassword Flow
For trusted clients
authFlowenumNo≤800 charsGrant Type
clientCredentials/password
newTokenbooleanYes-Token Refresh
true: Fetch new token per request
false: Use fixed token (default)
tokenstringConditional≤4096 charsFixed Access Token
Required when newToken=false
Supports variables

Example with existing OAuth2 token:

yaml
type: oauth2
name: Security schema
description: The security scheme used for HTTP requests
enabled: true
value: Bearer 181622ea2a1f4934ad6bec0308390da9
oauth2:
  authFlow: clientCredentials
  newToken: true
  token: Bearer 181622ea2a1f4934ad6bec0308390da9
OAuth2 Client Credentials Flow
ParameterTypeRequiredLength LimitDescription
tokenUrlstringYes≤400 charsToken Endpoint
OAuth2 core URL
scopesarrayNo1-200 itemsPermission Scopes
Defines API access
Example: ["user:read", "user:write"]
clientIdstringYes≤400 charsClient ID
Supports variables
Example: {env}_client_id
clientSecretstringYes≤1024 charsClient Secret
Supports variables
Sensitive - recommend encryption
clientInenumNo-Credential Location
See position details below

Client Credential Positions (clientIn)

PositionTransmission MethodExample
QUERY_PARAMETERURL parameters?client_id=id&client_secret=secret
BASIC_AUTH_HEADERAuthorization headerBasic base64(id:secret)
REQUEST_BODYForm dataclient_id=id&client_secret=secret

Client Credentials Example:

yaml
type: oauth2
name: Security schema
description: The security scheme used for HTTP requests
enabled: true
oauth2:
  clientCredentials:
    tokenUrl: http://serv01-sample.angusmock.cloud:30010/oauth/token
    scopes:
    - user:read
    clientId: client3
    clientSecret: secret3
    clientIn: QUERY_PARAMETER
  authFlow: clientCredentials
OAuth2 Password Flow
ParameterTypeRequiredLength LimitDescription
tokenUrlstringYes≤400 charsToken Endpoint
OAuth2 core URL
scopesarrayNo1-200 itemsPermission Scopes
Defines API access
Example: ["user:read", "user:write"]
clientIdstringYes≤400 charsClient ID
Supports variables
Example: {env}_client_id
clientSecretstringYes≤1024 charsClient Secret
Supports variables
Sensitive - recommend encryption
clientInenumNo-Credential Location
See position details
usernamestringNo≤400 charsUsername
Password flow only
Supports variables
passwordstringNo≤1024 charsPassword
Password flow only
Supports variables

Resource Owner Password Example:

yaml
type: oauth2
name: Security schema
description: The security scheme used for HTTP requests
enabled: true
oauth2:
  password:
    tokenUrl: http://serv01-sample.angusmock.cloud:30010/oauth/token
    scopes:
    - user:read
    clientId: client2
    clientSecret: secret2
    clientIn: QUERY_PARAMETER
    username: admin
    password: 123456
  authFlow: password

Request Parameters (parameters)

ParameterTypeRequiredLength LimitDescription
namestringYes≤400 charsParameter Name
Supports variables
Example: {env}_id
inenumYes-Parameter Location
QUERY: URL query
PATH: URL path
HEADER: Header
COOKIE: Cookie
descriptionstringNo≤800 charsParameter Description
Detailed usage
enabledbooleanYes-Enabled Status
true: Include (default)
false: Exclude
typeenumNo-Data Type
string/number/integer
/boolean/array/object
Default: string
formatstringNo≤80 charsData Format
Examples: date/email/uuid/uri
valuestringNo≤4096 charsParameter Value
Supports variables & mock functions
Example: @Email()

Note: RFC7230 states header names are case-insensitive.

Complete Example with Different Parameter Locations:

yaml
parameters:
- name: Authorization
  in: header
  description: The example of parameters in the request header
  enabled: true
  type: string
  format: string
  value: "{accessToken}"
- name: Content-Type
  in: header
  description: Content-Type is used to determine the request content
  enabled: true
  type: string
  format: string
  value: application/json
- name: username
  in: path
  description: The example of parameters in the path
  enabled: true
  type: string
  format: string
  value: admin
- name: password
  in: query
  description: The example of parameters in the query
  enabled: true
  type: string
  format: string
  value: admin

Request Body (body)

ParameterTypeRequiredLength LimitDescription
formatstringNo≤80 charsData Format
Examples: json/xml/yaml
contentEncodingenumNo-Content Encoding
base64: Base64
gzip_base64: GZIP+Base64
formsarrayNo1-200 itemsForm Parameters
For FormData requests
rawContentstringNo-Raw Content
Supports JSON/XML text or Base64 binary
Supports variables & mock functions
Form Parameters (forms)
ParameterTypeRequiredLength LimitDescription
namestringYes≤400 charsField Name
Example: avatar/metadata
descriptionstringNo≤800 charsField Description
Usage explanation
enabledbooleanYes-Enabled Status
true: Include (default)
false: Exclude
typeenumNo-Data Type
string/number/integer/boolean/array/object
Default: string
formatstringNo≤80 charsData Format
Examples: date/email/uuid
contentTypestringNo≤80 charsContent Type
Examples: image/png/application/json
contentEncodingenumNo-Content Encoding
base64: Base64
gzip_base64: GZIP+Base64
fileNamestringNo≤400 charsFilename
For file uploads
Example: avatar.png
valuestringNo-Field Value
Supports text/JSON/Base64 files
Supports variables & mock functions

JSON Request Body Example (ContentType: application/json):

yaml
body:
  format: json
  rawContent: "{\"age\": 18, \"hobbies\": \"swimming, playing basketball\", \"avatar\"\
    :\"http://serv01-sample.angusmock.cloud:30010/user/{username}/avatar.png\"}"

Form URL-Encoded Example (ContentType: application/x-www-form-urlencoded):

yaml
body:
  forms:
  - name: age
    description: The example of form-data text parameter
    enabled: true
    type: integer
    format: int32
    value: 18
  - name: hobbies
    description: The example of form-data text parameter
    enabled: true
    type: string
    format: string
    value: "swimming, playing basketball"

Multipart Form Data Example (ContentType: multipart/form-data):

yaml
body:
  forms:
  - name: age
    description: The example of form-data text parameter
    enabled: true
    type: integer
    format: int32
    value: 18
  - name: hobbies
    description: The example of form-data text parameter
    enabled: true
    type: string
    format: string
    value: "swimming, playing basketball"
  - name: avatar
    description: The example of form-data file parameter
    enabled: true
    type: string
    format: string
    contentType: image/png
    contentEncoding: base64
    value: VGhpcyBpcyB0aGUgYmluYXJ5IGNvbnRlbnQgb2YgdGhlIGF2YXRhci5wbmcgZmlsZQ==
    fileName: avatar.png

Example of Request Body with ContentType as binary image/png format:

yaml
body:
  format: binary
  contentEncoding: base64 
  rawContent: VGhpcyBpcyB0aGUgYmluYXJ5IGNvbnRlbnQgb2YgdGhlIGF2YXRhci5wbmcgZmlsZQ==

Response Assertions

ParameterTypeRequiredLength LimitDescription
namestringYes≤200 charsAssertion Name
Unique identifier
Example: Verify Status Code
descriptionstringNo≤800 charsAssertion Description
Detailed purpose explanation
enabledbooleanYes-Enable Status
true: Enabled (default)
false: Disabled
typeenumYes-Assertion Type
STATUS: Status code
HEADER: Response header
BODY: Response body
BODY_SIZE: Response body size
SIZE: Total response size
DURATION: Duration
parameterNamestringConditional≤400 charsParameter Name
Required when type=HEADER
Specifies response header name
conditionstringNo≤400 charsExecution Condition
Variable expression controls assertion execution
Example: {env} == "prod"
assertionConditionenumYes-Assertion Condition
See assertion conditions below
expressionstringConditional≤400 charsExtraction Expression
Required for REGEX/JSON_PATH/XPATH
matchItemintegerNo1-2000Match Item Index
Specifies position in multi-value matches
expectedstringConditional≤4096 charsExpected Value
Required for non-empty value conditions
extractionobjectNo-Dynamic Extraction Configuration
Extracts expected value from response

Assertion Conditions

ConditionDescriptionApplicable TypesExample
EQUALStrict equalityAll types200 = 200 → Pass
NOT_EQUALInequalityAll types404200 → Pass
IS_EMPTYEmpty check (empty string or null)String/Object"" or null → Pass
NOT_EMPTYNon-empty checkString/Object"data" → Pass
IS_NULLStrict null checkObjectnull → Pass
NOT_NULLNon-null checkObject{} → Pass
GREATER_THANGreater thanNumber/Date1024 > 1000 → Pass
GREATER_THAN_EQUALGreater than or equalNumber/Date100100 → Pass
LESS_THANLess thanNumber/Date80 < 100 → Pass
LESS_THAN_EQUALLess than or equalNumber/Date100100 → Pass
CONTAINContainsString/Array"hello world""world" → Pass
NOT_CONTAINDoes not containString/Array"hello""world" → Pass
REG_MATCHRegex matchString"abc123" ~ "\d+" → Pass
XPATH_MATCHXML node matchXML//book/price > 50
JSON_PATH_MATCHJSON node matchJSON$.data.userId = "1001"

Match Item Rules

ScenariomatchItem SettingReturn Value
Index not specifiedNot set or matchItem: nullAll matched values concatenated
Valid indexmatchItem: N (0≤N≤2000)(N+1)th matched value
Invalid indexN > match countnull

1. Regex Matching (REG_MATCH)

Input Text:

Hello! My phone numbers are 18888888888 and 13999999999.

Expression:

regex
(1\d{10})

Result Processing:

matchItemReturn ValueDescription
Not specified"1888888888813999999999"Concatenated values
0"18888888888"First match
1"13999999999"Second match
2nullOut of range

2. JSONPath Matching (JSON_PATH_MATCH)

Input JSON:

json
{  
  "store": {  
    "book": [  
      {"title": "Book1", "price": 100},  
      {"title": "Book2", "price": 200}  
    ]  
  }  
}

Expression:

$.store.book[*]

Matching Result Handling:

matchItemReturn ValueDescription
Not Specified[{"title":"Book1","price":100},
{"title":"Book2","price":200}]
Full array
0{"title":"Book1","price":100}First book
1{"title":"Book2","price":200}Second book
2nullOut of range

3. XPath Matching (XPATH_MATCH)

Input XML:

xml
<persons>  
  <person>  
    <name>Zhang San</name>  
    <skills>Java</skills>  
    <skills>Python</skills>  
  </person>  
  <person>  
    <name>Li Si</name>  
    <skills>JavaScript</skills>  
  </person>  
</persons>

Expression:

txt
//person

Matching Result Handling:

matchItemReturn ValueDescription
Not Specified"Zhang SanJavaPythonLi SiJavaScript"All text merged
0"Zhang SanJavaPython"First person node text
1"Li SiJavaScript"Second person node text
2nullOut of range

Expected Value Extraction Configuration (extraction)

Extraction can be used to read a value from the current request or response at a specified location as the assertion expected value.

ParameterTypeRequiredLength LimitDescription
methodenumYes-Extraction Method
REGEX: Regular expression
JSON_PATH: JSON path
X_PATH: XML path
expressionstringYes-Extraction Expression
Written according to the method type
defaultValuestringYes-Default Value
Used when extraction fails
locationenumYes-Extraction Location
See location descriptions below
parameterNamestringConditional≤400 charsParameter Name
Required when location is HEADER/PATH/QUERY/FORM

Extraction Location (location)

LocationUse CaseExample
PATH_PARAMETERRESTful resource ID/users/{userId}
QUERY_PARAMETERFilter conditions?category=books
REQUEST_HEADERAuthentication infoAuthorization: Bearer token
FORM_PARAMETERForm fieldsusername=admin
REQUEST_RAW_BODYRaw request contentJSON/XML request body
RESPONSE_HEADERResponse metadataContent-Type: application/json
RESPONSE_BODYBusiness dataJSON/XML response body

Expected Value Assertion Example:

yaml
assertions:  
- name: Assert the HTTP status code is `200`  
  description: This is an example of an expected value assertion  
  enabled: true  
  type: STATUS  
  expected: 200  
  assertionCondition: EQUAL  
  condition: 1=1  
- name: Assert the business code is `S`  
  description: "This is an example of jsonpath match assertions, response body is:\  
    \ {\n    \"code\": \"S\",\n    \"msg\": \"Success\"\n}"  
  enabled: true  
  type: BODY  
  expected: S  
  expression: $..code  
  assertionCondition: JSON_PATH_MATCH  
- name: Assert response header `X-Extraction-Token` value contains `888888`  
  description: "This is an example of regexp match assertions, `X-Extraction-Token`\  
    \ value is: Your token is 888888 or 999999"  
  enabled: true  
  type: HEADER  
  parameterName: X-Extraction-Token  
  expected: 888888  
  expression: "(\\d{6})"  
  matchItem: 1  
  assertionCondition: REG_MATCH  
  condition: "{assertHeader}=true"

Extracted Value Assertion Example:

yaml
assertions:  
- name: Assert the response body access_token is `181622ea2a1f4934ad6bec0308390da9`  
  description: This is an example of an extraction value assertion  
  enabled: true  
  type: BODY  
  assertionCondition: EQUAL  
  extraction:  
    method: JSON_PATH  
    expression: $.data.access_token  
    defaultValue: 181622ea2a1f4934ad6bec0308390da9  
    location: RESPONSE_BODY

Complete Configuration Parameter Example

yaml
- target: HTTP  
  name: Add User  
  description: This is an example of complete HTTP parameters  
  enabled: true  
  beforeName: BusinessTransaction  
  transactionName: BusinessTransaction  
  apisId: 193234753355265004  
  caseId: 193234753355265004  
  request:  
    method: PUT  
    url: "http://serv01-sample.angusmock.cloud:30010/user/{username}"  
    server:  
      url: "http://{env}-sample.angusmock.cloud:660"  
      description: The example of server  
      variables:  
        env:  
          allowableValues:  
            - dev  
            - beta  
            - prod  
          defaultValue: beta  
          description: The example of server variable  
    endpoint: "/user/{username}"  
    authentication:  
      type: http  
      name: Security schema  
      description: The security scheme used for HTTP requests  
      enabled: true  
      value: Bearer 181622ea2a1f4934ad6bec0308390da9  
      apiKeys:  
        - name: ak  
          in: cookie  
          value: cLpyeth1YGcZ8iZFJQilCJi4m979D1To  
        - name: sk  
          in: cookie  
          value: ypIPSxeI7ylgCW44FIFugZKmld63eQO3xqbGxsVIor3EWqxRgwA1YXtDsVrUwuMX  
        - name: otherKey1  
          in: header  
          value: otherKey1Value  
        - name: otherKey2  
          in: query  
          value: otherKey2Value  
      oauth2:  
        clientCredentials:  
          tokenUrl: http://serv01-sample.angusmock.cloud:30010/oauth/token  
          scopes:  
            - user:read  
          clientId: client3  
          clientSecret: secret3  
          clientIn: QUERY_PARAMETER  
        password:  
          tokenUrl: http://serv01-sample.angusmock.cloud:30010/oauth/token  
          scopes:  
            - user:read  
          clientId: client2  
          clientSecret: secret2  
          clientIn: QUERY_PARAMETER  
          username: admin  
          password: 123456  
        newToken: false  
    parameters:  
      - name: Authorization  
        in: header  
        description: The example of parameters in the request header  
        enabled: true  
        type: string  
        format: string  
        value: "{accessToken}"  
      - name: Content-Type  
        in: header  
        description: Content-Type is used to determine the request content  
        enabled: true  
        type: string  
        format: string  
        value: application/json  
      - name: username  
        in: path  
        description: The example of parameters in the path  
        enabled: true  
        type: string  
        format: string  
        value: admin  
      - name: password  
        in: query  
        description: The example of parameters in the query  
        enabled: true  
        type: string  
        format: string  
        value: admin  
    body:  
      type: string  
      format: string  
      contentEncoding: base64  
      forms:  
        - name: age  
          description: The example of form-data text parameter  
          enabled: true  
          type: integer  
          format: int32  
          value: 18  
        - name: hobbies  
          description: The example of form-data text parameter  
          enabled: true  
          type: string  
          format: string  
          value: "swimming, playing basketball"  
        - name: avatar  
          description: The example of form-data file parameter  
          enabled: true  
          type: string  
          format: string  
          contentType: image/png  
          contentEncoding: base64  
          value: VGhpcyBpcyB0aGUgYmluYXJ5IGNvbnRlbnQgb2YgdGhlIGF2YXRhci5wbmcgZmlsZQ==  
          fileName: avatar.png  
      rawContent: "{\"age\": 18, \"hobbies\": \"swimming, playing basketball\", \"avatar\"\  
        :\"http://serv01-sample.angusmock.cloud:30010/user/{username}/avatar.png\"}"  
  assertions:  
    - name: Assert the HTTP status code is 200  
      description: This is an example of an expected value assertion  
      enabled: true  
      type: STATUS  
      expected: 200  
      assertionCondition: EQUAL  
      condition: 1=1  
    - name: Assert response header `X-Extraction-Token` value contains 888888  
      description: "This is an example of extracting value assertions, `X-Extraction-Token`\  
      \ value is: Your token is 888888 or 999999"  
      enabled: true  
      type: HEADER  
      parameterName: X-Extraction-Token  
      expected: 888888  
      expression: "(\\d{6})"  
      matchItem: 1  
      assertionCondition: EQUAL  
      condition: "{assertHeader}=true"  
  variables:  
    - name: accessToken  
      method: JSON_PATH  
      expression: $.data.access_token  
      location: RESPONSE_BODY  
  datasets:  
    - name: UsernameDataset  
      parameters:                              
        - name: username                              
          value: '@Name()'  
  actionOnEOF: RECYCLE  
  sharingMode: ALL_THREAD

Let me know if you need any refinements!

Released under the GPL-3.0 License.