File size: 845 Bytes
dfb775d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | """A/B traffic Splitter."""
from __future__ import annotations
from mindxtrain.deploy.ab_test import AbConfig, Splitter
def test_zero_canary_pct_always_live():
s = Splitter(AbConfig(canary_pct=0.0))
for i in range(100):
assert s.pick(f"r-{i}") == "live"
def test_full_canary_pct_always_canary():
s = Splitter(AbConfig(canary_pct=1.0))
for i in range(100):
assert s.pick(f"r-{i}") == "canary"
def test_deterministic_per_request_id():
s = Splitter(AbConfig(canary_pct=0.5))
a = s.pick("request-42")
b = s.pick("request-42")
assert a == b
def test_split_distribution_roughly_canary_pct():
s = Splitter(AbConfig(canary_pct=0.2))
n = 2000
canary = sum(1 for i in range(n) if s.pick(f"req-{i}") == "canary")
# 20% +/- a generous band.
assert 0.10 * n <= canary <= 0.30 * n
|