Explorando o Azure DevOps como uma alternativa de CI/CD para um aplicativo android — Parte 2

Victor Oliveira
Aug 7, 2019 · 6 min read
Fonte: https://montemagno.com/why-i-choose-xamarin-to-build-mobile-apps/

Na primeira parte desta série falamos um pouco sobre a configuração do pipeline no seu projeto, para que ele possa rodar no Azure DevOps. Caso você ainda não tenha lido, o link está logo abaixo.

Na parte 2 vamos continuar a falar sobre o pipeline, porém agora vamos focar na parte de testes e distribuição do aplicativo. Como estamos usando as ferramentas da Microsoft, nesse artigo vou mostrar como fazer os testes e distribuição usando o App Center.

Fonte: https://medium.com/trainingcenter/teste-web-testcafe-01-cb1b03c30c69

A imagem acima mostra a pirâmide de testes para um software. Em um app não é diferente. É necessário testar a unidade, serviço e fazer os testes de interfaces, para que o produto tenha qualidade e segurança.

Aqui não vou tratar sobre como criar seus testes, mas caso você queira saber mais sobre o assunto, tem um série interessante do Phellipe Silva sobre a pirâmide de testes no Android. O link está logo abaixo.

Chega de conversa e vamos colocar a mão na massa!

O primeiro passo é criar os testes para seu aplicativo, no Android Studio você deve inserir os testes nos seguintes pacotes:

  1. Testes unitários: test
  2. Testes instrumentados: androidTest

A imagem abaixo mostra onde ficam os pacotes de testes.

Fonte: https://developer.android.com/studio/test

Testes unitários

Importe as bibliotecas.

dependencies {
testImplementation 'junit:junit:4.12'
testImplementation 'androidx.test:core:1.0.0'
testImplementation 'org.mockito:mockito-core:1.10.19'
}

Crie seu teste unitário.

Exemplo de teste unitário tirado de https://developer.android.com/training/testing/espresso/

Para executar seu teste unitário você pode executar os seguintes comandos.

./gradlew assembleDebug 
./gradlew test

Se depois de executar os comandos não ocorrer nenhum erro, é sinal que seus testes estão corretos. Pode comemorar!

Testes instrumentados

O próximo passo é configurar os testes instrumentados no seu projeto. Como nosso desejo é que esses testes também sejam executados no App Center, a Microsoft nos oferece algumas opções de ferramentas, como Espresso e Appium. Neste artigo, vou apresentar os testes usando apenas o Espresso.

Configurando o projeto

Para que seus testes sejam executados no App Center a Microsoft exige uma pré configuração no projeto.

  • Adicione o repositório do JCenter Maven.
allprojects {
repositories {
jcenter()
}
}
  • Adicione a seguinte dependência no seu arquivo build.gradle do módulo de aplicativo.
androidTestImplementation('com.microsoft.appcenter:espresso-test-extension:1.4')
  • Em sua classe de teste importe a biblioteca.
import org.junit.Rule;
import org.junit.After;
import com.microsoft.appcenter.espresso.Factory;
import com.microsoft.appcenter.espresso.ReportHelper;
  • E no cabeçalho da classe crie um instância da classe ReportHelper.
@get:Rule    
var reportHelper: ReportHelper = Factory.getReportHelper()

Uma prática recomendada é fazer uma chamada de uma método anotado com o @After, isso inclui uma captura de tela do estado final do aplicativo no relatório de teste. Veja o exemplo abaixo:

@After
fun tearDown() {
reportHelper.label("Stopping App")
}

Criando seu teste instrumentado

Exemplo tirado de https://developer.android.com/training/testing/ui-testing/espresso-testing, e adaptado para o usado o App Center Espresso.

Após criar os seus testes, execute os seguintes comandos no gradle.

./gradlew assembleDebug
./gradlew assembleDebugAndroidTest
Ufa, concluímos nossa configuração!

Configurando o App Center

Crie um projeto no App Center

Acesse a plataforma e siga os passos:

  1. Clique em “Add new” — “Add new app”;
  2. Insira um nome para seu aplicativo;
  3. Selecione a plataforma e clique em “Add new app”.

Crie um token no App Center

O primeiro passo é criar um token de acesso no App Center.

Acesse a plataforma, clique na imagem do seu perfil e depois selecione o menu “Account settings”.

  1. No menu do lado esquerdo clique em “API Tokens”;
  2. No lado direito superior clique em “New API Token”;
  3. Insira um nome para seu token;
  4. Selecione a opção “Full Access”;
  5. Clique em “Add new API Token”.

Aparecerá uma tela como mostra a imagem abaixo. Logo após copie o token e salve em um lugar seguro.

Configurando o pipeline

Na primeira parte apresentei todo o passo a passo da criação do pipeline, e agora vamos incluir mais algumas tasks para que o Azure DevOps se conecte com o App Center.

Criar tasks de configuração

Vá até seu pipeline, e clique em editar (o passo a passo está na primeira parte). Insira as seguintes tasks no seu arquivo YAML antes da task de gradle.

O primeiro comando fará a instalação do cliente do App Center. É interessante frisar que as máquinas do Azure mesmo que estejam com o cliente já instalado, o pipeline não rodará sem esse comando.

Caso você tenha uma solução melhor, comenta aí :)

O segundo comando é para conectar ao App Center. O token solicitado é o mesmo que criamos anteriormente.

Criando AppCenterTest

Outra task que precisamos incluir é do AppCenterTest. Uma curiosidade importante é que o DevOps tem uma task padrão para esse tipo de tarefa, porém eu só consegui fazer usando a linha de comando. O comando que usei está logo abaixo. Ele deve ser chamado logo após a task PublishBuildArtifacts.

A task no Azure é chamada desta forma:

- task: AppCenterTest@1
inputs:
appSlug: '{PROJECT-NAME}/{APP-NAME}'
serverEndpoint: 'AppCenter'
appFile: 'app/build/outputs/apk/debug/app-debug.apk'
artifactsDirectory: '$(Build.ArtifactStagingDirectory)'
frameworkOption: 'espresso'
espressoTestApkFile: 'app/build/outputs/apk/androidTest/debug/'
credentialsOption: 'serviceEndpoint'
devices: '{PROJECT-NAME}/{DEVICE}'
series: 'launch-tests'
localeOption: 'en_US'
showDebugOutput: true

Como estamos inserindo testes, é necessário atualizar a task de gradle no arquivo YAML. Observe o código abaixo, e note que foram inseridas mais duas tasks do gradle.

Você pode acompanhar os testes no App Center. Quando essa task é chamada o App Center inicia a build. Observe a imagem abaixo:

Após concluído, você poderá acessar os resultados dos testes. Essa tela mostra o tempo e todos os métodos que foram chamados nos testes. Observe:

Criar task AppCenterDistribute

Essa tarefa é responsável por disponibilizar o aplicativo no App Center. Normalmente é chamado após a task de AppCenterTest, pois é na task anterior que temos a certeza que o aplicativo foi validado. Para distribuir o aplicativo no App Center basta inserir a seguinte task no arquivo XAML. Os parâmetros usados aqui são quase todos iguais os da task anterior, atualize com seus dados.

Acesse o artefato da build, disponível no App Center:

Abaixo o arquivo YML completo.

Feito isso, basta salvar a pipeline e clicar em run.

Essa foi minha experiência no uso do Azure DevOps e App Center como uma estratégia de CI/CD. :)

Android Dev BR

Artigos em português sobre Android, curados pela comunidade Android Dev BR. Junte-se a nós: slack.androiddevbr.org.

Victor Oliveira

Written by

Android dev — https://victorlopesjg.github.io/

Android Dev BR

Artigos em português sobre Android, curados pela comunidade Android Dev BR. Junte-se a nós: slack.androiddevbr.org.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade