Skip to content

feat: add jmeter load test and account-opening instance lookup - #15

Merged
yilmaztayfun merged 1 commit into
masterfrom
f/sprint24
Apr 24, 2026
Merged

feat: add jmeter load test and account-opening instance lookup#15
yilmaztayfun merged 1 commit into
masterfrom
f/sprint24

Conversation

@yilmaztayfun

@yilmaztayfun yilmaztayfun commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add a containerized JMeter load test for the asynchronous (sync=false) account-opening happy path that polls workflow state between transitions, with overridable base URL and load profile.
  • Introduce get-instance and get-instances tasks plus their old-key based mappings to enable querying existing workflow instances.
  • Add a dedicated initiate-account-opening schema that validates the start transition payload and minor cleanup in FunctionValidatePoliciesMapping.

Changes

  • docker-compose.test.yml, jmeter/tests/workflow-test.jmx — JMeter test plan and isolated compose service joining the existing bbt-development network
  • README.md, .gitignore — Load testing usage docs and ignore for jmeter/results/
  • core/Schemas/account-opening/initiate-account-opening.json — New start transition payload schema
  • core/Schemas/account-opening/account-type-selection.json — Allow extra properties for flexible client attributes
  • core/Tasks/account-opening/get-instance.json, get-instances.json — New instance lookup tasks
  • core/Workflows/account-opening/src/GetInstanceByOldKeyMapping.csx, GetInstancesByOldKeyMapping.csx — Mappings for the new tasks
  • core/Workflows/account-opening/account-opening-workflow.json — Wire up the new tasks/schema
  • core/Functions/account-opening/multi-task-function-test.json, core/Functions/account-opening/src/FunctionValidatePoliciesMapping.csx — Remove stray double semicolon

Test Plan

  • Run `docker compose -f docker-compose.test.yml up --abort-on-container-exit` against a local engine and verify all samples succeed (HTTP 2xx)
  • Inspect `./jmeter/results/html-report/index.html` for happy-path metrics
  • Override env (e.g. `VNEXT_BASE_URL`, `JMETER_USERS`) and confirm the same plan runs against another environment
  • Validate workflow JSON schemas with `npm run validate`
  • Trigger the account-opening start transition with a payload missing `session` and confirm validation rejects it

Made with Cursor

Summary by Sourcery

Add JMeter-based load testing for the asynchronous account-opening workflow and introduce workflow instance lookup capabilities keyed by legacy identifiers.

New Features:

  • Provide a containerized JMeter load test scenario for the async account-opening happy path with configurable base URL and load profile.
  • Introduce new account-opening tasks and mappings to retrieve single or multiple workflow instances by an oldKey-based identifier.
  • Add a dedicated initiate-account-opening JSON schema to validate the workflow start transition payload.

Enhancements:

  • Relax account-type-selection schema constraints to allow additional client attributes in the transition payload.
  • Wire the new schema and instance lookup tasks into the existing account-opening workflow definition.
  • Clean up a minor mapping implementation typo in FunctionValidatePoliciesMapping.

Build:

  • Add a dedicated docker-compose.test.yml to run the JMeter load tests against services on the bbt-development Docker network.

Documentation:

  • Document how to run and configure the new JMeter-based load test, including scenario details and result locations in the README.

Tests:

  • Add a JMeter test plan covering the full async happy-path of the account-opening workflow.

Chores:

  • Ignore generated JMeter result artifacts in version control.

Summary by CodeRabbit

Release Notes

  • New Features

    • Added load testing capability for the account-opening workflow using JMeter with configurable user count, ramp-up, and loop parameters.
  • Documentation

    • Added comprehensive Load Testing (JMeter) section to README with step-by-step run commands, environment variable defaults, expected project layout, and guidance on interpreting test results and reports.

Add a containerized JMeter load test for the async account-opening
happy path that polls state between transitions, with overridable
base URL and load profile. Also introduce get-instance(s) tasks
and an initiate-account-opening schema to support querying existing
instances and validating the start transition payload.
@yilmaztayfun
yilmaztayfun requested review from a team April 24, 2026 07:21
@sourcery-ai

sourcery-ai Bot commented Apr 24, 2026

Copy link
Copy Markdown

Reviewer's Guide

Adds a containerized JMeter-based asynchronous account-opening load test and introduces account-opening workflow instance lookup tasks and schema refinements, plus minor cleanup.

Sequence diagram for asynchronous account-opening JMeter load test

sequenceDiagram
  actor Tester
  participant DockerCompose
  participant JMeter as JMeter_container
  participant Engine as Workflow_engine

  Tester->>DockerCompose: docker compose -f docker-compose.test.yml up
  DockerCompose->>JMeter: start container with env\nVNEXT_BASE_URL, JMETER_USERS, JMETER_RAMPUP, JMETER_LOOPS
  JMeter->>JMeter: load workflow-test.jmx

  loop For each virtual user and loop iteration
    JMeter->>Engine: POST /instances/start?sync=false\nbody: initiate-account-opening payload
    Engine-->>JMeter: 202 Accepted, instance id

    loop Poll workflow state until status A or max polls
      JMeter->>Engine: GET /instances/{id}
      Engine-->>JMeter: instance status (B, A, C, F)
    end

    alt status A
      JMeter->>Engine: PATCH /transitions/select-demand-deposit?sync=false
      Engine-->>JMeter: 202 Accepted
      JMeter->>Engine: poll instance until status A
      Engine-->>JMeter: status A

      JMeter->>Engine: PATCH /transitions/submit-account-details?sync=false
      Engine-->>JMeter: 202 Accepted
      JMeter->>Engine: poll instance until status A
      Engine-->>JMeter: status A

      JMeter->>Engine: PATCH /transitions/confirm-account-opening?sync=false
      Engine-->>JMeter: final response (not asserted)
    else status F or unexpected C
      JMeter->>JMeter: mark iteration failed\nskip remaining samplers
    end
  end

  JMeter-->>Tester: result.jtl and HTML report in jmeter/results
Loading

Class diagram for new account-opening instance lookup mappings

classDiagram
  class IMapping {
    <<interface>>
    +Task~ScriptResponse~ InputHandler(WorkflowTask task, ScriptContext context)
    +Task~ScriptResponse~ OutputHandler(ScriptContext context)
  }

  class WorkflowTask {
  }

  class GetInstancesTask {
    +void SetFilter(object filter)
  }

  class GetInstanceDataTask {
    +void SetInstance(string instanceId)
  }

  class ScriptContext {
    +dynamic Body
  }

  class ScriptResponse {
    +string Key
    +object Data
  }

  class GetInstancesByOldKeyMapping {
    +Task~ScriptResponse~ InputHandler(WorkflowTask task, ScriptContext context)
    +Task~ScriptResponse~ OutputHandler(ScriptContext context)
  }

  class GetInstanceByOldKeyMapping {
    +Task~ScriptResponse~ InputHandler(WorkflowTask task, ScriptContext context)
    +Task~ScriptResponse~ OutputHandler(ScriptContext context)
  }

  IMapping <|.. GetInstancesByOldKeyMapping
  IMapping <|.. GetInstanceByOldKeyMapping

  WorkflowTask <|-- GetInstancesTask
  WorkflowTask <|-- GetInstanceDataTask

  GetInstancesByOldKeyMapping --> GetInstancesTask : casts task
  GetInstanceByOldKeyMapping --> GetInstanceDataTask : casts task

  GetInstancesByOldKeyMapping --> ScriptContext : reads Body.oldKey
  GetInstanceByOldKeyMapping --> ScriptContext : reads Body.oldKey

  GetInstancesByOldKeyMapping --> ScriptResponse : returns
  GetInstanceByOldKeyMapping --> ScriptResponse : returns
Loading

File-Level Changes

Change Details Files
Add containerized JMeter load test for asynchronous account-opening workflow happy path.
  • Introduce docker-compose.test.yml service that runs an alpine/jmeter container on the existing bbt-development network with configurable base URL and load profile via environment variables.
  • Mount jmeter/tests and jmeter/results into the JMeter container and configure non-GUI test execution to produce JTL and HTML reports.
  • Add workflow-test.jmx test plan that executes the async account-opening happy path, polling workflow instance status between transitions and short-circuiting on failure states.
  • Document load testing structure, commands, environment variables, and scenario in README.md, and ignore jmeter/results in version control.
docker-compose.test.yml
jmeter/tests/workflow-test.jmx
README.md
.gitignore
Enable querying account-opening workflow instances by legacy key through new tasks and mappings.
  • Add get-instance and get-instances workflow task definitions for account-opening to support instance lookup.
  • Implement GetInstanceByOldKeyMapping and GetInstancesByOldKeyMapping C# mappings that read oldKey from the transition body and configure the underlying GetInstanceDataTask/GetInstancesTask, returning structured results with fetchedAt metadata.
  • Wire the new lookup tasks into the account-opening workflow definition to expose instance retrieval capabilities.
core/Tasks/account-opening/get-instance.json
core/Tasks/account-opening/get-instances.json
core/Workflows/account-opening/src/GetInstanceByOldKeyMapping.csx
core/Workflows/account-opening/src/GetInstancesByOldKeyMapping.csx
core/Workflows/account-opening/account-opening-workflow.json
Refine account-opening schemas and clean up minor mapping code style issues.
  • Introduce initiate-account-opening.json schema to validate the start transition payload (e.g., requiring session) for the account-opening workflow.
  • Relax account-type-selection.json schema to allow additional properties, enabling flexible client attributes.
  • Remove stray extra semicolons from FunctionValidatePoliciesMapping and related JSON test configuration for cleaner function definitions.
core/Schemas/account-opening/initiate-account-opening.json
core/Schemas/account-opening/account-type-selection.json
core/Functions/account-opening/src/FunctionValidatePoliciesMapping.csx
core/Functions/account-opening/multi-task-function-test.json

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai

coderabbitai Bot commented Apr 24, 2026

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5b56df86-e2ef-4e64-a38d-af7669f97a77

📥 Commits

Reviewing files that changed from the base of the PR and between b022358 and 7979593.

📒 Files selected for processing (13)
  • .gitignore
  • README.md
  • core/Functions/account-opening/multi-task-function-test.json
  • core/Functions/account-opening/src/FunctionValidatePoliciesMapping.csx
  • core/Schemas/account-opening/account-type-selection.json
  • core/Schemas/account-opening/initiate-account-opening.json
  • core/Tasks/account-opening/get-instance.json
  • core/Tasks/account-opening/get-instances.json
  • core/Workflows/account-opening/account-opening-workflow.json
  • core/Workflows/account-opening/src/GetInstanceByOldKeyMapping.csx
  • core/Workflows/account-opening/src/GetInstancesByOldKeyMapping.csx
  • docker-compose.test.yml
  • jmeter/tests/workflow-test.jmx

📝 Walkthrough

Walkthrough

Introduces comprehensive load testing infrastructure for the account-opening workflow via JMeter, adds new task definitions and workflow mappings for instance retrieval, introduces a new workflow initiation schema, updates workflow task orchestration, and includes supporting configuration and documentation changes.

Changes

Cohort / File(s) Summary
Configuration & Documentation
.gitignore, README.md
Updated .gitignore to properly track jmeter/results/.gitkeep while ignoring results. README adds complete "Load Testing (JMeter)" section documenting test execution, parameters, environment variables, test scenarios, and output locations.
Load Testing Infrastructure
docker-compose.test.yml, jmeter/tests/workflow-test.jmx
New Docker Compose test configuration that runs JMeter service against external bbt-development network. JMeter test plan implements workflow execution loop with instance polling, state transitions, and configurable parameters for load testing the account-opening process.
Workflow Schemas
core/Schemas/account-opening/account-type-selection.json, core/Schemas/account-opening/initiate-account-opening.json
Schema for account-type-selection changed to permit additional properties. New initiate-account-opening schema introduced requiring session and optionally customer.ownerUserId with strict property validation.
Workflow Task Definitions
core/Tasks/account-opening/get-instance.json, core/Tasks/account-opening/get-instances.json
Two new task configurations added: get-instance (type 13) for single instance retrieval by key, and get-instances (type 15) for filtered instance queries, both targeting the account-opening flow.
Workflow Definition & Mappings
core/Workflows/account-opening/account-opening-workflow.json, core/Workflows/account-opening/src/GetInstanceByOldKeyMapping.csx, core/Workflows/account-opening/src/GetInstancesByOldKeyMapping.csx
Workflow timeout extended to 15 minutes. Two new C# mapping classes added: GetInstancesByOldKeyMapping filters instances by oldKey with polling metadata, GetInstanceByOldKeyMapping retrieves single instance by oldKey. Task execution pipeline in account-type-selection transition extended with ordered get-instances and get-instance tasks.
Function & Script Fixes
core/Functions/account-opening/multi-task-function-test.json, core/Functions/account-opening/src/FunctionValidatePoliciesMapping.csx
Updated embedded script in test JSON to handle null httpTask and initialize HTTP body with userId, accountType defaulting, currency, and requestAt. Fixed syntax error (removed redundant semicolon) in validate policies mapping.

Sequence Diagram(s)

sequenceDiagram
    participant JMeter as JMeter Client
    participant API as API Server
    participant WF as Workflow Engine
    participant DB as Data Layer

    JMeter->>API: POST /account-opening/start<br/>(initiate workflow)
    API->>WF: Start workflow instance
    WF->>DB: Create instance
    DB-->>WF: Instance created
    WF-->>API: instanceId
    API-->>JMeter: instanceId, status=A

    JMeter->>API: PATCH /account-opening/:id<br/>(state transition 1)
    API->>WF: Execute transition (get-instances)
    WF->>DB: Query instances by oldKey
    DB-->>WF: Instances list
    WF-->>API: Status updated
    API-->>JMeter: Status updated, status=B

    JMeter->>API: GET /account-opening/:id<br/>(poll state)
    API->>WF: Get instance state
    WF->>DB: Fetch instance
    DB-->>WF: Instance data
    WF-->>API: Current state
    API-->>JMeter: status=B

    Note over JMeter: Poll loop: sleep if status=B,<br/>continue until F/C or pollCount=5

    JMeter->>API: PATCH /account-opening/:id<br/>(state transition 2)
    API->>WF: Execute transition (get-instance)
    WF->>DB: Get instance by oldKey
    DB-->>WF: Instance data
    WF-->>API: Status updated
    API-->>JMeter: Status updated, status=C

    JMeter->>JMeter: Exit poll loop (status=C)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • Example Trigger #1: Modifies the same account-opening workflow and introduces related task mapping classes in the same directory structure.
  • Release v0.0 #7: Updates account-opening workflow with similar task/mapping enhancements and structural changes to the workflow definition.

Suggested reviewers

  • middt

Poem

🐰 Hopping through load tests with glee,
JMeter makes workflows so spree!
New instances dance, old keys aligned,
Mappings and schemas perfectly designed—
Account-opening flows with fifteen-minute grace,
What a bundle of changes, we've picked up the pace!

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch f/sprint24

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@yilmaztayfun yilmaztayfun self-assigned this Apr 24, 2026
@yilmaztayfun
yilmaztayfun merged commit fc80c95 into master Apr 24, 2026
2 of 4 checks passed

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 1 issue, and left some high level feedback:

  • In both GetInstancesByOldKeyMapping and GetInstanceByOldKeyMapping, avoid the null-forgiving cast ((task as ...)!); instead, check the task type and handle unexpected types gracefully to prevent runtime NullReferenceExceptions.
  • Consider explicitly handling a missing or null oldKey in the instance lookup mappings (e.g., returning an empty result or error) rather than passing it straight into SetFilter/SetInstance, as the current behavior with null may be ambiguous.
  • In docker-compose.test.yml, pinning the JMeter image to a specific version instead of alpine/jmeter:latest would make the load test environment more deterministic across runs.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In both `GetInstancesByOldKeyMapping` and `GetInstanceByOldKeyMapping`, avoid the null-forgiving cast (`(task as ...)!`); instead, check the task type and handle unexpected types gracefully to prevent runtime `NullReferenceException`s.
- Consider explicitly handling a missing or null `oldKey` in the instance lookup mappings (e.g., returning an empty result or error) rather than passing it straight into `SetFilter`/`SetInstance`, as the current behavior with `null` may be ambiguous.
- In `docker-compose.test.yml`, pinning the JMeter image to a specific version instead of `alpine/jmeter:latest` would make the load test environment more deterministic across runs.

## Individual Comments

### Comment 1
<location path="docker-compose.test.yml" line_range="6-9" />
<code_context>
+
+services:
+  jmeter:
+    image: alpine/jmeter:latest
+    container_name: jmeter
+    networks:
</code_context>
<issue_to_address>
**suggestion (bug_risk):** Using `latest` JMeter image tag can introduce non-deterministic test behavior over time.

Please pin this to a specific JMeter version (for example `alpine/jmeter:5.6.3`) instead of `latest` to keep CI and local runs reproducible and avoid unexpected changes when the upstream image updates.

```suggestion
  jmeter:
    # Pin JMeter image version to keep CI and local runs reproducible
    image: alpine/jmeter:5.6.3
    container_name: jmeter
    networks:
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread docker-compose.test.yml
Comment on lines +6 to +9
jmeter:
image: alpine/jmeter:latest
container_name: jmeter
networks:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (bug_risk): Using latest JMeter image tag can introduce non-deterministic test behavior over time.

Please pin this to a specific JMeter version (for example alpine/jmeter:5.6.3) instead of latest to keep CI and local runs reproducible and avoid unexpected changes when the upstream image updates.

Suggested change
jmeter:
image: alpine/jmeter:latest
container_name: jmeter
networks:
jmeter:
# Pin JMeter image version to keep CI and local runs reproducible
image: alpine/jmeter:5.6.3
container_name: jmeter
networks:

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a JMeter-based load testing suite for the account-opening workflow, including a new docker-compose configuration, a detailed test plan, and updated documentation. It also adds new workflow tasks and C# script mappings for instance retrieval, alongside minor schema adjustments and code cleanups. Review feedback highlights critical authorization and identity inconsistencies in the JMeter test plan headers and recommends pinning the JMeter Docker image version for stability. Furthermore, suggestions were made to add defensive null checks in the new mapping scripts and to replace thread-blocking sleep calls in the test plan with native JMeter timers to avoid skewing performance results.

<elementProp name="" elementType="Header"><stringProp name="Header.name">user_reference</stringProp><stringProp name="Header.value">34987491018</stringProp></elementProp>
<elementProp name="" elementType="Header"><stringProp name="Header.name">sub</stringProp><stringProp name="Header.value">34987491018</stringProp></elementProp>
<elementProp name="" elementType="Header"><stringProp name="Header.name">act_sub</stringProp><stringProp name="Header.value">34987491780</stringProp></elementProp>
<elementProp name="" elementType="Header"><stringProp name="Header.name">role</stringProp><stringProp name="Header.value">morph-idm.viewers</stringProp></elementProp>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The role morph-idm.viewers (plural) does not match the role morph-idm.viewer (singular) defined in the workflow configuration (account-opening-workflow.json, line 53). This mismatch will likely cause authorization failures during the load test.

              <elementProp name="" elementType="Header"><stringProp name="Header.name">role</stringProp><stringProp name="Header.value">morph-idm.viewer</stringProp></elementProp>

Comment on lines +154 to +157
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header"><stringProp name="Header.name">sub</stringProp><stringProp name="Header.value">349874917801</stringProp></elementProp>
<elementProp name="" elementType="Header"><stringProp name="Header.name">act_sub</stringProp><stringProp name="Header.value">34987491781</stringProp></elementProp>
</collectionProp>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The GET state request headers are missing the role header required by the workflow's queryRoles configuration. Additionally, the sub and act_sub values are inconsistent with those used in the Start Instance sampler (e.g., 349874917801 vs 34987491018), which may lead to permission issues if the workflow engine enforces identity consistency.

Comment on lines +12 to +16
var instanceTask = (task as GetInstanceDataTask)!;

string? oldKey = context.Body?.oldKey?.ToString();

instanceTask.SetInstance(oldKey);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The mapping lacks proper validation for the input task and the oldKey value. If the task cast fails or oldKey is missing from the body, the script will either throw a NullReferenceException or perform an invalid lookup. It is recommended to add defensive checks.

        var instanceTask = task as GetInstanceDataTask;
        if (instanceTask == null)
        {
            return Task.FromResult(new ScriptResponse { Key = "error", Data = "Invalid task type" });
        }

        string? oldKey = context.Body?.oldKey?.ToString();
        if (string.IsNullOrEmpty(oldKey))
        {
            return Task.FromResult(new ScriptResponse { Key = "error", Data = "oldKey is required" });
        }

        instanceTask.SetInstance(oldKey);

Comment thread docker-compose.test.yml

services:
jmeter:
image: alpine/jmeter:latest

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using the latest tag for the JMeter image can lead to non-deterministic builds and potential breaking changes when the image is updated. It is recommended to pin a specific version (e.g., 5.6) to ensure reproducibility.

    image: alpine/jmeter:5.6

<stringProp name="script">def c = (vars.get("pollCount") as Integer) + 1
vars.put("pollCount", c.toString())
def s = vars.get("status")
if ("B".equals(s)) { Thread.sleep(1000) }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using Thread.sleep() in a JSR223 PostProcessor is not recommended in JMeter as it blocks the execution thread, which can skew performance metrics and limit the scalability of the load test. Consider using a Flow Control Action sampler or a Timer for implementing backoff logic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant