README.stress-test.md

80 lines | 3.625 kB Blame History Raw Download

Keycloak Performance Testsuite - Stress Testing

Requirements

  • Bash
  • bc: Arbitrary precision calculator.

Stress Test

The performance testsuite contains a stress-testing script: stress-test.sh.

The stress test is implemented as a loop of individual performance test runs. The script supports two algorithms:

  • incremental (default)
  • bisection

The incremental algorithm loop starts from a base load and then increases the load by a specified amount in each iteration. The loop ends when a performance test fails, or when the maximum number of iterations is reached.

The bisection algorithm loop has a lower and an upper bound, and a resolution parameter. In each iteration the middle of the interval is used as a value for the performance test load. Depending on whether the test passes or fails the lower or upper half of the interval is used for the next iteration. The loop ends if size of the interval is lower than the specified resolution, or when the maximum number of iterations is reached.

Usage

export PARAMETER1=value1
export PARAMETER2=value2
...
stress-test.sh [-DadditionalTestsuiteParam1=value1 -DadditionalTestsuiteParam2=value2 ...]

Parameters

Script Execution Parameters

| Variable | Description | Default Value | | --- | --- | --- | | MVN | The base Maven command to be used. | mvn | | KEYCLOAK_PROJECT_HOME | Root directory of the Keycloak project. | Root directory relative to the location of the stress-test.sh script. | | DRY_RUN | Don't execute performance tests. Only print out execution information for each iteration. | false |

Performance Testuite Parameters

| Variable | Description | Default Value | | --- | --- | --- | | DATASET | Dataset to be used. | 1r_10c_100u | | WARMUP_PERIOD | Value of warmUpPeriod testsuite parameter. | 120 seconds | | RAMPUP_PERIOD | Value of rampUpPeriod testsuite parameter. | 60 seconds | | MEASUREMENT_PERIOD | Value of measurementPeriod testsuite parameter. | 120 seconds | | FILTER_RESULTS | Value of filterResults testsuite parameter. Should be enabled. | true | | @ | Any parameters provided to the stress-test.sh script will be passed to the performance testsuite. Optional. | |

Stress Test Parameters

| Variable | Description | Default Value | | --- | --- | --- | | STRESS_TEST_ALGORITHM | Stress test loop algorithm: incremental or bisection. | incremental | | STRESS_TEST_MAX_ITERATIONS | Maximum number of stress test loop iterations. | 10 iterations | | STRESS_TEST_PROVISIONING | Should the system be re-provisioned in each iteration? If enabled the dataset DB dump is re-imported and the warmup is run in each iteration. | false | | STRESS_TEST_PROVISIONING_GENERATE_DATASET | Should the dataset be generated, instead of imported from DB dump? | false | | STRESS_TEST_PROVISIONING_PARAMETERS | Additional parameters for the provisioning command. Optional. | |

Incremental Algorithm

| Variable | Description | Default Value | | --- | --- | --- | | STRESS_TEST_UPS_FIRST | Value of usersPerSec parameter in the first iteration. | 1.000 users per second | | STRESS_TEST_UPS_INCREMENT | Increment of usersPerSec parameter for each subsequent iteration. | 1.000 users per second |

Bisection Algorithm

| Variable | Description | Default Value | | --- | --- | --- | | STRESS_TEST_UPS_LOWER_BOUND | Lower bound of usersPerSec parameter. | 0.000 users per second | | STRESS_TEST_UPS_UPPER_BOUND | Upper bound of usersPerSec parameter. | 10.000 users per second | | STRESS_TEST_UPS_RESOLUTION | Required resolution of the bisection algorithm. | 1.000 users per second |