Smoke Test (teste de fumaça) é um conjunto mínimo de verificações executadas após uma compilação de aplicativo móvel para confirmar que as funções principais estão funcionando. Um Smoke Test permite rejeitar rapidamente compilações instáveis sem realizar um ciclo completo de regressão. De acordo com o Google Testing Blog (2024), um Smoke Test reduz o tempo de feedback para o desenvolvedor de 2–3 horas para 10–15 minutos. Smoke Test é o primeiro filtro de qualidade no pipeline CI/CD que impede que compilações quebradas cheguem ao próximo estágio.
Principais pontos
Smoke Test é um conjunto de testes rápidos que verificam as funções principais de um aplicativo sem análise profunda. O termo vem da engenharia de hardware: se um dispositivo começa a soltar fumaça após a montagem, ele não é enviado para testes completos. No desenvolvimento móvel, o Smoke Test cumpre a mesma função — filtrar compilações obviamente não funcionais. De acordo com a Microsoft DevOps (2024), a implementação de um Smoke Test reduz o número de defeitos que chegam à equipe de QA em 40%.
Um Smoke Test é executado em cada nova compilação — tanto Android quanto iOS. Idealmente, um Smoke Test não deve levar mais de 15 minutos e deve ser iniciado automaticamente após uma compilação bem-sucedida. Critério de aprovação — 100% dos testes do conjunto Smoke Test devem ser concluídos com sucesso. Se pelo menos um teste falhar, a compilação é marcada como instável e não é enviada para testes adicionais. De acordo com o Google Testing Blog (2024), essa abordagem reduz o tempo de entrega de funcionalidades aos usuários em 25%.
Um Smoke Test pode ser manual (uma lista de verificação de 5 a 10 itens) ou automatizado. Em projetos móveis modernos, a preferência é dada a um Smoke Test automatizado integrado ao CI/CD. Smoke Test manual é justificado apenas nos estágios iniciais do projeto, quando a automação não é economicamente viável. De acordo com a Bitrise (2025), 73% das equipes de desenvolvimento móvel automatizam seus Smoke Tests.
Smoke Test e teste de regressão são frequentemente confundidos, mas são práticas diferentes com objetivos diferentes. O teste de regressão verifica se as alterações no código não quebraram a funcionalidade existente. Ele cobre todos os módulos e cenários do aplicativo, incluindo casos raros e de borda. Um Smoke Test verifica apenas o caminho crítico — os cenários principais sem os quais o aplicativo é inútil. Profundidade de cobertura é a principal diferença: Smoke Test cobre 5–10% da funcionalidade, a regressão cobre 80–100%.
A segunda diferença é o tempo de execução. Um conjunto de regressão para um aplicativo móvel pode levar de 2 a 12 horas, dependendo do tamanho do projeto e do número de plataformas. Um Smoke Test leva de 5 a 15 minutos. De acordo com a Sauce Labs (2025), o tempo médio de execução de um conjunto de regressão para um aplicativo iOS é de 4,5 horas, e para Android — 3,2 horas. Um Smoke Test em ambas as plataformas é concluído em 10–15 minutos.
A terceira diferença é a colocação no pipeline. Um Smoke Test é executado imediatamente após a compilação, antes do teste de regressão. Se o Smoke Test falhar, a regressão não é iniciada — isso economiza recursos de CI/CD. Eficiência do pipeline — um Smoke Test filtra até 30% das compilações que teriam falhado na regressão, e os recursos economizados são suficientes para executar outras tarefas em paralelo.
| Parâmetro | Smoke Test | Teste de regressão |
|---|---|---|
| Objetivo | Verificação rápida do caminho crítico | Verificação de toda a funcionalidade |
| Escopo | 5–10% dos cenários | 80–100% dos cenários |
| Tempo | 5–15 minutos | 2–12 horas |
| Frequência | Cada compilação | Antes do lançamento ou diariamente |
| CI/CD | Após compilação, antes da regressão | Após Smoke Test |
Inicialização do aplicativo — o primeiro e mais importante teste. O aplicativo deve iniciar sem falhas em todos os dispositivos alvo. Um Smoke Test verifica a inicialização a frio: instalar → abrir → exibir a primeira tela. Se o aplicativo falhar ao iniciar, os testes adicionais são inúteis. XCUITest e Espresso permitem automatizar a verificação de inicialização em 2–3 linhas de código. Argumento de inicialização `-AppleLanguages (ru)` ajuda a verificar a localização na inicialização.
Autenticação — o segundo cenário crítico. Um Smoke Test deve verificar se o formulário de login é exibido, os campos de entrada respondem ao toque, o botão de login envia uma solicitação e o aplicativo navega para a tela principal após autenticação bem-sucedida. Um erro de autenticação bloqueia o acesso a todas as outras funções, portanto sua verificação está incluída no conjunto mínimo. Token refresh — uma verificação adicional para aplicativos com OAuth 2.0.
Carregamento de conteúdo principal — o terceiro teste do Smoke Test. A tela principal ou feed do aplicativo deve carregar e exibir dados. Se a API não responder ou a análise da resposta estiver quebrada, o usuário vê uma tela vazia. A verificação de rede em um Smoke Test inclui uma solicitação GET básica ao endpoint principal e a verificação de que a resposta tem a estrutura esperada. Navegação — o quarto cenário. Um Smoke Test navega pelas principais telas do aplicativo: início → pesquisa → perfil → configurações. A barra de guias e o menu lateral são fontes típicas de problemas de navegação que um Smoke Test detecta precocemente.
Fastlane — a ferramenta padrão para automatizar CI/CD móvel. Um Smoke Test no Fastlane é executado via `scan` (para XCUITest) ou `gradle` (para Espresso). Fastlane permite configurar a execução do Smoke Test em vários dispositivos em paralelo, reduzindo o tempo total. Configuração no Fastfile inclui o destino do conjunto Smoke Test e um limite de aprovação: 100% de testes bem-sucedidos.
GitHub Actions (2024) publicou um modelo de CI/CD móvel com um Smoke Test integrado. O modelo inclui três estágios: compilação → Smoke Test → regressão. Se o Smoke Test falhar, o modelo encerra automaticamente o pipeline e envia uma notificação para Slack ou Telegram. Matrix strategy permite executar o Smoke Test em três versões do iOS e cinco modelos Android simultaneamente.
Divisão de responsabilidades em CI/CD: o Smoke Test fornece feedback rápido, enquanto a regressão fornece cobertura completa. O Smoke Test não deve duplicar a regressão, e vice-versa. Granularidade do Smoke Test — uma verificação por cenário crítico. Se um Smoke Test levar mais de 15 minutos, ele precisa ser otimizado: remover verificações redundantes ou paralelizar a execução.
# Configuração do Fastfile para Smoke Test
platform :ios do
lane :smoke do
scan(
scheme: 'App',
devices: ['iPhone 15', 'iPhone SE'],
testplan: 'SmokeTest',
output_directory: 'reports/smoke',
fail_build: true
)
end
lane :regression do
scan(
scheme: 'App',
devices: ['iPhone 15', 'iPhone 14', 'iPhone SE'],
testplan: 'FullRegression'
)
end
end
XCUITest — o framework da Apple para testes de UI em aplicativos iOS. XCUITest é usado para automatizar Smoke Tests: iniciar o aplicativo, verificar elementos da interface, simular ações do usuário. Combinado com Xcode Server ou GitHub Actions, o XCUITest é executado em cada commit. XCTest — o framework base para testes unitários que complementa o XCUITest para verificação de lógica.
Espresso — o framework do Google para testes de UI no Android. O Espresso sincroniza com a thread de UI e garante que todas as animações sejam concluídas antes de iniciar a verificação. O Espresso suporta verificação via `onView(withId(...)).check(matches(...))`. Android Test Orchestrator executa cada Smoke Test em um processo separado, evitando que testes anteriores influenciem os subsequentes.
Detox — um framework para React Native que suporta Smoke Test e testes de caixa cinza. O Detox sincroniza com a ponte do React Native e aguarda automaticamente a conclusão de operações assíncronas. Testes de caixa cinza permitem que o Detox verifique o estado do aplicativo sem acesso direto ao código fonte.
XCUITest para iOS contém duas verificações: iniciar o aplicativo e exibir a tela principal. O teste inicia o aplicativo via `XCUIApplication().launch()` e verifica se um elemento-chave (por exemplo, `navigationBar`) existe. Se o aplicativo falhar ao iniciar, o framework XCTest registra o erro e o teste termina com FAIL. Smoke Test não verifica o conteúdo — apenas que a tela abriu.
Espresso para Android usa `ActivityScenario` para iniciar uma Activity e `onView` para verificar elementos. Uma diferença crítica entre plataformas: o simulador iOS pode exibir um comportamento diferente de um dispositivo real, portanto, os Smoke Tests Android são recomendados para execução no Firebase Test Lab ou em um emulador. Firebase Test Lab suporta execução paralela de Smoke Tests em 10 dispositivos.
import XCTest
class LoginSmokeTest: XCTestCase {
let app = XCUIApplication()
override func setUp() {
continueAfterFailure = false
app.launch()
}
func testLoginButtonExists() {
XCTAssertTrue(app.buttons["Entrar"].exists)
}
func testLoginFlow() {
app.textFields["email"].tap()
app.textFields["email"].typeText("test@test.com")
app.secureTextFields["password"].tap()
app.secureTextFields["password"].typeText("password123")
app.buttons["Log In"].tap()
XCTAssertTrue(app.staticTexts["Welcome"].waitForExistence(timeout: 5))
}
}
O exemplo acima mostra um Smoke Test para a tela de login no iOS. O primeiro teste verifica se o botão de login existe na tela. O segundo teste percorre o caminho completo de autenticação e verifica se uma mensagem de boas-vindas é exibida após o login bem-sucedido. Timeout de 5 segundos para `waitForExistence` é o valor padrão para um Smoke Test: se o elemento de UI não aparecer nesse tempo, o aplicativo não está funcionando corretamente.
Perguntas frequentes
O número ideal é de 5 a 15 testes por módulo. Um Smoke Test deve cobrir o caminho crítico do usuário sem tentar abranger toda a funcionalidade. Critério — se todos os testes do Smoke Test passarem, o aplicativo pode ser aberto em um ambiente de QA para testes adicionais.
Smoke Test verifica a estabilidade da compilação e é executado em cada build. Um sanity check é um conjunto mais estreito de testes executado após alterações específicas. O sanity check responde à pergunta “essa alteração quebrou a funcionalidade X?”, enquanto o Smoke Test responde “a compilação funciona em princípio?”.
Sim, automatizar o Smoke Test é uma prática obrigatória para projetos com lançamentos frequentes. Automação garante consistência das verificações e velocidade de execução. O Smoke Test manual é justificado apenas nos estágios iniciais do projeto, quando o número de compilações não excede 2–3 por semana.
A compilação é marcada como instável e não é enviada para testes adicionais. O desenvolvedor recebe uma notificação com os logs de falha do Smoke Test. Após corrigir o problema, uma nova compilação é criada e o Smoke Test é executado novamente. O defeito bloqueador é registrado no rastreador.
Smoke Test é atualizado sempre que o caminho crítico do usuário muda. Se uma nova tela obrigatória for adicionada (por exemplo, onboarding), ela deve entrar no Smoke Test. Recomenda-se revisar o conjunto de Smoke Test a cada sprint para manter a relevância das verificações.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também