stamatios
← Voltar ao feed
Robô testa cada etapa de uma interface móvel com visão computacional na Shopify
Dev & Engenharia · Produto & Design

Shopify eleva estabilidade dos testes móveis E2E a 98%

resumo de ~3 min

O problema da instabilidade

A suíte de testes móveis de ponta a ponta (E2E) do aplicativo Shopify havia se tornado um obstáculo: falhava com mais frequência em alterações corretas do que em alterações problemáticas. Os testes, executados como verificações bloqueadoras no CI a cada pull request, foram retirados desse fluxo porque telas que demoravam um pouco mais para carregar geravam falhas intermitentes. Com a API antiga, a estabilidade era de 50%.

Desde 2023, os testes usavam Appium por meio do WebdriverIO e localizavam elementos com React Native Test IDs. Embora essa abordagem oferecesse controle de baixo nível, ela não impunha boas práticas. Um teste podia tentar interagir com o elemento seguinte antes de a nova tela terminar de renderizar. Para contornar isso, a equipe adicionava esperas explícitas ou pausas fixas, como pause(1000), que pareciam funcionar localmente, mas falhavam quando o carregamento demorava mais no CI. Além disso, muitos testes verificavam apenas a existência de um nó na árvore de componentes, e não se o comerciante conseguia realmente ver ou usar o elemento.

A reconstrução do framework

Em vez de continuar corrigindo o Appium, a Shopify criou uma camada restritiva sobre ele. O novo framework combina uma API no estilo construtor, que dificulta a criação de testes instáveis, com visão computacional para localizar elementos como um usuário os encontraria. O Appium continua controlando o dispositivo, mas os desenvolvedores não acessam diretamente suas funções que contribuíram para as falhas anteriores.

Cada ação precisa incluir uma afirmação sobre o estado esperado da tela. Assim, se o aplicativo não chegar ao estado correto, o teste falha no passo em que a divergência ocorre, e não várias ações depois. O framework também oferece sequências reutilizáveis, como logIntoApp, e marca opções que ignoram as proteções com o prefixo UNSAFE_, sinalizando que seu uso deve ser revisado. A API tem poucos comandos e uma gramática previsível, o que, segundo a Shopify, facilita a criação de testes tanto por pessoas quanto por ferramentas de IA.

A localização visual usa o PaddleOCR para textos e o OpenCV para comparar capturas de tela com SVGs do sistema de design Polaris. Test IDs continuam disponíveis como alternativa para conteúdo gerado que dificulte a correspondência visual, mas seu uso é opcional e também marcado como inseguro. Cada execução gera um vídeo anotado, mostrando o que o teste procurou, onde procurou e o que encontrou, o que ajuda a diagnosticar falhas sem repetir a execução.

Resultados e próximos passos

O mesmo comando de execução funciona em um computador, em um emulador no CI ou em dispositivos reais por uma fazenda remota. Algumas semanas após a nova API entrar no CI bloqueador do aplicativo Shopify, a estabilidade chegou a 98%, calculada como o número de sucessos individuais dividido pelo total de execuções, contra 50% na API anterior. As falhas restantes são atribuídas principalmente a problemas ocasionais de rede e a simuladores que não inicializam corretamente.

A equipe também criou uma barreira de instabilidade antes da promoção: um novo teste é executado várias vezes e rejeitado se ultrapassar um limite de falhas. Após validar o framework no maior aplicativo da empresa, a Shopify avalia adotá-lo em outros aplicativos. A conclusão apresentada é que parte relevante da instabilidade estava na API, e não nos testes, e que uma interface restritiva, afirmações em cada etapa e localização baseada na tela podem tornar o E2E confiável o bastante para voltar a bloquear alterações ruins sem impedir as boas.