Voltar para o blog

Número virtual para QA em vários países

Equipe AltiviaCloud · 5 de setembro de 2026 · 4 min de leitura

Seu cadastro funciona no Brasil porque você testou com o seu celular. O que dá para cobrir com número descartável e como encaixar isso no CI sem quebrar o build à toa.

Seu cadastro funciona no Brasil. Você sabe disso porque testou com o seu celular. E na Índia, onde o SMS chega em outro formato? E na Alemanha, onde o serviço manda a mensagem em alemão e o seu regex de extração espera "seu código é"? Ninguém da equipe tem chip desses países, e é aí que a cobertura de teste termina.

O problema real do teste de cadastro

Fluxo de verificação por telefone é o trecho mais difícil de testar de ponta a ponta, por três motivos que se somam:

Precisa de um número que receba de verdade. Mock resolve o teste unitário, não prova que o SMS chega.

Números reais não são descartáveis. O celular da equipe recebe o código uma vez; na segunda o serviço diz "número já cadastrado", e o teste vira manual.

O comportamento muda por país. Formato da mensagem, idioma, prefixo, tempo de entrega, e às vezes o fluxo inteiro.

Número virtual resolve os três: descartável, real, e você escolhe o país.

O que dá para cobrir que hoje não dá

Formato de mensagem por região. Serviços mandam textos diferentes conforme o país. Se você extrai o código com regex, cada variação é um caso de teste — e cada uma quebra em produção sem aviso, porque o serviço mudou o texto e ninguém foi avisado.

Normalização de número. +55 11 91234-5678, 5511912345678, 011912345678. Testar com números de países que usam formatos diferentes encontra bug de normalização que nenhum teste unitário pega, porque no unitário você escreve os dois lados.

Tempo de espera. Seu fluxo assume que o código chega em segundos? Em rota internacional pode levar minutos. Testar com país distante revela um timeout curto demais antes que o usuário revele.

Reenvio e expiração. "Não recebi o código" é o caminho mais usado em produção e o menos testado. Com número descartável dá para exercitar o reenvio de verdade, inclusive o caso de o segundo código chegar antes do primeiro.

Como encaixar no CI

O laço é sempre o mesmo: pedir número, usar, esperar, fechar.

const pedido = await criarPedido({ countryId: "de", serviceId: "meuapp" });

await preencherCadastro(pedido.phoneNumber);

const codigo = await esperarCodigo(pedido.id, pedido.expiresAt);

if (!codigo) {
  await cancelar(pedido.id);       // sem SMS, estorno integral
  throw new Error("SMS não chegou dentro da janela");
}

await preencherCodigo(codigo);
await finalizar(pedido.id);

Três cuidados que separam um teste confiável de um teste chato:

Feche o pedido sempre, inclusive quando o teste falha. Um try/finally em volta. Pedido esquecido expira sozinho e é estornado, mas vinte minutos depois — e enquanto isso ele conta na sua cota.

Limite a espera pelo expiresAt da API, não por um número fixo de tentativas. A API é quem sabe até quando o número vive.

Não rode em cada commit. Cadastro de ponta a ponta é caro em tempo e em saldo. O lugar dele é no pipeline noturno ou antes de release, com os testes rápidos cobrindo o resto.

O que vai falhar de forma intermitente

Vale saber antes de culpar o teste:

Nem todo pedido recebe código. É da natureza do meio — as causas são conhecidas e nenhuma delas é bug seu. Trate "não chegou" como resultado esperado e refaça o pedido, em vez de quebrar o build.

Alguns países são mais instáveis que outros. Se um país específico falha muito, ele não é bom para CI, por melhor que seja o preço. Escolha por estabilidade e mantenha a taxa de conclusão medida por país — o mesmo dado serve para os dois lados.

Rodar em paralelo pode disparar limite. Vinte cadastros simultâneos do mesmo país, no mesmo serviço, parecem exatamente o que o antifraude do serviço procura. Serialize ou espalhe entre países.

Sobre e-mail, que é o mesmo problema

O fluxo de confirmação por e-mail sofre da mesma limitação: caixa real não é descartável, e testar com +alias no Gmail esbarra em serviço que normaliza o endereço. E-mail temporário resolve pelo mesmo motivo que número virtual resolve o SMS.

O ganho que não é óbvio

O benefício maior não é cobrir mais países. É que o teste passa a exercitar o serviço de verdade, não um mock que você escreveu com a sua própria suposição de como ele se comporta. No dia em que o serviço mudar o texto da mensagem — e ele vai mudar, sem avisar — o teste quebra no CI, não no cadastro do seu cliente.

Os países disponíveis estão em números virtuais e os valores, em preços. Pedido que não recebe código não é cobrado.