Início/Casos de uso e operações/Automação de apps móveis em dispositivos reais

Automação de apps móveis em dispositivos reais

Construa uma automação de apps móveis fiável em dispositivos reais com Appium, ADB, UIAutomator e XCUITest, além de soluções para instabilidade, paralelização da frota e integração com CI.

Last updated 2026-07-15 · 5 min read

A automação de apps móveis em dispositivos reais usa frameworks como Appium, ADB, UIAutomator e XCUITest para conduzir telemóveis físicos através de fluxos repetíveis. Executar sobre hardware real — e paralelizar numa frota — dá-lhe uma cobertura de regressão e um sinal de desempenho que os emuladores não conseguem igualar.

Key points
  • The core stacks are Appium (cross-platform), UIAutomator/Espresso and ADB (Android), and XCUITest (iOS); scrcpy is invaluable for observing and debugging Android runs.
  • Prefer written, versioned scripts over record-and-playback for anything you will maintain; recording is fine for one-off exploration.
  • Flakiness is the main enemy — solve it with explicit waits and stable selectors, not sleeps.
  • A fleet's value is parallelization: shard suites across devices to keep wall-clock time low.
  • Wire automation into CI so every build runs against a real-device core tier.

A pilha de automação

Appium

O Appium é a opção multiplataforma mais comum. Expõe o protocolo W3C WebDriver, pelo que se escrevem os testes na linguagem à escolha e se controla Android e iOS através de uma única API. Por baixo, o Appium delega em motores de automação específicos de cada plataforma — UIAutomator2/Espresso no Android, XCUITest no iOS — obtendo-se assim um controlo nativo com uma interface portátil. É adequado para equipas que querem um único framework e uma única base de testes em todas as plataformas.

ADB (Android Debug Bridge)

O ADB é o canivete suíço do Android. Além de instalar e iniciar apps, executa ações ao nível da shell: conceder permissões, configurar rede e idioma, simular eventos de entrada, capturar o logcat, extrair capturas de ecrã, alternar o modo avião e preparar condições para os testes. A maior parte da automação em Android apoia-se no ADB para a configuração inicial, a limpeza final e o controlo do estado do dispositivo, mesmo quando o controlo da UI é feito através de outro framework.

UIAutomator e Espresso

Para equipas que trabalham só com Android, o Espresso (em processo, de caixa branca, rápido e estável) cobre a UI da própria app, enquanto o UIAutomator trata das interações entre apps e com a UI do sistema (notificações, diálogos de permissões, definições). São frequentemente usados em conjunto.

XCUITest

O XCUITest é o framework nativo de UI da Apple, executado através do Xcode. É a via mais fiável para a automação de UI em iOS e é o que o Appium usa por baixo no iOS. Para o comportamento específico de cada plataforma e as diferenças de configuração, consulte frotas de iOS vs Android.

scrcpy

O scrcpy espelha e controla um dispositivo Android por USB ou TCP/IP com baixa latência. Não é um framework de testes, mas é a forma mais rápida de observar uma execução automatizada, reproduzir uma falha de forma interativa e depurar seletores em direto.

Comparison
Appium vs going native — a coverage vs speed trade-off
Appium (cross-platform)Native (Espresso / XCUITest)
CodebaseOne test suite, both platformsSeparate suite per platform
Speed & stabilityGood, one layer of indirectionFastest, most stable on its platform
System UI accessVia UIAutomator delegationDirect (UIAutomator/XCUITest)
Best fitSmall team, shared flowsPlatform-specific team, max reliability
Appium trades some per-platform speed for one codebase across iOS and Android; native frameworks trade a shared codebase for maximum speed and stability on one platform.

Script versus gravação

As ferramentas de gravação e reprodução geram um script capturando os seus toques. São atrativas para um primeiro rascunho ou uma verificação pontual, mas os scripts gravados tendem a ser frágeis: fixam coordenadas ou seletores pouco robustos e não têm a estrutura necessária para se manterem à escala.

Os scripts escritos à mão são a melhor opção para tudo o que seja duradouro. Permitem usar localizadores estáveis (IDs de acessibilidade, IDs de recursos), extrair passos reutilizáveis, parametrizar dados, adicionar asserções e manter tudo sob controlo de versões junto com a app. Um caminho intermédio prático é gravar para explorar e depois reescrever os fluxos úteis como código sustentável, com seletores e esperas adequados.

Combater a instabilidade e a sincronização

Os testes instáveis destroem a confiança numa suite. Em dispositivos reais os tempos são genuinamente variáveis — a latência de rede, as animações e a carga em segundo plano oscilam todas —, pelo que a solução é uma sincronização disciplinada.

  • Nunca use esperas fixas como mecanismo de espera principal. Substitua-as por esperas explícitas que verificam uma condição (elemento presente, visível, ativado) até um tempo limite.
  • Use seletores estáveis. Prefira os identificadores de acessibilidade e os IDs de recursos a um XPath por texto ou índice, que se quebra com alterações de conteúdo e de layout.
  • Espere pelo estado da app, não pelo relógio. As condições de inatividade, os sinais de quiescência de rede e os estados dos elementos são mais fiáveis do que adivinhar uma duração.
  • Controle o ambiente. Reinicie o estado da app entre testes, semeie dados conhecidos, desative as animações sempre que possível e fixe o idioma/fuso horário para que as execuções sejam determinísticas.
  • Coloque em quarentena e repita com critério. Isole os testes conhecidos por serem instáveis, adicione repetições limitadas para os passos genuinamente não determinísticos e acompanhe as taxas de falhas intermitentes para corrigir as causas raiz em vez de as mascarar.

Paralelização numa frota

Um único dispositivo executa os testes em série; uma frota executa-os em paralelo. Esta é a principal razão para automatizar sobre hardware físico a grande escala.

O sharding divide o conjunto de testes entre dispositivos, de modo que o tempo total diminui de forma aproximadamente linear com o número de dispositivos. Pode fazer sharding por teste (distribuindo os casos de forma uniforme) ou por célula de matriz (cada dispositivo fica responsável por uma combinação de SO/modelo dos seus níveis de cobertura).

Requisitos práticos para execuções paralelas limpas:

AspetoAbordagem
Endereçamento de dispositivosIDs/números de série estáveis por dispositivo; um registo que associa dispositivos a capacidades
IsolamentoUma sessão por dispositivo; reinício do estado da app entre execuções
AlocaçãoUm agendador que cede dispositivos livres a tarefas e evita reservas duplicadas
FiabilidadeVerificações de saúde para que os dispositivos inativos ou offline sejam ignorados, e não contados como falha

Coordenar cedências, filas e escalonamento é tarefa de uma camada de orquestração — consulte agendamento e orquestração. Manter os dispositivos suficientemente saudáveis para confiar nos resultados é abordado em monitorização e saúde da frota.

Integração com CI

A automação gera valor quando é executada automaticamente. O padrão típico:

Architecture
From CI trigger to a leased device to a test report
1CI trigger
New build artifact
2Scheduler
Leases a matching device
3Device pool
Core-tier real hardware
4Test run
Appium / XCUITest / Espresso
5Results
Logs, screenshots, report
A build triggers the pipeline; the scheduler leases a matching device from the pool; results and artifacts flow back to CI.
  1. Compilar o artefacto da app em CI.
  2. Aprovisionar um dispositivo da frota através do agendador (ceder um dispositivo do nível principal que corresponda à célula de matriz alvo).
  3. Instalar e executar a suite no dispositivo cedido.
  4. Recolher artefactos — registos (logcat/syslog), capturas de ecrã ou vídeo, e um relatório de testes estruturado.
  5. Bloquear o pipeline com base no nível principal; executar uma cobertura mais ampla numa cadência noturna ou pré-lançamento para manter o feedback dos PR rápido.

Mantenha o aprovisionamento de dispositivos sob a responsabilidade do agendador em vez de fixar números de série no pipeline, para que os trabalhos de CI se coloquem em fila de forma ordenada quando os dispositivos estão ocupados e nunca colidam.

Note

Regra geral: bloqueie cada build com uma suite do nível principal pequena, rápida e estável. Deixe a matriz ampla e lenta para execuções noturnas ou de lançamento. Isto mantém o feedback aos programadores ágil sem sacrificar a cobertura.

Perguntas frequentes

Devo usar Appium ou frameworks nativos?
Se precisar de uma única base de código para iOS e Android, o Appium é a opção pragmática por defeito. Se trabalhar apenas com Android e quiser a máxima velocidade e estabilidade para a sua própria app, o Espresso (juntamente com o UIAutomator para a UI do sistema) é excelente. As equipas que trabalham só com iOS costumam optar diretamente pelo XCUITest.
Porque é que os meus testes passam localmente mas falham na frota?
Normalmente é uma questão de tempos e de estado. As execuções locais são mais "silenciosas", pelo que os pressupostos implícitos sobre velocidade se verificam; sob carga paralela da frota, a latência varia. Substitua as esperas fixas por esperas de condição explícitas, reinicie o estado da app entre testes e fixe o idioma/fuso horário.
Quanto mais rápida é a execução em paralelo?
Aproximadamente linear em relação ao número de dispositivos, para testes bem fragmentados e independentes; dez dispositivos podem reduzir o tempo total de uma suite executada em série para quase um décimo, menos a sobrecarga de agendamento. Os ganhos diminuem se os testes partilharem estado ou se o agendador reservar o mesmo dispositivo duas vezes.
Posso automatizar funcionalidades de hardware como a câmara ou o GPS?
Em parte. O ADB e as APIs dos frameworks permitem simular coordenadas GPS e conceder permissões, e em algumas configurações é possível injetar imagens de teste, mas o comportamento ótico e dos sensores real continua a exigir verificações manuais ou semiautomatizadas em dispositivos reais.
See also

© 2026 phonefarm.net. All original content, diagrams, and infographics on this site are our own work. Please do not copy, reproduce, or redistribute them without permission.

Consulting & fleet builds