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.
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
includedStepsfiltering controls which steps feed the scenario-level aggregation.