SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Automatizando testes sem
sofrimento
Rodrigo Amaro
Especialista Android no PagSeguro
Graduado em Engenharia da Computação
Pós-Graduado em Análise de Sistemas
Sobre o PagSeguro
● Pioneiro e Líder no mercado brasileiro de meios de pagamento
online
○ Mais de 600 mil lojas cadastradas
○ Mais de 40 milhões de compradores usam o PagSeguro
● Aplicativo PagSeguro lançado em Abril de 2013
○ Mais de 2 milhões de downloads (Android)
○ Presente nas plataformas Android, iOS e Windows Phone
○ Uso de tecnologias como Audio Jack Data Transmission e Bluetooth
Agenda
● Testes de software
○ Automação de testes
○ Motivadores
● Histórico no PagSeguro
● Aprendendo por exemplo
○ Implementação básica de testes locais
○ Evolução da arquitetura de testes
○ Expandindo para testes End-to-End
● Considerações finais
Dimensões de qualidade
Segundo Philippe Kruchten¹, existem pelo menos três dimensões
de qualidade que precisam ser consideradas antes de se iniciar
um ciclo de testes
● Confiança
● Funcionalidade
● Performance
1
The rational unified process: An introduction (boston, addison-Wesley, 1999)
Testes automatizados
Permitem:
● Definir uma linha processual que pode ser executada
inúmeras vezes para avaliar diversas características da
aplicação
● Agendar a execução de testes com base em regras ou
eventos
● Documentar as funcionalidades implementadas de modo
que elas possam ser validadas
Motivadores
● Garantir o nível de qualidade das
entregas
● Rápida evolução do produto
● Permitem avaliar diversos
cenários e condições
● Maior liberdade aos QA’s para
testes exploratórios
Histórico no PagSeguro
● Calabash
○ Baseado no Cucumber
○ Código em Ruby
○ Possibilidade de reutilização para iOS
● Robotium
○ Código em Java
○ Maior facilidade para trabalhar com Android
● Espresso
○ Comandos mais legíveis
○ Fornecido pelo Google
Caso de Uso - Tela de login
● Usuário deve fornecer email e senha;
● Se o par (email e senha) estiver
incorreto, sinalizar ao usuário
● Se estiverem corretos uma
mensagem de sucesso deve ser
exibida
● Havendo uma falha de rede oferecer
a opção de tentar novamente
Usando o Repositório
● Para facilitar o acompanhamento o código desta apresentação
está disponível no seguinte repositório:
https://bitbucket.org/rod_a_r/testes-automatizados.git
● O campo amarelo no canto superior representa a TAG com o
código referente ao momento atual da apresentação
0.2.0
Configurando o Espresso
Vamos configurar nossa aplicação seguindo as recomendações da
documentação do Espresso disponibilizada em:
https://google.github.io/android-testing-support-library/docs/espresso/setup/index.html
● Desabilitar as animações no dispositivo;
● Adicionar as dependências do Espresso no arquivo build.gradle do módulo;
● Configurar o Instrumentation Runner no mesmo arquivo.
0.2.0
Configurando o Espresso
Error:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app
(24.1.1) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Existem algumas soluções para o problema:
● Excluir o módulo defeituoso (support-annotations) das bibliotecas que
causaram o conflito (espresso-core e rules)
● Forçar a versão a ser utilizada para garantir compatibilidade
http://stackoverflow.com/questions/28999124/resolved-versions-for-app-22-0-0-and-test-app-21-0-3-differ
0.2.1
Escrevendo os primeiros testes
Entendendo o funcionamento do Espresso:
● Como escrever o teste?
● Verificando valores, visibilidade e comportamento
● Efetuando ações
● Rodando os primeiros testes
https://google.github.io/android-testing-support-library/docs/espresso/setup/index.html#add-the-first-test
0.3.0
Tratando diferentes tamanhos de tela
● Qual o foco do seu teste?
○ Layout?
○ Experiência do usuário?
○ Funcionalidade?
● O que é mais importante para seu produto?
○ Aparecer o logo da sua empresa?
○ Garantir o acesso do usuário?
0.3.1
Tratando diferentes tamanhos de tela
● Ferramentas para resolver
○ isDisplayed()
○ doesNotExist()
○ scrollTo()
0.3.1
Testando múltiplos cenários
● Usar servidor de QA para realizar chamadas
● Resposta Hardcoded
● Mocks
● Serviço Local
0.4.0
Simulando a entrada de dados
Quando teclado vira um problema...
● Entrada de valores durante os testes
● typeText()
● closeSoftwareKeyboard()
● windowSoftInputMode
https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft
0.4.1
Espresso - Resumo
● Espresso permite:
○ Verificar a presença de elemento baseando-se em regras (matchers)
○ Efetuar ações em elementos encontrados através de regras
● Problemas:
○ Conflito de versões entre bibliotecas de teste e de uso do app
○ Falhas do mecanismo de teste podem impedir a execução dos mesmos
● Dificuldades:
○ Simular diversos cenários sem impactar na execução do app em produção
○ Os diversos tamanhos de dispositivos devem ser tratados conforme a
necessidade
○ Garantir um ambiente estável com pouco código
Usando mocks
● São objetos que simulam o comportamento de objetos reais
● Permitem fornecer contexto em testes automatizados
● Facilitam a escrita do teste
Literatura:
● https://www.amazon.com.br/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627
● https://www.amazon.com/gp/product/B00QS2HXUO/
Configurando o Mockito
Etapas:
● Adicionando a dependência no build.gradle
● Revisando o código para injeção dos mocks
● Alterando o comportamento de início da Activity durante o teste
● Alterando o primeiro teste
Links:
http://mockito.org/
1.0.0
Configurando o Mockito
Problemas com a geração de código:
● Originalmente o Mockito gera .class
● Para que o Android possa reconhecer as classes geradas elas
devem ser compatíveis com a Dalvik VM (.dex)
● Para isso usamos uma biblioteca chamada DEXMAKER
Links:
https://github.com/crittercism/dexmaker
1.0.1
Utilizando o Mockito
● Criando um objeto “mockado” com mock(class)
● Configurando seu mock
○ doReturn… when…
○ doThrow… when…
○ doAnswer… when...
1.1.0
Mockito - Resumo
● Usando mocks você consegue:
○ Evitar implementações de interface desnecessárias
○ Fornecer contexto para diversos cenários de teste
○ Facilitar a escrita dos testes
○ Evitar a necessidade de código Hard Coded em arquivos de produção
● Problemas e dificuldades:
○ Conversão das classes geradas pelo Mockito para DEX
○ Necessidade de iniciar manualmente a Activity para testes
○ Eventualmente surgem alguns problemas referentes aos código gerado pelo DEX
Injeção de dependências
● Baseado no conceito de Inversão de Controle (IoC) onde a classe foco não
deve se preocupar em criar instâncias de suas dependências
● Temos uma figura central cuja responsabilidade é fornecer das dependências
requeridas por outras classes
● Permite diminuir o acoplamento entre classes
● Facilita a escrita de testes
Links:
http://martinfowler.com/articles/injection.html
http://www.vogella.com/tutorials/Dagger/article.html
Configurando o Dagger
● Declarando as dependências
● Configurando o processador de anotações
● Declarando módulos, componentes e dependências
● Método inject
Links:
http://google.github.io/dagger/
https://bitbucket.org/hvisser/android-apt
2.0.0
Dagger - Resumo
● Mais boilerplate code
● Melhor controle das dependências e configurações para testes
● Dificulta o envio de código de testes para produção
Testes End-To-End: Rx, Retrofit e SoapUI
● Utilização do Rx para facilitar o tratamento de chamadas ao
serviço de Login em uma thread separada
● Retrofit para realizar as chamadas ao serviço de Login
● Uso do Soap UI para simular o serviço de Login
Links:
https://github.com/ReactiveX/RxJava
http://square.github.io/retrofit/
https://www.soapui.org/
3.0.0
Configurandos os servicos no Soap UI
● Criando um projeto de serviço
● Criando um endpoint
● Criando as respostas do EndPoint
● Definindo as respostas com base no Request usando Groove
3.1.0
Escrevendo testes End-to-End
● Configuração do ambiente para uso do serviço
● Implementação da camada de consumo do serviço
● Sincronismo da execução do teste
● IdlingResource
3.1.0
Categorizando testes
● Por que categorizar?
● Que tipo de categorias devo criar?
● Como categorizar?
● Executando categorias de testes
3.2.0
Dicas de última hora
● Desligue as animações durante a execução dos testes para não confundir o
Espresso
● Caso comece a receber erros do tipo “No tests found” tente um Clean Project
ou reinicie o Android Studio
● Procure categorizar os tipos de Teste de modo a agrupar pela característica
do teste.
● Utilize nomenclaturas de fácil entendimento para ter clareza do que o teste
realiza
Estude, pesquise, pergunte...
“I have not failed. I've just found 10,000 ways
that won't work.”
Thomas A. Edison
Dúvidas?
Obrigado
https://br.linkedin.com/in/rodrigoamarorodrigues
https://plus.google.com/+RodrigoAmaroRodrigues

Mais conteúdo relacionado

Mais procurados

QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)Mayara Fernandes
 
Android Studio: Primeiros Passos
Android Studio: Primeiros PassosAndroid Studio: Primeiros Passos
Android Studio: Primeiros PassosRomualdo Andre
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIVinícius Thiengo
 
Aulas 6: usando o Jest para fazer mocks to Mongoose, testando a função save
Aulas 6: usando o Jest para fazer mocks to Mongoose, testando a função saveAulas 6: usando o Jest para fazer mocks to Mongoose, testando a função save
Aulas 6: usando o Jest para fazer mocks to Mongoose, testando a função saveJorge Pires
 
Criando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2eCriando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2eElias Nogueira
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Leonardo Kobus
 
Chips Android, Quando e Como Utilizar
Chips Android, Quando e Como UtilizarChips Android, Quando e Como Utilizar
Chips Android, Quando e Como UtilizarVinícius Thiengo
 
UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsStefan Teixeira
 
Comparando as Hypes - React & Vue
Comparando as Hypes - React & VueComparando as Hypes - React & Vue
Comparando as Hypes - React & VueHerbert Henrique
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiMayara Fernandes
 
BottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando UtilizarBottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando UtilizarVinícius Thiengo
 
Android N, Java 8, Android Studio 2.2?
Android N, Java 8, Android Studio 2.2?Android N, Java 8, Android Studio 2.2?
Android N, Java 8, Android Studio 2.2?Marcelo Quinta
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredElias Nogueira
 
Estudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogEstudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogVinícius Thiengo
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva minastestingconference
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressWalmyr Lima e Silva Filho
 

Mais procurados (20)

QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
Android Studio: Primeiros Passos
Android Studio: Primeiros PassosAndroid Studio: Primeiros Passos
Android Studio: Primeiros Passos
 
Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State API
 
Aulas 6: usando o Jest para fazer mocks to Mongoose, testando a função save
Aulas 6: usando o Jest para fazer mocks to Mongoose, testando a função saveAulas 6: usando o Jest para fazer mocks to Mongoose, testando a função save
Aulas 6: usando o Jest para fazer mocks to Mongoose, testando a função save
 
Criando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2eCriando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2e
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.
 
Chips Android, Quando e Como Utilizar
Chips Android, Quando e Como UtilizarChips Android, Quando e Como Utilizar
Chips Android, Quando e Como Utilizar
 
UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao Jenkins
 
Comparando as Hypes - React & Vue
Comparando as Hypes - React & VueComparando as Hypes - React & Vue
Comparando as Hypes - React & Vue
 
Gradle
GradleGradle
Gradle
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
 
BottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando UtilizarBottomNavigationView Android, Como e Quando Utilizar
BottomNavigationView Android, Como e Quando Utilizar
 
Android N, Java 8, Android Studio 2.2?
Android N, Java 8, Android Studio 2.2?Android N, Java 8, Android Studio 2.2?
Android N, Java 8, Android Studio 2.2?
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssured
 
Estudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do BlogEstudando Android - Lista de Conteúdos do Blog
Estudando Android - Lista de Conteúdos do Blog
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com Cypress
 
Android Studio
Android StudioAndroid Studio
Android Studio
 

Semelhante a Android DevConference - Automatizando testes sem sofrimento

[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...minastestingconference
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaAutomação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaGabriela Patuci
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netRenato Groff
 
Teste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATSTeste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATSFabrício Campos
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Ramon Durães
 
Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxRoberto Nunes
 
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...GUTS-RS
 
Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoMario Mendonça
 
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...Antonio Lobato
 
Aula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfAula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfMichaelArrais1
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeAndré Abe Vicente
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android EmbarcadoOdair Sousa
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
 

Semelhante a Android DevConference - Automatizando testes sem sofrimento (20)

[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
[MTC 2021] As 8 melhores práticas e formas de simplificar e estruturar todos...
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaAutomação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
Teste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATSTeste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATS
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016
 
Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptx
 
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
 
Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimento
 
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Aula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfAula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdf
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android Embarcado
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 

Mais de iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsiMasters
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudiMasters
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesiMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeiMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiiMasters
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisiMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoiMasters
 

Mais de iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 

Android DevConference - Automatizando testes sem sofrimento

  • 2. Rodrigo Amaro Especialista Android no PagSeguro Graduado em Engenharia da Computação Pós-Graduado em Análise de Sistemas
  • 3. Sobre o PagSeguro ● Pioneiro e Líder no mercado brasileiro de meios de pagamento online ○ Mais de 600 mil lojas cadastradas ○ Mais de 40 milhões de compradores usam o PagSeguro ● Aplicativo PagSeguro lançado em Abril de 2013 ○ Mais de 2 milhões de downloads (Android) ○ Presente nas plataformas Android, iOS e Windows Phone ○ Uso de tecnologias como Audio Jack Data Transmission e Bluetooth
  • 4. Agenda ● Testes de software ○ Automação de testes ○ Motivadores ● Histórico no PagSeguro ● Aprendendo por exemplo ○ Implementação básica de testes locais ○ Evolução da arquitetura de testes ○ Expandindo para testes End-to-End ● Considerações finais
  • 5. Dimensões de qualidade Segundo Philippe Kruchten¹, existem pelo menos três dimensões de qualidade que precisam ser consideradas antes de se iniciar um ciclo de testes ● Confiança ● Funcionalidade ● Performance 1 The rational unified process: An introduction (boston, addison-Wesley, 1999)
  • 6. Testes automatizados Permitem: ● Definir uma linha processual que pode ser executada inúmeras vezes para avaliar diversas características da aplicação ● Agendar a execução de testes com base em regras ou eventos ● Documentar as funcionalidades implementadas de modo que elas possam ser validadas
  • 7. Motivadores ● Garantir o nível de qualidade das entregas ● Rápida evolução do produto ● Permitem avaliar diversos cenários e condições ● Maior liberdade aos QA’s para testes exploratórios
  • 8. Histórico no PagSeguro ● Calabash ○ Baseado no Cucumber ○ Código em Ruby ○ Possibilidade de reutilização para iOS ● Robotium ○ Código em Java ○ Maior facilidade para trabalhar com Android ● Espresso ○ Comandos mais legíveis ○ Fornecido pelo Google
  • 9. Caso de Uso - Tela de login ● Usuário deve fornecer email e senha; ● Se o par (email e senha) estiver incorreto, sinalizar ao usuário ● Se estiverem corretos uma mensagem de sucesso deve ser exibida ● Havendo uma falha de rede oferecer a opção de tentar novamente
  • 10. Usando o Repositório ● Para facilitar o acompanhamento o código desta apresentação está disponível no seguinte repositório: https://bitbucket.org/rod_a_r/testes-automatizados.git ● O campo amarelo no canto superior representa a TAG com o código referente ao momento atual da apresentação 0.2.0
  • 11. Configurando o Espresso Vamos configurar nossa aplicação seguindo as recomendações da documentação do Espresso disponibilizada em: https://google.github.io/android-testing-support-library/docs/espresso/setup/index.html ● Desabilitar as animações no dispositivo; ● Adicionar as dependências do Espresso no arquivo build.gradle do módulo; ● Configurar o Instrumentation Runner no mesmo arquivo. 0.2.0
  • 12. Configurando o Espresso Error:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (24.1.1) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details. Existem algumas soluções para o problema: ● Excluir o módulo defeituoso (support-annotations) das bibliotecas que causaram o conflito (espresso-core e rules) ● Forçar a versão a ser utilizada para garantir compatibilidade http://stackoverflow.com/questions/28999124/resolved-versions-for-app-22-0-0-and-test-app-21-0-3-differ 0.2.1
  • 13. Escrevendo os primeiros testes Entendendo o funcionamento do Espresso: ● Como escrever o teste? ● Verificando valores, visibilidade e comportamento ● Efetuando ações ● Rodando os primeiros testes https://google.github.io/android-testing-support-library/docs/espresso/setup/index.html#add-the-first-test 0.3.0
  • 14. Tratando diferentes tamanhos de tela ● Qual o foco do seu teste? ○ Layout? ○ Experiência do usuário? ○ Funcionalidade? ● O que é mais importante para seu produto? ○ Aparecer o logo da sua empresa? ○ Garantir o acesso do usuário? 0.3.1
  • 15. Tratando diferentes tamanhos de tela ● Ferramentas para resolver ○ isDisplayed() ○ doesNotExist() ○ scrollTo() 0.3.1
  • 16. Testando múltiplos cenários ● Usar servidor de QA para realizar chamadas ● Resposta Hardcoded ● Mocks ● Serviço Local 0.4.0
  • 17. Simulando a entrada de dados Quando teclado vira um problema... ● Entrada de valores durante os testes ● typeText() ● closeSoftwareKeyboard() ● windowSoftInputMode https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft 0.4.1
  • 18. Espresso - Resumo ● Espresso permite: ○ Verificar a presença de elemento baseando-se em regras (matchers) ○ Efetuar ações em elementos encontrados através de regras ● Problemas: ○ Conflito de versões entre bibliotecas de teste e de uso do app ○ Falhas do mecanismo de teste podem impedir a execução dos mesmos ● Dificuldades: ○ Simular diversos cenários sem impactar na execução do app em produção ○ Os diversos tamanhos de dispositivos devem ser tratados conforme a necessidade ○ Garantir um ambiente estável com pouco código
  • 19. Usando mocks ● São objetos que simulam o comportamento de objetos reais ● Permitem fornecer contexto em testes automatizados ● Facilitam a escrita do teste Literatura: ● https://www.amazon.com.br/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627 ● https://www.amazon.com/gp/product/B00QS2HXUO/
  • 20. Configurando o Mockito Etapas: ● Adicionando a dependência no build.gradle ● Revisando o código para injeção dos mocks ● Alterando o comportamento de início da Activity durante o teste ● Alterando o primeiro teste Links: http://mockito.org/ 1.0.0
  • 21. Configurando o Mockito Problemas com a geração de código: ● Originalmente o Mockito gera .class ● Para que o Android possa reconhecer as classes geradas elas devem ser compatíveis com a Dalvik VM (.dex) ● Para isso usamos uma biblioteca chamada DEXMAKER Links: https://github.com/crittercism/dexmaker 1.0.1
  • 22. Utilizando o Mockito ● Criando um objeto “mockado” com mock(class) ● Configurando seu mock ○ doReturn… when… ○ doThrow… when… ○ doAnswer… when... 1.1.0
  • 23. Mockito - Resumo ● Usando mocks você consegue: ○ Evitar implementações de interface desnecessárias ○ Fornecer contexto para diversos cenários de teste ○ Facilitar a escrita dos testes ○ Evitar a necessidade de código Hard Coded em arquivos de produção ● Problemas e dificuldades: ○ Conversão das classes geradas pelo Mockito para DEX ○ Necessidade de iniciar manualmente a Activity para testes ○ Eventualmente surgem alguns problemas referentes aos código gerado pelo DEX
  • 24. Injeção de dependências ● Baseado no conceito de Inversão de Controle (IoC) onde a classe foco não deve se preocupar em criar instâncias de suas dependências ● Temos uma figura central cuja responsabilidade é fornecer das dependências requeridas por outras classes ● Permite diminuir o acoplamento entre classes ● Facilita a escrita de testes Links: http://martinfowler.com/articles/injection.html http://www.vogella.com/tutorials/Dagger/article.html
  • 25. Configurando o Dagger ● Declarando as dependências ● Configurando o processador de anotações ● Declarando módulos, componentes e dependências ● Método inject Links: http://google.github.io/dagger/ https://bitbucket.org/hvisser/android-apt 2.0.0
  • 26. Dagger - Resumo ● Mais boilerplate code ● Melhor controle das dependências e configurações para testes ● Dificulta o envio de código de testes para produção
  • 27. Testes End-To-End: Rx, Retrofit e SoapUI ● Utilização do Rx para facilitar o tratamento de chamadas ao serviço de Login em uma thread separada ● Retrofit para realizar as chamadas ao serviço de Login ● Uso do Soap UI para simular o serviço de Login Links: https://github.com/ReactiveX/RxJava http://square.github.io/retrofit/ https://www.soapui.org/ 3.0.0
  • 28. Configurandos os servicos no Soap UI ● Criando um projeto de serviço ● Criando um endpoint ● Criando as respostas do EndPoint ● Definindo as respostas com base no Request usando Groove 3.1.0
  • 29. Escrevendo testes End-to-End ● Configuração do ambiente para uso do serviço ● Implementação da camada de consumo do serviço ● Sincronismo da execução do teste ● IdlingResource 3.1.0
  • 30. Categorizando testes ● Por que categorizar? ● Que tipo de categorias devo criar? ● Como categorizar? ● Executando categorias de testes 3.2.0
  • 31. Dicas de última hora ● Desligue as animações durante a execução dos testes para não confundir o Espresso ● Caso comece a receber erros do tipo “No tests found” tente um Clean Project ou reinicie o Android Studio ● Procure categorizar os tipos de Teste de modo a agrupar pela característica do teste. ● Utilize nomenclaturas de fácil entendimento para ter clareza do que o teste realiza
  • 32. Estude, pesquise, pergunte... “I have not failed. I've just found 10,000 ways that won't work.” Thomas A. Edison