# Exemplos em JavaScript - Teste A/B

Configura um teste A/B na rede global da Azion, entregando uma de duas respostas e memorizando o grupo de cada visitante em um cookie. Use esse padrão para executar experimentos randomizados, como comparar duas variantes de página, sem enviar tráfego a uma origem para decidir qual versão exibir.

```js
function handleRequest(request) {
  const NAME = "TestA/B"
  const TEST_RESPONSE = new Response("Cookie A")
  const CONTROL_RESPONSE = new Response("Cookie B")

  const cookie = request.headers.get("cookie")
  if (cookie && cookie.includes(`${NAME}=a`)) {
    return CONTROL_RESPONSE
  }
  else if (cookie && cookie.includes(`${NAME}=b`)) {
    return TEST_RESPONSE
  }
  else {
    const group = Math.random() < 0.5 ? "test" : "control"
    const response = group === "control" ? CONTROL_RESPONSE : TEST_RESPONSE
    response.headers.append("Set-Cookie", `${NAME}=${group}; path=/`)

    return response
  }
}

addEventListener("fetch", event => {
  event.respondWith(handleRequest(event.request))
})
```

## Como funciona

O handler do evento `fetch` lê o cabeçalho `Cookie` da requisição com `request.headers.get("cookie")`. Se o visitante já possui o cookie do teste, a função retorna a variante correspondente para manter a experiência consistente entre as requisições. Para novos visitantes, `Math.random()` distribui o grupo de teste ou controle em aproximadamente 50/50, e `response.headers.append("Set-Cookie", ...)` persiste essa escolha para que a mesma variante seja servida nas próximas visitas.

## Recursos relacionados

- [Exemplos em JavaScript](/pt-br/documentacao/devtools/javascript-exemplos/)
- [Runtime APIs](/pt-br/documentacao/produtos/applications/functions/runtime-apis/javascript/fetch-event/)


---