Forzar una variante concreta de test A/B o feature flag para QA
Los tests A/B y los feature flags son geniales para los equipos de producto y un suplicio para QA. Te asignan un grupo una sola vez, al azar, y luego nunca puedes volver a ver la otra variante. Este artículo muestra cómo tomar el control: encontrar el valor que usa el sitio para asignarte un grupo, sobrescribirlo antes de que la página lo lea y fijar una variante por patrón de URL con una regla de JustZix.
Cómo te asignan los sitios a un grupo
Casi todas las herramientas de experimentación del lado del cliente — Optimizely, GrowthBook, LaunchDarkly, Statsig, Split, montajes caseros — funcionan igual. En tu primera visita lanzan un dado, escriben el resultado en algún sitio persistente y leen ese mismo sitio en cada visita posterior para que tu experiencia se mantenga estable. Ese «sitio persistente» es casi siempre una de tres cosas:
- Una cookie (por ejemplo
ab_variant=Bo un ID de usuario anónimo cuyo hash cae en un grupo). - Una clave de localStorage (habitual con los SDK de GrowthBook y Statsig).
- Una decisión del lado del servidor incrustada en el HTML o devuelta por una llamada a la API.
Las dos primeras puedes sobrescribirlas directamente. La tercera es más difícil — más sobre eso abajo.
Encontrar la clave de asignación
Abre DevTools y ve a la pestaña Application. Bajo Storage tienes Cookies y Local Storage uno al lado del otro. Recarga la página y busca cualquier cosa que parezca un experimento: claves que contengan ab, exp, variant, flag, bucket, test, feature, o el nombre de un proveedor como optimizely o growthbook.
Si no aparece nada obvio, la decisión llega por la red. Abre la pestaña Network, filtra por Fetch/XHR, recarga y busca una petición a algo como /api/flags, /decide o config.json. El JSON de la respuesta te dice los nombres de las variantes y — lo más importante — bajo qué clave las guarda el SDK.
Sobrescribir localStorage antes de que los scripts lo lean
El momento lo es todo. El SDK de experimentación lee su clave pronto, a menudo antes de DOMContentLoaded. Tu regla JS de JustZix debe ejecutarse antes de esa lectura. Configura la regla para que se ejecute en document_start y escribe el valor de inmediato:
// 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' }
}));
Para el enfoque del ID anónimo, elige un ID estable y no aleatorio: la mayoría de los SDK hacen un hash de ese ID para asignar un grupo, así que la misma cadena cae siempre en la misma variante. Prueba varios IDs una vez, anota cuál te da la variante B y reúsalo para siempre.
Sobrescribir una cookie
Las cookies son más sencillas — no hay ningún SDK por medio, solo una cadena. Escríbela en document_start para que los propios scripts de la página vean tu valor:
// 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');
Si la cookie es HttpOnly no puedes tocarla desde JavaScript en absoluto — eso es un flag del lado del servidor, lo vemos a continuación. Puedes confirmarlo en la pestaña Application: las cookies HttpOnly muestran una marca de verificación en esa columna.
Gestionar los flags del lado del servidor
Cuando la variante se decide en el servidor, el HTML que recibes ya es la variante. No hay ningún valor del lado del cliente que cambiar. Tienes dos opciones honestas:
- Enviar una pista que el servidor respete. Muchos montajes leen una cookie de override no-HttpOnly como
x-force-varianto un parámetro de consulta?ab_force=Bprecisamente para que QA pueda probar ramas. Pregunta a tu equipo — estos overrides suelen existir y solo están sin documentar. - Re-maquetar la variante que sí tienes. Si no puedes obtener el marcado real de la variante B, a veces puedes aproximar la diferencia visible con una regla CSS para capturas — pero eso es una maqueta, no un test real. Úsalo solo para revisión de diseño, nunca para QA funcional.
Un override por parámetro de consulta es el camino más limpio. Si tu sitio admite ?ff_override=new-checkout:true, ni siquiera necesitas JavaScript — basta con guardar la URL en marcadores.
Fijar una variante por patrón de URL
La verdadera ventaja con JustZix es el acotado. No quieres que todos los sitios reciban la misma asignación — quieres este entorno de staging fijado a la variante B y aquel sin tocar. Crea una regla con un patrón de URL ajustado:
URL pattern: https://staging.example.com/*
JS (document_start):
localStorage.setItem('exp_checkout', 'variant-b');
document.cookie = 'ab_force=B; path=/';
Haz una regla por variante — «Fijar checkout A», «Fijar checkout B», «Fijar control» — y conmútalas desde la barra de acciones. Una pasada de QA por las tres ramas se convierte en tres clics en lugar de tres ventanas de incógnito y mucha suerte.
Verificar que la variante realmente se aplicó
No confíes en que el override funcionó solo porque la página se ve diferente. Confírmalo. La mayoría de los SDK exponen la asignación activa en algún sitio — regístrala desde la Consola de Salida:
// 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 });
});
Combínalo con la ventana de la Consola de Salida para que la asignación sea visible dentro de la pestaña mientras recorres el flujo. Si el SDK reporta la variante que forzaste, tu test es real. Si reporta otra cosa, tu regla se ejecutó demasiado tarde — pásala a document_start.
Errores habituales
- Ejecutarse demasiado tarde. Una regla en
document_idlepierde la carrera. El SDK ya ha leído su clave. Usa siempredocument_startpara los overrides de asignación. - Olvidar la mitad del servidor. Has fijado la variante del cliente pero el servidor sigue renderizando el control. Busca una cookie o parámetro de override.
- Contaminar la analítica. Las sesiones forzadas distorsionan los resultados del experimento. Usa un entorno de staging o pide a tu equipo de datos que excluya el tráfico de QA.
- Cachés obsoletas. Algunos SDK cachean la decisión durante horas. Limpia primero la clave de storage relevante y luego pon tu valor forzado.
Mira también
- Simular respuestas de API interceptando fetch — falsea el endpoint del flag en lugar de la clave de storage.
- Reglas basadas en el tiempo — programa qué variante se fija según el día o la hora.
- Casos de uso de JustZix — más flujos de QA y depuración.
Deja de depender de ventanas de incógnito y dados afortunados. Instala JustZix, crea una regla por variante y recorre cada rama de cada experimento bajo demanda.
Valora este artículo
Sin valoraciones — sé el primero.