README.stress-test.md
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 |