Execução de dispositivo da Developer Device Platform para iOS

Neste guia, descrevemos como executar um XCTest do iOS usando a CLI do gcloud beta device-run e encontrar os resultados no console do Google Cloud . Ele pressupõe que você tenha uma conta e um projeto do Google Cloud .

Para usar a CLI device-run, você precisa fornecer o ID do projeto Google Cloud. Consulte gcloud beta device-run para ver um resumo dos comandos.

Antes de começar

Estas etapas pressupõem que você já:

  1. criado um projeto do Google Cloud ;
  2. Configure a Developer Device Platform seguindo o início rápido.
  3. Autenticado com gcloud no terminal.
  4. Consulte a visão geral da execução do dispositivo para informações gerais.
  5. Compacte os testes em um arquivo ZIP.

Etapa 1. Escolher tipos de dispositivos

Usando a CLI device-run, os testes do iOS podem ser executados em dispositivos físicos disponíveis. Para conferir a lista completa de dispositivos disponíveis, acesse o Catálogo de dispositivos interativo ou execute:

gcloud beta device-run devices list

Exemplo de saída:

ID                MAKE   NAME           MODEL        HARDWARE_TYPE  OS_VERSION  CAPACITY  AVAILABILITY  PRODUCTS
iphonese3-18-4    Apple  iPhone SE 3             iphonese3    PHYSICAL       18.4        NONE      NONE          Automation
iphonese3-26-3    Apple  iPhone SE 3             iphonese3    PHYSICAL       26.3        NONE      NONE          Automation

Consulte o Catálogo de dispositivos para saber como filtrar essa lista. Para segmentar um dispositivo específico na execução do teste, use o ID correspondente (por exemplo, iphonese3-18-4) no comando de envio.

Etapa 2. Preparar e empacotar o XCTest

Antes de executar os testes, compile-os, verifique se eles estão assinados, verifique as assinaturas de código e empacote os artefatos resultantes em um arquivo ZIP que contenha sua configuração do .xctestrun e os pacotes de teste do aplicativo.

1. Criar testes para dispositivos iOS físicos

Abra seu projeto no Xcode e crie o app e os destinos de teste para teste:

  1. Verifique se a assinatura de código está configurada corretamente no Xcode (especificando um perfil de provisionamento e uma identidade de desenvolvedor válidos) para o destino do app e o destino do executor de testes.
  2. Crie para teste usando o Xcode (Product > Build For > Testing) ou com xcodebuild.

    Para um espaço de trabalho:

    xcodebuild build-for-testing \
      -workspace YourProject.xcworkspace \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

    Para um projeto independente:

    xcodebuild build-for-testing \
      -project YourProject.xcodeproj \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

Isso gera os produtos de build em: ./build/Build/Products

2. Verificar produtos e assinaturas de build

Depois de criar, verifique se o aplicativo, o executor e o manifesto .xctestrun foram gerados em ./build/Build/Products/. Se você assinou localmente, pode verificar as assinaturas do pacote usando codesign:

  1. Verifique o pacote de apps:

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp.app
    

    Saída esperada: YourApp.app: valid on disk

  2. Se você estiver executando um XCUITest, verifique também o pacote do executor de testes:

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp-Runner.app
    

    Saída esperada: YourApp-Runner.app: valid on disk

3. Criar o arquivo ZIP

Compacte o diretório Debug-iphoneos e o arquivo .xctestrun localizado na pasta de produtos de saída do build em um único arquivo ZIP.

Execute o seguinte comando no diretório de produtos de build:

cd ./build/Build/Products
zip -r MyTests.zip Debug-iphoneos *.xctestrun

Isso cria o MyTests.zip empacotado pronto para ser usado com a flag --test.

Etapa 3. Executar o XCTest

Estas flags são obrigatórias:

  • Dispositivo: especifique um dispositivo usando --device: --device iphonese3-18-4
  • Teste: especifique o arquivo ZIP de teste usando --test: --test ./MyTests.zip

Para executar o XCTest, use o comando gcloud beta device-run sessions submit xctest. Você precisa fornecer o arquivo ZIP de teste (MyTests.zip) compilado na etapa anterior.

Para executar uma sessão de teste básica:

gcloud beta device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --test ./MyTests.zip

Quando a execução começa, a CLI mostra o ID da sessão criada e o destino do Cloud Storage em que os resultados serão armazenados:

Creating session [session-ee78b0ed] in location [global].
Result files will be stored at [https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/session-ee78b0ed/].

Waiting for session [session-ee78b0ed] to complete....

Etapa 4. Configurar a execução do teste

É possível personalizar a execução do teste usando as seguintes flags opcionais (embora seja necessária pelo menos uma instância da flag --device):

  • Vários dispositivos: especifique a flag --device várias vezes para executar o mesmo teste em vários dispositivos simultaneamente: --device iphonese3-18-4 --device iphonese3-26-3 ou --device iphonese3-18-4,iphonese3-26-3
  • Outros apps: instale um ou mais pacotes .ipa antes de iniciar o teste usando --additional-apps: --additional-apps=/path/to/AdditionalApp.ipa
  • Arquivo .xctestrun personalizado: transmita um arquivo de configuração personalizado com --xctestrun-file: --xctestrun-file=/path/to/CustomTests.xctestrun
  • Tempo limite do teste: limite a duração da execução: --xctest-timeout=10m. O intervalo válido é de 1m a 1h, e o padrão é 5m.
  • Marcadores: anexe metadados definidos pelo usuário à sessão: --labels=env=staging,owner=my-team
  • Enviar arquivos para o dispositivo: envie arquivos para o contêiner de dados do app antes da execução do teste: --other-files-to-push=/tmp/data.txt=com.example.app:/Documents/data.txt
  • Extrair arquivos do dispositivo: extraia arquivos do contêiner de dados do app após a execução do teste: --paths-to-pull=com.example.app:/Documents/output.txt
  • Novas tentativas de teste instável: defina o número máximo de tentativas para executar novamente testes instáveis: --flaky-test-attempts=3 (o padrão é uma tentativa).
  • Bucket do Cloud Storage personalizado: especifique um bucket do Cloud Storage personalizado para entradas e saídas: --bucket-name=my-custom-bucket (o padrão é PROJECT_ID-devicerun).
  • Como o upload de arquivos ZIP ou IPA grandes pode levar tempo, você pode referenciar diretamente seus arquivos usando os caminhos gs:// do Cloud Storage para economizar tempo de upload.

Etapa 5. Analisar e gerenciar a execução do teste

É possível acompanhar as execuções ativas e gerenciar sessões históricas usando estes comandos:

  • Descrever sessão: consulte o progresso em tempo real ou os resultados finais de uma sessão: gcloud beta device-run sessions describe SESSION_ID Adicione --full para conferir detalhes completos, incluindo alocações de dispositivos, IDs de execução e caminhos de artefatos do Cloud Storage.
  • Listar sessões: veja suas execuções recentes: gcloud beta device-run sessions list --limit=10
  • Cancelar sessão: interrompe uma sessão de teste em execução: gcloud beta device-run sessions cancel SESSION_ID
  • Cancelar operação: interrompe uma operação pendente ou ativa: gcloud beta device-run operations cancel OPERATION_ID

A seguir

Em seguida, encontre e analise os registros.