Migrar do Firebase Test Lab e do Flank para a plataforma de dispositivos do desenvolvedor com IA

Essa habilidade ajuda a traduzir configurações e fluxos de trabalho de execução de testes legados (do Flank ou gcloud firebase test) para a superfície moderna da CLI gcloud beta device-run orientada a recursos.

Mapeamento de estrutura de comando e recurso

A CLI Device Run organiza os comandos por recurso: devices, software-versions e sessions:

1. Catálogo de dispositivos (devices)

  • Listar dispositivos:
    • Legado: gcloud firebase test android/ios models list
    • Novo: gcloud beta device-run devices list [--filter="..."]
    • Exemplo: gcloud beta device-run devices list --filter="platform:android"
  • Descrever dispositivo:
    • Legado: gcloud firebase test android/ios models describe {MODEL}
    • Novo: gcloud beta device-run devices describe {DEVICE}
    • Exemplo: gcloud beta device-run devices describe redfin-30
  • Verificar capacidades do dispositivo e disponibilidade da frota:
    • Legado: gcloud firebase test android/ios list-device-capacities
    • Novo: incorporado diretamente no recurso "Dispositivo" (availability.capacity e availability.available). Inspecione usando gcloud beta device-run devices describe {DEVICE} ou filtre diretamente com gcloud beta device-run devices list --filter="availability.capacity=CAPACITY_HIGH".

2. Versões de software (software-versions)

  • Listar versões de software compatíveis (Xcode e Android Test Orchestrator):
    • Legado: gcloud firebase test ios xcode-versions list
    • Novo: gcloud beta device-run software-versions list
  • Descrever a versão do software:
    • Novo: gcloud beta device-run software-versions describe {SOFTWARE_VERSION}
    • Exemplo: gcloud beta device-run software-versions describe xcode-16-4

3. Sessões de automação (sessions)

  • Enviar instrumentação do Android:
    • Legado: gcloud firebase test android run --type=instrumentation ...
    • Novo: gcloud beta device-run sessions submit instrumentation ...
  • Enviar XCTest do iOS:
    • Legado: gcloud firebase test ios run --type=xctest ...
    • Novo: gcloud beta device-run sessions submit xctest ...
  • Aguardar a conclusão da sessão:
    • Legado: bloqueio síncrono da CLI apenas
    • Novo: gcloud beta device-run sessions wait {SESSION}
  • Descrever / inspecionar sessão:
    • Legado: ver o link da Web no console do Firebase / resultados da ferramenta do Cloud
    • Novo: gcloud beta device-run sessions describe {SESSION} [--full]
  • Listar sessões anteriores:
    • Legado: ver o histórico da matriz no console da Web
    • Novo: gcloud beta device-run sessions list
  • Cancelar sessão:
    • Legado: somente console da Web (sem comando da CLI)
    • Novo: gcloud beta device-run sessions cancel {SESSION}

Tabela de referência de mapeamento de flags

A tabela a seguir mapeia parâmetros do Firebase Test Lab e do Flank legados para os equivalentes compatíveis em gcloud beta device-run:

Tipo de teste Grupo de atributos Parâmetro legado (firebase/Flank) Parâmetro de meta (device-run) Formato / lógica de conversão
Comum (Android e iOS) Parâmetros e recursos principais Flanco --project --project Flag global padrão Google Cloud (--project=PROJECT_ID) ou configuração ativa da Google Cloud CLI.
Comum (Android e iOS) Parâmetros e recursos principais --client-details --labels Dicionário de pares chave=valor.
Comum (Android e iOS) Configuração e segmentação por dispositivo --device model={M},version={V} --device={M}-{V} Mapeia o modelo e a versão do SO para a string de ID --device. Aceita uma lista separada por vírgulas de vários dispositivos em uma única flag (por exemplo, --device=mediumphone-arm-32,shiba-36).
Comum (Android e iOS) Controle de execução e instabilidade --async --async Maps 1:1. O comando permanece síncrono por padrão. Transmita isso para retornar imediatamente. Monitore ou aguarde com gcloud beta device-run sessions wait <SESSION_ID>.
Comum (Android e iOS) Controle de execução e instabilidade --num-flaky-test-attempts {R} --flaky-test-attempts {A} Número inteiro. Converta a contagem de novas tentativas $R$ no limite total de tentativas: $A = R + 1$ (o padrão é 1).
Comum (Android e iOS) Controle de execução e instabilidade N/A --flaky-test-parallel-retry Boolean. Se as falhas de teste serão repetidas em paralelo (o padrão é sequencial).
Comum (Android e iOS) Controle de execução e instabilidade N/A --flaky-test-retry-level String. Nível de nova tentativa: shard ou test (o padrão é shard).
Comum (Android e iOS) Saída e armazenamento --results-bucket --bucket-name Bucket em que os artefatos de saída do teste são enviados por upload (o padrão é gs://[PROJECT_ID]-devicerun).
Comum (Android e iOS) Saída e armazenamento --results-dir Gerenciada automaticamente Não é possível definir subdiretórios personalizados. Todos os artefatos de teste são organizados automaticamente em automation/sessions/{session_id}/ no bucket especificado por --bucket-name.
Comum (Android e iOS) Saída e armazenamento --record-video --video Valores válidos: always ou on-failure.
Comum (Android e iOS) Saída e armazenamento --directories-to-pull --paths-to-pull Lista de caminhos a serem extraídos do dispositivo após a execução.
Android comum Parâmetros e recursos principais --app --apps Lista. Se vários APKs/AABs de aplicativos forem fornecidos, transmita todos eles para --apps.
Android comum Parâmetros e recursos principais --additional-apks --apps Lista. Mesclar outros valores de lista diretamente na lista principal --apps.
Android comum Parâmetros e recursos principais --obb-files --other-files-to-push Dicionário no formato SOURCE=DEST. Envie arquivos OBB diretamente para o caminho do dispositivo (/sdcard/Android/obb/{package_name}/).
Android comum Parâmetros e recursos principais --other-files --other-files-to-push Dicionário no formato SOURCE=DEST.
Android comum Configuração e segmentação por dispositivo --device locale={L} --locale={L} Mapeia a localidade do dispositivo para a flag de nível superior --locale (language-region, por exemplo, --locale=en-US.
Android comum Configuração e segmentação por dispositivo --device orientation={O} --orientation={O} Mapeia a orientação do dispositivo para a flag de nível superior --orientation (portrait ou landscape).
Android comum Configuração e segmentação por dispositivo N/A --coordinates Coordenadas de local fictício (latitude,longitude, por exemplo, 37.4220,-122.0841).
Android comum Controle de execução e instabilidade --grant-permissions Padrão automatizado Automatizada. As permissões de ambiente de execução são concedidas automaticamente por padrão (equivalente a --grant-permissions=all).|
Android comum Saída e armazenamento N/A --dumpsys Coletar dumpsys do dispositivo (always ou on-failure).
Android comum Saída e armazenamento N/A --bugreport Colete um relatório do bug do dispositivo (always ou on-failure).
Android Instrumentation Parâmetros e recursos principais --type=instrumentation sessions submit instrumentation A estrutura do subcomando determina o tipo de teste em vez de uma flag --type.
Android Instrumentation Parâmetros e recursos principais --test --test Caminho para o arquivo binário que contém testes de instrumentação.
Android Instrumentation Controle de execução e instabilidade --timeout --instrumentation-timeout Duração (por exemplo, 10m, 20s, 1h). Intervalo válido: 1m a 3h (padrão: 5m).
Android Instrumentation Controle de execução e instabilidade --num-uniform-shards {N} --sharding-option=uniform
--uniform-sharding-count={N}
A configuração de flag ativa a estratégia de fragmentação uniforme (intervalo de contagem válido: 1 a 20 físicos, 1 a 200 virtuais).
Android Instrumentation Controle de execução e instabilidade Flanco --shard-time {S} --sharding-option=smart
--smart-sharding-target-duration={S}
Ativa o sharding inteligente com o tempo de execução de destino (por exemplo, 2m, 10m, 1h). Intervalo válido: 2m a 1h.
Android Instrumentation Controle de execução e instabilidade Flanco --smart-flank-gcs-path --smart-sharding-record-name={name}
--bucket-name={bucket}
Nome do YAML de registro de fragmentação (exclua a extensão) em --bucket-name em automation/smart-sharding/.
Android Instrumentation Controle de execução e instabilidade Flanco --max-test-shards {N} --smart-sharding-max-shard-count={N} Mapeia para um limite máximo de fragmento quando o fragmentação inteligente está ativada (0 a 20 físicos, 0 a 200 virtuais).
Android Instrumentation Executador de testes e destinos --test-runner-class --test-runner-class Classe de executor totalmente qualificada.
Android Instrumentation Executador de testes e destinos --test-targets --test-targets Dicionário com suporte a chaves como package, notPackage, class, notClass, annotation, notAnnotation e size. Formatos como testfile ou notTestfile não serão aceitos.
Android Instrumentation Executador de testes e destinos --use-orchestrator --orchestrator-version Usa auto (orquestrador padrão) ou uma string de versão específica (por exemplo, 1.6).
Android Instrumentation Executador de testes e destinos --environment-variables --additional-test-options Dicionário de opções transmitidas para o executor de testes. Não é permitido usar formatos compatíveis com --test-targets.
iOS comum Parâmetros e recursos principais --additional-ipas --additional-apps Lista de arquivos .ipa a serem instalados no dispositivo antes da execução do teste.
iOS comum Parâmetros e recursos principais --other-files --other-files-to-push Dicionário no formato SOURCE=BUNDLE_ID:DEVICE_PATH.
iOS comum Saída e armazenamento --directories-to-pull --paths-to-pull Lista de arquivos ou diretórios a serem extraídos após o teste no formato BUNDLE_ID:DEVICE_PATH.
Somente XCTest do iOS Parâmetros e recursos principais --type=xctest sessions submit xctest A estrutura do subcomando determina o tipo de teste em vez de uma flag --type.
Somente XCTest do iOS Parâmetros e recursos principais --test --test O caminho para o arquivo ZIP que contém o app iOS e os arquivos XCTest.
Somente XCTest do iOS Controle de execução e instabilidade --timeout --xctest-timeout Duração máxima permitida para a execução do XCTest (intervalo válido: 1m a 1h, padrão: 5m).
Somente XCTest do iOS Executador de testes e destinos --xctestrun-file --xctestrun-file O caminho para o arquivo .xctestrun personalizado.
Somente XCTest do iOS Executador de testes e destinos --xcode-version --xcode-version ID do catálogo ou string de versão do Xcode a ser usada (por exemplo, xcode-16-4 ou 16.4). Consulte usando software-versions list.

Orientações práticas de tradução

Siga estas diretrizes para traduzir as configurações do Firebase Test Lab e do Flank para execução no dispositivo:

1. Especificações do dispositivo

Em gcloud beta device-run, --device aceita uma lista separada por vírgulas de strings de ID do modelo e da versão. Ao contrário do Firebase, que exigia uma flag --device por dispositivo, a execução no dispositivo permite especificar vários dispositivos em uma flag. A localidade, a orientação e as coordenadas simuladas do dispositivo são especificadas usando flags de nível superior separadas:

  • ❌ --device model=MediumPhone.arm,version=32,locale=en,orientation=portrait
  • ✅ --device=mediumphone-arm-32 --locale=en-US --orientation=portrait

2. Dicionários e listas

Converta flags separadas por vírgulas em listas (--apps, --paths-to-pull) ou dicionários de chave-valor (--other-files-to-push, --additional-test-options):

  • ❌ --other-files /sdcard/file1.txt=local/file1.txt,/sdcard/file2.txt=local/file2.txt
  • ✅ --other-files-to-push local/file1.txt=/sdcard/file1.txt,local/file2.txt=/sdcard/file2.txt

3. Estratégias de fragmentação

  • Fragmentação uniforme:
    • Defina --sharding-option=uniform.
    • Defina --uniform-sharding-count={count} (1 a 20 para físico, 1 a 200 para virtual).
  • Fragmentação inteligente:
    • Defina --sharding-option=smart.
    • Defina --smart-sharding-target-duration={duration} (por exemplo, 2m, 10m, 1h; intervalo válido: 2m a 1h).
    • Defina --smart-sharding-record-name={record_name} (aponta para o registro de rastreamento YAML em --bucket-name em automation/smart-sharding/).
    • Defina --smart-sharding-max-shard-count={max_count} (limite máximo opcional: 0 a 20 para físico, 0 a 200 para virtual).

4. Execução assíncrona

  • Assíncrono e aguardando: quando --async é especificado, a CLI retorna imediatamente com o ID da sessão criada. É possível aguardar a conclusão da sessão em fluxos de trabalho de CI/CD usando: gcloud beta device-run sessions wait <SESSION_ID>

5. Configuração declarativa do YAML (--flags-file)

Para configurações complexas ou equipes que preferem manter arquivos com controle de versões em vez de comandos longos do terminal, o gcloud oferece um pré-processador de argumentos --flags-file universal (consulte $ gcloud topic flags-file):

gcloud beta device-run sessions submit instrumentation --flags-file=device-run-flags.yaml

!NOTE Por que as chaves exigem --:gcloud injeta chaves YAML diretamente no analisador da CLI como flags de linha de comando. Todas as chaves no arquivo YAML precisam ter o prefixo -- (por exemplo, --device:, --apps:). Sem --, gcloud os rejeita como argumentos posicionais não reconhecidos.

Confira um exemplo que demonstra flags de lista e dicionário com vários valores:

# device-run-flags.yaml
--device:
  -   mediumphone-arm-32
  -   shiba-36
--apps:
  -   app-debug.apk
  -   test-helper.apk
--test: app-debug-androidTest.apk
--bucket-name: my-bucket
--sharding-option: smart
--smart-sharding-target-duration: 2m
--smart-sharding-record-name: timing-record
--paths-to-pull:
  -   /sdcard/screenshots
  -   /sdcard/coverage.ec
--additional-test-options:
  coverage: "true"
  clearPackageData: "true"

Exemplos de tradução

Use estes exemplos para traduzir suas configurações atuais do Firebase Test Lab e do Flank para execução no dispositivo.

Do Firebase Test Lab para a execução no dispositivo

firebase cmd:

gcloud firebase test android run \
  --app=app-debug.apk \
  --test=app-debug-androidTest.apk \
  --device model=shiba,version=36 \
  --timeout=5m \
  --num-flaky-test-attempts=2 \
  --directories-to-pull=/sdcard/screenshots \
  --environment-variables coverage=true

É traduzido como:

gcloud beta device-run sessions submit instrumentation \
  --device=shiba-36 \
  --apps=app-debug.apk \
  --test=app-debug-androidTest.apk \
  --instrumentation-timeout=5m \
  --flaky-test-attempts=3 \
  --paths-to-pull=/sdcard/screenshots \
  --additional-test-options coverage=true

Configurações de flank para execução no dispositivo

flank options (flank.yml):

gcloud:
  app: app-debug.apk
  test: app-debug-androidTest.apk
  device:
    -   model: mediumphone-arm
      version: 32
  shard-time: 120
  smart-flank-gcs-path: gs://my-bucket/automation/smart-sharding/timing-record.yaml

Isso significa:

Traduza diretamente para o comando da CLI moderna:

gcloud beta device-run sessions submit instrumentation \
  --device=mediumphone-arm-32 \
  --apps=app-debug.apk \
  --test=app-debug-androidTest.apk \
  --bucket-name=my-bucket \
  --sharding-option=smart \
  --smart-sharding-target-duration=2m \
  --smart-sharding-record-name=timing-record

Opção 2: arquivo de flags YAML declarativo (--flags-file)

Se você preferir manter as configurações em um arquivo YAML com controle de versões em vez de strings de script de shell, use o recurso --flags-file integrado do gcloud:

# device-run-flags.yaml
# Note: gcloud requires keys to start with '--'
--device:
  -   mediumphone-arm-32
--apps:
  -   app-debug.apk
--test: app-debug-androidTest.apk
--bucket-name: my-bucket
--sharding-option: smart
--smart-sharding-target-duration: 2m
--smart-sharding-record-name: timing-record

Enviar com a CLI:

gcloud beta device-run sessions submit instrumentation --flags-file=device-run-flags.yaml

Também é possível anexar ou substituir flags na linha de comando, como adicionar --async.

Descoberta do catálogo de dispositivos

listing & inspecting devices:

# List all available Android devices
gcloud beta device-run devices list --filter="platform:android"

# Filter devices with high fleet capacity (replaces legacy list-device-capacities)
gcloud beta device-run devices list --filter="availability.capacity=CAPACITY_HIGH"

# Describe a specific device (OS versions, form factors, orientation, locales, capacity)
gcloud beta device-run devices describe redfin-30

Ciclo de vida da sessão de ponta a ponta em CI/CD

submitting, waiting, and inspecting sessions:

# 1. Submit asynchronously and capture session ID
SESSION_ID=$(gcloud beta device-run sessions submit instrumentation \
  --apps=app-debug.apk \
  --test=app-debug-androidTest.apk \
  --device=mediumphone-arm-32 \
  --async \
  --format="value(name)")

# 2. Wait for session completion in CI/CD pipeline
gcloud beta device-run sessions wait "$SESSION_ID"

# 3. Describe session summary (or pass --full for complete details)
gcloud beta device-run sessions describe "$SESSION_ID"

# 4. Cancel a running session if aborted
gcloud beta device-run sessions cancel "$SESSION_ID"