Executando Testes Instrumentados em uma tarefa Gradle
No último Google I/O, várias novidades incríveis foram mostradas. A mais animadora na minha opinião foi a Unified Test Platform (Plataforma Unificada de Testes, em tradução livre — anteriormente conhecida como Nitrogen), que deu os seus primeiros passos ao publico durante o evento. A partir do Android Studio Bumblebee, nós podemos testar essas funcionalidades experimentais, tornando nossos testes mais confiáveis e escaláveis, principalmente para testes instrumentados automatizados.
Nós fomos apresentados ao Gradle Managed Virtual Devices (Dispositivos Virtuais Gerenciados pelo Gradle, em tradução livre), uma ferramenta que permite executar testes instrumentados com o Android Gradle Plugin. Essa nova funcionalidade é responsável por baixar, criar, instalar e limpar o dispositivo virtual, executando os testes com mais performance e consistência.
Criando nosso primeiro Dispositivo Virtual
Para começar, tudo que precisamos fazer é especificar as configurações do dispositivo virtual no nosso arquivo build.gradle
:
No código acima, nós criamos um dispositivo Pixel 2, rodando API nível 29 com Google Play Services em uma ABI x86. Nós podemos misturar dispositivos como Celulares, Tablets, TVs, WearOS, Celulares Genéricos com qualquer versão de Android.
Para mais informações sobre quais dispositivos podem ser criados, podemos acessar Tools > AVD Manager > Create Virtual Device… e conferir todos os hardwares suportados.
Após o Dispositivo Virtual estiver configurado, podemos executar o comando para os testes rodarem. Antes de mais nada, habilitamos a funcionalidade experimental do Unified Test Platform e referenciamos o nosso nome-do-dispositivo
+ BuildVariant
+ AndroidTest.
O comando genérico fica:
./gradlew
-Pandroid.experimental.androidTest.useUnifiedTestPlatform=true
[nome do dispositivo][variante da build][AndroidTest]
Atualizando o comando com base no nosso build.gradle
criado anteriormente, e rodando em Debug, o comando irá ficar:
./gradlew
-Pandroid.experimental.androidTest.useUnifiedTestPlatform=true
pixel2api29DebugAndroidTest
Criando um grupo de dispositivos
Também é possível criar um grupo de dispositivos com configurações diferentes para validar os testes em múltiplos cenários. Tudo que precisamos fazer é adicionar o parâmetro deviceGroups
e referenciar os dispositivos criados. Vamos ver como o nosso arquivo build.gradle
irá ficar com essa atualização:
Agora em nosso exemplo temos também um Tablet Nexus 9 e um novo grupo chamado phoneAndTablet
. Dentro desse novo grupo, os dois dispositivos estão referenciados para rodar os testes juntos. Para executar os testes em um grupo de dispositivos, atualizamos o comando anterior com o nome-do-grupo
ao invés do dispositivo individual.
./gradlew
-Pandroid.experimental.androidTest.useUnifiedTestPlatform=true
phoneAndTabletGroupDebugAndroidTest
Próximos passos
Eu criei um repositório para facilitar o teste dessa ferramenta sensacional. É só clonar, compilar usando o Android Studio Bumblebee e executar qualquer comando mostrado nesse artigo para testar. 🎉
Conclusão
Eu já trabalhei em diversos projetos nos quais desenvolvíamos testes instrumentados, mas eles não eram executados em uma pipeline devido a restrições técnicas e dificuldade para integrar o Emulador em alguns serviços de Integração Contínua (CI). Agora, usando o Gradle Managed Virtual Devices, a execução é tão simples quando adicionar uma nova tarefa para rodar durante a compilação do aplicativo.
Estou muito animado em como essa plataforma unificada irá nos ajudar a criar melhores testes e ambientes para validarmos nossa aplicação. Tudo isso, com a adição de alguns parâmetros no arquivo Gradle.
Se você encontrar qual problema ao usar essas ferramentas experimentais, sinta-se livre para abrir um chamado no Issue Tracker. Isso vai ajudar o Google a rastrear e solucionar os bugs, ajudando a comunidade a criar uma solução mais robusta. 😊
Material adicional
Para mais informações sobre as novas funcionalidades no Android Studio Bumblebee e como o Unified Test Platform pode te ajudar a alcançar mais segurança e escalabilidade e seus testes, eu recomendo os seguintes links:
Muito obrigado por ler meu artigo ❤️