ab-test-middleware
A middleware that provides an easy way to serve multiple distributions in order to run A/B/N tests.
NOTE: The middleware expects a set of production ready distributions to be built prior to using it on an app.
Usage (the TL;DR version)
Assuming your distributions are built already and available in your build
folder.
I suggest using navikt/ab-test/actions/build@v1
if you're running your deployments by means of GitHub Actions.
The build
folder should be created with the following structure:
build/
├── release-v1.0.0
├── new-design
├── ...
└── login-button-placement
const express = ;const createAbTestMiddleware = ; const app = ; /*** A function to assign a test group to an inconming request.* @param* to know whether to assign that particular distribution to the request or not. * A cookie will be set in the response if the function returns a true value. * @returns * to the distribution's test group. */const testGroupToggleInterpreter = { let enabled = false; // Write your logic here. Alternately make use of a feature toggle mechanism here. return enabled;} /*** A function that checks whether distributions are enabled and should be servable.* @param* whether that particular distribution is enabled or not. Disabled distributions* will not be served and lead to the re-assignation of a request to a different distribution. * @returns */const distributionToggleInterpreter = { let enabled = false; // Write your logic here. Alternately make use of a feature toggle mechanism here. return enabled;} app; app;
Note:
If the randomizeTestGroupDistribution
flag is omitted or set to false
, it will result in
an alphabetically ordered loop when assigning test groups to requests in the middleware.
It is highly recommended to set this flag to true in cases where the testGroupToggleInterpreter
does not account for randomization or does not count on a persistent distribution assignation
tracking mechanism such as a feature toggle service.