← Wszystkie wpisy

Poradniki

Wymuś konkretny wariant testu A/B lub feature flagi na potrzeby QA

Testy A/B i feature flagi są świetne dla zespołów produktowych i męczące dla QA. Trafiasz do kubełka raz, losowo, i potem nigdy więcej nie zobaczysz drugiego wariantu. Ten artykuł pokazuje, jak przejąć kontrolę: znaleźć wartość, której strona używa do przypisania kubełka, nadpisać ją zanim strona ją odczyta i przypiąć wariant per wzorzec URL za pomocą reguły JustZix.

Jak strony przypisują Cię do kubełka

Niemal każde narzędzie do eksperymentów po stronie klienta — Optimizely, GrowthBook, LaunchDarkly, Statsig, Split, rozwiązania własne — działa tak samo. Przy pierwszej wizycie rzuca kostką, zapisuje wynik gdzieś trwale i odczytuje to samo miejsce przy każdej kolejnej wizycie, aby Twoje doświadczenie pozostało stabilne. To „gdzieś trwale” to prawie zawsze jedna z trzech rzeczy:

Dwie pierwsze możesz nadpisać bezpośrednio. Trzecia jest trudniejsza — więcej o tym poniżej.

Znajdowanie klucza przypisania do kubełka

Otwórz DevTools i przejdź do zakładki Application. W sekcji Storage masz obok siebie Cookies i Local Storage. Przeładuj stronę i poszukaj czegokolwiek, co wygląda jak eksperyment: kluczy zawierających ab, exp, variant, flag, bucket, test, feature albo nazwę dostawcy w stylu optimizely czy growthbook.

Jeśli nic oczywistego się nie pojawia, decyzja przychodzi przez sieć. Otwórz zakładkę Network, przefiltruj do Fetch/XHR, przeładuj i poszukaj żądania do czegoś w stylu /api/flags, /decide lub config.json. JSON odpowiedzi mówi Ci, jakie są nazwy wariantów i — co najważniejsze — pod jakim kluczem SDK je przechowuje.

Nadpisywanie localStorage zanim skrypty go odczytają

Liczy się czas. SDK do eksperymentów odczytuje swój klucz wcześnie, często przed DOMContentLoaded. Twoja reguła JS w JustZix musi uruchomić się przed tym odczytem. Ustaw regułę tak, aby uruchamiała się na document_start, i zapisz wartość natychmiast:

// Pin the GrowthBook-style variant before the SDK initialises
const KEY = 'gb_anonymous_id';      // the bucketing key you found
const FORCED = 'qa-pinned-variant-b';

// Overwrite whatever value the SDK would have rolled
localStorage.setItem(KEY, FORCED);

// Some SDKs cache a whole decision object — pin that too
localStorage.setItem('growthbook_features', JSON.stringify({
  'new-checkout': { defaultValue: true },
  'pricing-table-v2': { defaultValue: 'variant-b' }
}));

Przy podejściu z anonimowym identyfikatorem wybierz stabilny, nielosowy ID: większość SDK haszuje ten ID do kubełka, więc ten sam ciąg znaków zawsze trafia do tego samego wariantu. Przejdź raz przez kilka identyfikatorów, zanotuj, który daje wariant B, i używaj go już zawsze.

Nadpisywanie cookie

Cookies są prostsze — nie ma żadnego SDK po drodze, tylko ciąg znaków. Zapisz go na document_start, aby skrypty strony zobaczyły Twoją wartość:

// Force the experiment cookie for this domain
function setCookie(name, value) {
  document.cookie =
    name + '=' + value + '; path=/; max-age=31536000; SameSite=Lax';
}

setCookie('ab_variant', 'B');
setCookie('feature_new_nav', 'on');

Jeśli cookie jest oznaczone jako HttpOnly, w ogóle nie dotkniesz go z poziomu JavaScriptu — to flaga po stronie serwera, omówiona dalej. Możesz to potwierdzić w zakładce Application: cookies HttpOnly mają zaznaczone pole w tej kolumnie.

Obsługa flag po stronie serwera

Gdy wariant jest decydowany na serwerze, HTML, który otrzymujesz, jest już wariantem. Nie ma żadnej wartości po stronie klienta do przełączenia. Masz dwie uczciwe opcje:

Nadpisanie przez parametr zapytania to najczystsza droga. Jeśli Twoja strona obsługuje ?ff_override=new-checkout:true, nie potrzebujesz nawet JavaScriptu — wystarczy dodać URL do zakładek.

Przypinanie wariantu per wzorzec URL

Prawdziwa zaleta JustZix to ograniczanie zasięgu. Nie chcesz, aby każda strona była przypisana do kubełka tak samo — chcesz, aby to środowisko staging było przypięte do wariantu B, a tamto zostawione w spokoju. Utwórz regułę z wąskim wzorcem URL:

URL pattern:  https://staging.example.com/*
JS (document_start):
  localStorage.setItem('exp_checkout', 'variant-b');
  document.cookie = 'ab_force=B; path=/';

Zrób jedną regułę na wariant — „Przypnij checkout A”, „Przypnij checkout B”, „Przypnij kontrolę” — i przełączaj je z paska akcji. Przejście QA przez wszystkie trzy gałęzie staje się trzema kliknięciami zamiast trzech okien incognito i sporej dawki szczęścia.

Sprawdzanie, czy wariant faktycznie zadziałał

Nie ufaj, że nadpisanie zadziałało tylko dlatego, że strona wygląda inaczej. Potwierdź to. Większość SDK gdzieś udostępnia aktywne przypisanie — zaloguj je z Output Console:

// Read back what the SDK decided, after it initialised
window.addEventListener('load', () => {
  // GrowthBook example
  if (window.growthbook) {
    console.log('Active features:', window.growthbook.getFeatures());
  }
  // Generic: dump every storage key for the audit trail
  console.log('Forced storage:', { ...localStorage });
});

Połącz to z oknem Output Console, aby przypisanie było widoczne w karcie, gdy klikasz przez przepływ. Jeśli SDK raportuje wariant, który wymusiłeś, Twój test jest prawdziwy. Jeśli raportuje coś innego, Twoja reguła uruchomiła się za późno — przesuń ją na document_start.

Częste pułapki

Zobacz też

Przestań polegać na oknach incognito i szczęśliwych rzutach kostką. Zainstaluj JustZix, zbuduj jedną regułę na wariant i przerabiaj każdą gałąź każdego eksperymentu na żądanie.

Oceń ten wpis

Brak ocen — oceń jako pierwszy.

Wypróbuj samodzielnie

Zainstaluj JustZix i wklej dowolny snippet z tego artykułu. Dwie minuty od zera do działającej reguły na wszystkich Twoich urządzeniach.

Pobierz JustZix

Funkcje · Jak to działa · Przykłady · Zastosowania