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

Victor Oliveira
Android Dev BR
Published in
6 min readAug 7, 2019
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. :)

--

--