EmuLabZip logo EmuLabZip

Modo CI

Atualizado em · Editar esta página no GitHub

emulabzip ci grava uma sessão em volta de qualquer comando, normalmente uma execução de testes, e depois sai com o código de saída do próprio comando, então o seu pipeline se comporta como antes, com uma gravação para examinar quando algo dá errado.

emulabzip ci -o run.ezsession --app com.example.app -- ./gradlew connectedCheck

Ele começa a gravar, executa o comando (a saída dele passa sem alteração), para, escreve a sessão e imprime um resultado de uma linha.

Opção
-o, --output FILEOnde escrever a sessão (obrigatório)
-a, --app IDO app: as amostras são tiradas para ele e os crashes são limitados a ele
--networkGrava o tráfego HTTP(S): o dispositivo aponta para o proxy durante a execução
--screens NUm screenshot a cada N segundos
--fail-on-crashFalha a execução (saída 1) quando o app deu crash enquanto rodava, mesmo que o comando tenha passado
--summary FILETambém escreve o relatório, em Markdown, neste arquivo
--config FILELimites a que a execução será submetida (padrão: ./emulabzip.toml, quando existe). Veja Orçamentos
--baseline FILEUma sessão anterior para comparar
--fail-on-regressionFalha quando um número ficou pior do que o da baseline por mais do que a tolerância
--video [N]Grava a tela, em pedaços de N segundos (padrão 30). Veja Linha do tempo e vídeo da tela
--tapsGrava toques (Android)
--replay FILEResponde às requisições do app a partir de um arquivo HAR ou de uma sessão, para que a execução não dependa de nenhum servidor. Precisa de --network. Veja Reproduzindo uma gravação
--passthroughCom --replay: deixa as requisições que não estão na gravação chegarem ao servidor real
--fail-on-missCom --replay: falha a execução quando o app pediu algo que a gravação não tem
--size BUILDSubmete um APK, AAB ou IPA aos limites [size] do emulabzip.toml. Lido antes da execução. Veja Tamanho do build
--size-baseline BUILDCom --size: um build anterior, para medir o crescimento
--fail-on-security LEVELAudita a segurança e a privacidade do app depois do comando (precisa de --app; as requisições do proxy são incluídas) e falha com um achado pelo menos tão grave quanto este: note, warning ou error. Veja Auditoria de segurança
--visual NAMECompara a tela depois do comando com uma baseline. Veja Regressão visual
--fail-on-visualCom --visual: falha a execução quando a tela difere mais do que o limite

O código de saída é o do comando. Se o comando passou mas --fail-on-crash encontrou um crash, um orçamento foi estourado ou foi pedido que uma regressão falhasse a execução, ele é 1; se você pressionar Ctrl+C, ele é 130.

Quando a variável de ambiente GITHUB_STEP_SUMMARY está definida (GitHub Actions), o relatório em Markdown é acrescentado a ela e aparece na página da execução sem passos extras.

GitHub Actions#

name: UI tests
on: [pull_request]

jobs:
  android:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with: { distribution: temurin, java-version: 17 }
      - name: Install EmuLabZip
        run: cargo install --git https://github.com/LuisPeixoto/EmuLabZip emulabzip-cli
      - uses: reactivecircus/android-emulator-runner@v2
        with:
          api-level: 34
          arch: x86_64
          script: >
            emulabzip ci -o run.ezsession --app com.example.app --fail-on-crash --screens 10
            -- ./gradlew connectedCheck
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: session
          path: run.ezsession

Baixe o artefato e abra-o em Sessions → Open…, ou leia-o com emulabzip session show.

Você também pode barrar por acessibilidade no mesmo job, depois que o app estiver na tela em que deve ser verificado:

emulabzip a11y --fail-on error

Notas#

  • O emulador precisa estar rodando antes de o ci começar; com mais de um dispositivo, passe --device.
  • Um arquivo de sessão que já existe nunca é sobrescrito.
  • Se --network for usado, o dispositivo precisa confiar no certificado do EmuLabZip (veja Network). No CI, execute emulabzip ca install uma vez, em uma imagem com root possível.