Skip to content

Add APDEX Score support #991

Description

@AntyaDev

References:

Introduce APDEX (Application Performance Index) scoring to NBomber at both the step and scenario level, exposed through the F# and C# Scenario APIs. APDEX condenses latency measurements into a single 0–1 satisfaction score against a user-defined target threshold T (satisfied ≤ T, tolerating ≤ 4T, frustrated > 4T).

Motivation

Users currently reason about performance via raw latency percentiles. An APDEX score gives a single, industry-standard number to gauge whether user-facing transaction latency meets an agreed target — useful for SLAs, dashboards, and pass/fail gating alongside the existing Thresholds mechanism.

API

  • Scenario.WithApdex(target: TimeSpan, includedSteps: string[]?) - Enables scenario-level APDEX with target T. Optional includedSteps restricts which steps' latency contribute; when omitted, all steps are included.
  • Scenario.WithStepApdex(stepName: string, target: TimeSpan) - Enables step-level APDEX for a specific step with its own target.
  • Scenario.WithDefaultStepApdex(target: TimeSpan) - Sets a default target applied to every step that has no explicit WithStepApdex.
  • Scenario.DisableApdex() - Turns APDEX calculation off for the scenario (and its steps).

Key requirements

  • Two levels of APDEX: step-level and scenario-level, computed independently.
  • Scenario APDEX must NOT use total scenario wall-clock duration. It must be derived from user-facing transaction latency — the aggregated step timings per iteration — not the whole-scenario elapsed time.
  • includedSteps filtering controls which steps feed the scenario-level aggregation.
  • Default-vs-explicit step target precedence: explicit WithStepApdex overrides WithDefaultStepApdex.
  • DisableApdex cleanly opts out with no APDEX in results.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions