O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Testes de Instrumentação

Leia primeiro Teste seu aplicativo no developer.android.com. Observe que existem algumas diferenças em como os testes de instrumentação são usados ​​nos testes de plataforma.

Em resumo, um teste de instrumentação fornece um ambiente especial de execução de teste, iniciado por meio do comando am instrument , em que o processo de aplicativo de destino é reiniciado e inicializado com o contexto básico do aplicativo, e um encadeamento de instrumentação é iniciado dentro da VM do processo de aplicativo. Seu código de teste inicia a execução neste encadeamento da instrumentação e é fornecido com uma instância de Instrumentation que fornece acesso ao contexto do aplicativo e APIs para manipular o processo do aplicativo em teste.

Conceitos chave

  • uma instrumentação deve ser declarada em um pacote de aplicativos, com uma marca <instrumentation> aninhada na marca <manifest> do manifesto do pacote de aplicativos.
  • tecnicamente, um manifesto do pacote de aplicativos pode conter várias tags <instrumentation> , embora não seja comumente usado dessa maneira.
  • cada <instrumentation> deve conter:
    • um atributo android:name : deve ser o nome de uma subclasse de Instrumentation incluída no aplicativo de teste, que normalmente é o executor de teste que está sendo usado, por exemplo: android.support.test.runner.AndroidJUnitRunner
    • um atributo android:targetPackage deve ser definido. Seu valor deve ser definido para o pacote de aplicativos em teste.

Resumo das etapas

  1. Abaixo estão os destinos comuns para testes herméticos em relação aos serviços de estrutura:

     frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
     

    Se você estiver adicionando um novo módulo de instrumentação para o seu componente, consulte

  2. Seguindo a convenção existente, se você estiver adicionando testes em um dos locais acima. Se você estiver configurando um novo módulo de teste, siga as configurações do AndroidManifest.xml e Android.mk em um dos locais acima

  3. Veja frameworks / base / core / tests / coretests / para um exemplo. Observe que estas linhas instalam aplicativos extras:

     <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
     
  4. Não se esqueça de marcar seu teste como @SmallTest , @MediumTest ou @LargeTest

  5. Crie o módulo de teste com make, por exemplo:

     make FrameworksCoreTests -j
     
  6. Execute os testes:

     make tradefed-all -j
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
     
  7. Se não estiver usando o Tradefed, instale e execute manualmente os testes:

    1. Instale o apk gerado:
     adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
     

    Dica: você usa a adb shell pm list instrumentation para encontrar as instrumentações dentro do apk recém-instalado

    1. Execute os testes com várias opções:

      1. todos os testes no apk

         adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
         
      2. todos os testes em um pacote Java específico

         adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
         
      3. todos os testes em uma classe específica

         adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
         
      4. um método de teste específico

         adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
         

Seu teste pode fazer uma declaração explícita de aprovação ou reprovação usando APIs JUnit ; Além disso, quaisquer exceções não capturadas também causarão uma falha funcional.

Para emitir métricas de desempenho, seu código de teste pode chamar Instrumentation#sendStatus para enviar uma lista de pares de valores-chave. É importante observar que:

  1. métricas podem ser inteiros ou ponto flutuante
  2. quaisquer valores não numéricos serão descartados
  3. seu apk de teste pode ser testes funcionais ou métricas, no entanto, a mistura de ambos não é suportada no momento