SlideShare uma empresa Scribd logo
1 de 56
Workshop
Introdução à automação de testes com Espresso
Thiago Lopes da Silva ( Lopes )
thiagolopessilva
thiagoolsilva
Por que usar o Espresso?
Thread.sleep(3000);
Desafios
Problemas comuns
Sugestão
Page object pattern + espresso + UiAutomator
Nomeclatura de método
given_Preconditions_When_StateUnderTest_Then_ExpectedBehavior
Ex:
given_UserIsAuthenticated_When_InvalidAccountNumberIsUsedToWithdrawMoney_The
n_TransactionsWillFail
Ferramentas
Sintaxe
Espresso.onView(Matcher)
.perform(ViewAction)
.check(ViewAssertion)
Entendendo o Espresso
Espresso.onView(Matcher)
...
@Test
public void clickAddNoteButton_opensAddNoteUi() throws Exception {
// Click on the add note button
onView(withId(R.id.fab_add_notes)).perform(click());
// Check if the add note screen is displayed
onView(withId(R.id.add_note_title)).check(matches(isDisplayed()));
}
https://goo.gl/JufQiR
@Test
public void clickAddNoteButton_opensAddNoteUi() throws Exception {
// Click on the add note button
onView(withId(R.id.fab_add_notes)).perform(click());
// Check if the add note screen is displayed
onView(withId(R.id.add_note_title)).check(matches(isDisplayed()));
}
https://goo.gl/JufQiR
Espresso.onView(Matcher)
+
ViewMatchers
Entendendo o Espresso
...
.perform(ViewAction)
...
@Test
public void Given_UserAddingANewNotes_Then_NoteWillBeSavedSuccessful(){
...
onView(withId(R.id.add_task_title)).perform(typeText(title),
closeSoftKeyboard());
...
}
https://goo.gl/JufQiR
.perform(ViewAction)
+
ViewActions
Entendendo o Espresso
...
...
.check(ViewAssertion)
@Test
public void Given_UserAddingANewNotes_Then_NoteWillBeSavedSuccessful(){
...
onView(withText(TITLE)).check(matches(not(isDisplayed())));
...
}
https://goo.gl/JufQiR
.check(ViewAssertion)
+
ViewAssertions
git clone https://github.com/thiagoolsilva/android-testing.git --branch lecture_sample
Coding
Importar o projeto
BasicProject
Coding
Masantes...
Activity
ou
Fragment
Como acho as Activitys?
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
ou
adb logcat -s "ActivityManager"
Como o espresso acha os componentes?
id
ou
Texto
ou
CustomMatchers
Espresso.onView(ViewMatchers.withId(id))
Espresso.onView(ViewMatchers.withText())
onView(MyCustomMatcher)
DDMS :)
Algumas dicas
● Execução manual
● Cuidado com os testes
● Cuidado com o estado do device
● Use qualificadores de testes nas suites (@SmallTest, @MediumTest,
@LargeTest )
● Cuidado com fluxos externos ( settings )
● Evite God Métodos
● Desabilite as animações no celular *
Qualificadores de testes
https://goo.gl/PAo
XwS
Usem o canal espresso-testes no slack
Vamos a prática
Teste 01
Título:
Tela Principal - inserir o nome completo com sucesso
Descrição:
O usuário deverá ser hábil para colocar o seu nome na tela, verificando o nome digitado no topo da tela
quando clicar no “botão mudar texto”
Passos para reproduzir:
1. Na tela principal, colocar o nome composto com 20 caracteres
2. Clicar no botão mudar texto
Resultado esperado:
1. O nome do usuario deverá ser mostrado no topo da tela principal
Teste 02
Título:
Tela Principal - Recebimento do nome do usuário com sucesso na segunda tela
Descrição:
O usuário deverá ser hábil de enviar o nome do mesmo com sucesso para a segunda tela
Passos para reproduzir:
1. Na tela principal, colocar o nome composto com 20 caracteres
2. Clicar no botão abrir Activity e mudar o texto
Resultado esperado:
1. O nome do usuario deverá ser recebido com sucesso na segunda tela
Teste 03
Título:
Tela Secundária - Ser possível habilitar e desabilitar a visibilidade na segunda tela
Descrição:
O usuário deverá ser hábil para habilitar e/ou desabilitar o texto recebido
Passos para reproduzir:
1. Na tela principal, colocar o nome composto com 20 caracteres
2. Clicar no botão Open activity and change text
3. Clicar no botão habilitar/desabilitar a visibilidade
Resultado esperado:
1. O texto recebido deve ficar invisível/visível para o usuário
Trabalhando com Listas
Listas e seus adapters
SimpleAdapter
ArrayAdapter
CursorAdapters
Adapter customizado
RecyclerView
Misericordia pra que isso
tudo?
● Adapter x problemas
● Performance
● Complexidade
● Codificação
Listas x testes
Importar o projeto
DataAdapterSample
Coding
Sintaxe
onData(Matcher dataMatcher)
.inAdapterView(Matcher<View> adapterMatcher)
.perform(ViewActions)
Caracteristicas
● Chave x valor
● onChildView(ViewMatchers)
ROW_TEXT ROW_ENABLEDItem: 0 true/false
onData(Matcher dataMatcher)
hasEntry(equalTo(key, is(value))
inAdapterView(ViewMatchers)
onChildView(ViewMatchers)
Teste 04
Título:
Tela Principal - O último item da lista deve ficar totalmente visível
Descrição:
O usuário após um scroll completo, deve ser hábil de ver o último item da lista ( item: 99 )
Passos para reproduzir:
1. Entra na tela principal
2. Fazer um scroll completo
Resultado esperado:
1. O item item: 99 deve estar visível
Teste 05
Título:
Tela Principal - O último item da lista não deve ficar visível até usar uma rolagem
Descrição:
O usuário não deverá ver o último item da lista até rolar a barra de rolagem até o final da lista
Passos para reproduzir:
1. Entra na tela principal
Resultado esperado:
1. O item item: 99 não deve estar visível
Teste 06
Título:
Tela Principal - O item clicado na lista deve ser mostrado com sucesso no topo da tela
Descrição:
O usuário deve ser hábil de clicar em um item da lista recebendo o valor do item clicado na parte superior da
lista
Passos para reproduzir:
1. Entra na tela principal
2. Clicar em um item da lista
Resultado esperado:
1. O item selecionado deve ser mostrado com sucesso na parte superior da lista
Teste 07
Título:
Tela Principal - Ser possível mudar o estado do checkbox sem mostrar o item clicado na parte superior
Descrição:
O usuário deve ser hábil para clicar no checkbox sem exibir o item clicado na parte superior da lista
Passos para reproduzir:
1. Entra na tela principal
2. Clicar em um checkbox de um item aleatório
Resultado esperado:
1. Não deve ser exibido o item clicado na parte superior da lista
RecyclerView
● View x runtime
● Uso da lib espresso-contrib
Caracteristicas
Algumas dicas
de
código
1. Achar um elemento na lista e clicar
onView(ViewMatchers.withId())
.perform(
actionOnItem(hasDescendant(withText("txt”))
, ViewActions.click()));
2. Vai até uma posição especifica da lista
onView(withId())
.perform(scrollTo(hasDescendant(withText(containsString("txt”)))))
.check(ViewAssertions.matches(isDisplayed()));
Importar o projeto
RecyclerViewSample
Coding
Teste 09
Título:
Tela Principal - O usuário deverá ver com sucesso o item 30 da lista
Descrição:
O usuário deverá fazer um scroll até encontrar o item 30 na lista
Passos para reproduzir:
1. Entra na tela principal
2. Fazer um scroll até a encontrar o item 30
Resultado esperado:
1. O item item 30 deve estar visível na tela
Teste 10
Título:
Tela Principal - Fazer um scroll completo e não achar um item inválido
Descrição:
O usuário deve fazer um scroll até o final da lista. O item Lopes não deve ser encontrado na lista
Passos para reproduzir:
1. Entra na tela principal
2. Fazer um scroll até o final da lista
Resultado esperado:
1. O item lopes não deve ser encontrado
Plus +
● Criar os casos de testes
● Criar os testes de UI
● Enviar o código para thiagoolsilva@gmail.com
Desafio
git clone https://github.com/thiagoolsilva/automation-lecture.git --branch lecture_sample
Coding
Importar o projeto
BasicProject-Espresso
Coding
Thiago Lopes da Silva ( Lopes )
thiagolopessilva
thiagoolsilva
Obrigado

Mais conteúdo relacionado

Mais procurados

Banco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface GraficaBanco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface GraficaDivani Barbosa
 
Apostila excel
Apostila excelApostila excel
Apostila excelmarypi02
 

Mais procurados (6)

Banco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface GraficaBanco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface Grafica
 
Como Implementar Um Menu Ribbon em C#
Como Implementar Um Menu Ribbon em C#Como Implementar Um Menu Ribbon em C#
Como Implementar Um Menu Ribbon em C#
 
Aula 7
Aula 7 Aula 7
Aula 7
 
Apostila excel
Apostila excelApostila excel
Apostila excel
 
Joptionpane
JoptionpaneJoptionpane
Joptionpane
 
Hands on Labs - Windows Forms
Hands on Labs - Windows FormsHands on Labs - Windows Forms
Hands on Labs - Windows Forms
 

Semelhante a Workshop espresso

Uma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosUma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosGabriel Schade Cardoso
 
Capítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de ProjetoCapítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de ProjetoMarcio Palheta
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Wennder Santos
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Conexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidConexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidSuelen Carvalho
 
Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3Vanderson Silva
 
Framework de testes cecom
Framework de testes cecomFramework de testes cecom
Framework de testes cecomlucasbarsand
 
GURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objetoGURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objetoElaine Naomi
 
Automatize seus testes de UI com a Espresso!
Automatize seus testes de UI com a Espresso!Automatize seus testes de UI com a Espresso!
Automatize seus testes de UI com a Espresso!Ramon Ribeiro Rabello
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 

Semelhante a Workshop espresso (20)

Academia ABAP
Academia  ABAPAcademia  ABAP
Academia ABAP
 
Java10
Java10Java10
Java10
 
Uma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosUma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de erros
 
Capítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de ProjetoCapítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de Projeto
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Conexao Java - Sua primeira app Android
Conexao Java - Sua primeira app AndroidConexao Java - Sua primeira app Android
Conexao Java - Sua primeira app Android
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
 
Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3Demoiselle Behave - Parte 3
Demoiselle Behave - Parte 3
 
Framework de testes cecom
Framework de testes cecomFramework de testes cecom
Framework de testes cecom
 
GURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objetoGURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objeto
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Apostila Android
Apostila AndroidApostila Android
Apostila Android
 
Aula2
Aula2Aula2
Aula2
 
Automatize seus testes de UI com a Espresso!
Automatize seus testes de UI com a Espresso!Automatize seus testes de UI com a Espresso!
Automatize seus testes de UI com a Espresso!
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Inventor
InventorInventor
Inventor
 
2335 inventor
2335 inventor2335 inventor
2335 inventor
 
Debugging node
Debugging nodeDebugging node
Debugging node
 

Workshop espresso

Notas do Editor

  1. Pedir para rodarem o projeto so para verem o projeto sendo rodado
  2. Pedir para rodarem o projeto para verem o projeto sendo rodado
  3. Fazer na prática
  4. Fazer na prática
  5. Faça o teste manual para ir anotando os passos ( Comentar ) Tente fazer testes independentes Os testes de UI/Sistemas são frágeis ( flaky ) Os fluxos externos são quando o app usa alguma dependência externa, tais como entra na tela de settings. Comentar que as animações devem ser desabilitadas devido a ser requisito do espresso
  6. Faça o teste manual para ir anotando os passos ( Comentar ) Tente fazer testes independentes Os testes de UI/Sistemas são frágeis ( flaky )
  7. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  8. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  9. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  10. Pedir para rodarem o projeto so para verem o projeto sendo rodado
  11. Pedir para rodarem o projeto so para verem o projeto sendo rodado
  12. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  13. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  14. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  15. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  16. Pedir para rodarem o projeto so para verem o projeto sendo rodado
  17. Pedir para rodarem o projeto so para verem o projeto sendo rodado
  18. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  19. Importar o projeto no AndroidStudio Mostrar rapidamente como configurar o espresso e dizer que tem um link oficial no qual fala sobre estes passos
  20. Pedir para rodarem o projeto so para verem o projeto sendo rodado
  21. Pedir para rodarem o projeto so para verem o projeto sendo rodado
  22. Pedir para rodarem o projeto so para verem o projeto sendo rodado