SlideShare uma empresa Scribd logo
https://walmyrfilho.com
Criando testes
automatizados
rápidos e robustos
com Cypress
MTC dendicasa 2021
Sobre mim
Meu nome é Walmyr Filho, sou um engenheiro
de software especializado em automação de
testes e integração contínua, embaixador do
Cypress.io, autor do blog TAT e do canal TAT,
instrutor de cursos de automação de testes
web no Udemy, mentor e um cara apaixonado
por skateboarding, comida vegana, música,
tatuagens e minha família.
O problema dos testes lentos
Testes instáveis (flaky)
Boas práticas p/ testes rápidos e confiáveis
Mão-na-massa
Perguntas e respostas
Surpresa!
Agenda
Pontos de discussão
Testes leeentos
E os problemas que eles trazem junto consigo
ATRASAM O TIME
Gosto de um pipeline de
integração contínua de não mais
que 10 minutos. Mais que isso e
problemas começam a voltar
quando são mais caros de
corrigir.
ATRASAM ENTREGAS OU
COMPROMETEM A QUALIDADE
É arriscado entregar um software
sem a garantia de que todos os
testes de regressão estão
passando. Mas e quando são
muito lentos uai?
SÃO "LARGADOS DE ΜÃO"
É isso mesmo, testes que
atrasam o time não são uma
alternativa para times em busca
de agilidade.
Testes instáveis
(os famosos flakey tests)
EXECUÇÃO 1
Ô trem bão!
Passou!
EXECUÇÃO2
E nenhum código mudou desde a
última execução.
Falhou ) :
EXECUÇÃO4
Uai, aquela falha devia ser alguma
instabilidade no ambiente.
Passou!
EXECUÇÃO 5
Vixe, esse trem é flaky!
Falhou :(
EXECUÇÃO3
E nenhum código mudou desde a
última execução de novo.
Passou!
Faça autenticação de forma programática
Boas práticas
Testes devem ser independentes uns dos outros
Crie mecanismos para o controle do estado da app
Selecione elementos com atributos data-*
Não tente armazenar comandos do Cypress em variáveis
Testes não devem ser muito pequenos nem muito grandes
Não teste aplicações que você não controla
Não use os hooks after e afterEach
Não use cy.wait(Number)
Inicialize o servidor antes de iniciar os testes
Boas práticas - continuação
Configure uma URL base (baseUrl)
Já que sobrou espaçao, fica o convite para conhecerem a playlist
Explorando a Cypress RWA no canal Talking About Testing no YouTube.
https://bit.ly/3iOeykQ
Testes independentes
Além disso, testes independentes facilitam na
paralelizacão de sua execução.
Testes automatizados devem ser capazes de
serem executados de forma isolada, sem a
necesidade de que outro teste tenha executado
para criar algum estado na aplicação em teste.
A falha em um teste não deve impactar no
resultados de outros testes.
Dica: utilize o hook beforeEach quando
precisar executar passos repetidos para todos
os testes de um determinado describe ou
context.
Autenticação
programática
Ao adiconar mecanismos para realizar login de
forma programática, os testes ficam mais rápidos
e independentes.
Realizar login via interface gráfica de usuário
como pré-condição de todos testes é custoso (em
termos de tempo de execução), além de tornar os
testes dependentes, o que por si só já é uma má
prática.
Um botão de login desabilitado por uma erro de
HMTL, por exemplo, não deveria quebrar toda
uma suíte de testes.
Mecanismos
para criação de estado
Alguns exemplos desses mecanismos são:
chamadas de API para criação de recursos;
comunicação com o banco de dados via tasks; ou
a execução de scripts à nível de sistema
operacional.
Ao criar tais mecanismos, garantimos testes
completamente desacoplados uns dos outros,
não precisamos de abstrações que adicionam
complexidade aos testes, tais como Page
Objects, por exemplo, e garantimos testes
rápidos e direto-ao-ponto.
Atributos data-*
Adicionando atributos aos elementos do
frontend, tais como: data-test, data-testid, ou
data-cy, adicionamos o que chamo de
"testabilidade" na aplicação, visto que tais
atributos são especificamente criados para fins
de testes, diminuindo a chance de mudanças no
frontend quebraem os testes.
Não faça isso:
var el = cy.get('seletor')
cy.get('@myBtn).click()
Lembre-se. Cypress não é Selenium!
O Cypress possui uma arquitura própria, onde
apesar de em muitos casos permitir a escrita de
código que parece síncrono, mesmo que seja
assíncrono (visto que coloca cada comando em
uma fila para posterior execução), não é possível
fazer algo como:
const myBtn = cy.contains('button', 'My button')
myBtn.click()
Porém, você pode fazer:
cy.contains('button', 'My button').as('myBtn)
Não teste aplicações
externas
Para garantir que tais serviços estão de acordo
com sua aplicação, você pode ter uma suite de
smoke-test, por exemplo, ou testes de contrato.
Depender do login do Google via GUI para seus
testes, ou de alguma API de terceiros pode tornar
seus testes instáveis, visto que mudanças nestes
serviços (os quais você não controla) irão quebrar
seus testes, mesmo que esteja tudo certo do "do
seu lado".
Testes muito pequenos
ou muito grandes
Porém, cuidado com testes muuuito grandes.
Quem sabe estes estão testando muitas coisas
não relacionadas e poderiam ser quebrados em
testes menores.
Testes end-to-end não são testes de unidade.
Devido ao seu custo de execução, vale a pena
adicionar mais de uma verificação por teste, para
otimizar seu tempo.
Não use os hooks
after e afterEach
Como boa prática, faça qualquer limpeza antes
da execução dos testes, usando o hook
beforeEach, por exemplo.
Caso algo dê errado durante a execução dos
testes, tais hooks correm o risco de não serem
executados, deixando "lixo" na aplicação.
Não use cy.wait(5000)
cy.wait('@myReq')
O Cypress já possui esperas automáticas com
diferentes timeout defaults para esperar por
elementos estarem visíveis, por animações
acabarem, por requisições serem enviadas e
respondidas e por páginas serem carregadas.
O que você pode fazer, para tornar seus testes
ainda mais robustos, é aguardor por elementos
estarem visíveis:
Ex.: cy.get('[data-cy="avatar"]').should('be.visible')
Ou então, você pode esperar por uma deteminada
requisição a qual você deu um alias.
Ex2.: cy.intercept(...).as('myReq')
...
start-server-and-test
Utilize mecanismos, tais como o uso da biblioteca
star-server-and-test, para inicializar o servidor da
aplicação antes da execução dos testes,
garantindo que a mesma será executada com o
código correto e que os testes serão executados
somente quando a aplicação estiver respondendo.
Além disso, tal abordagem ajudará na execução
dos testes em um servidor de integração contínua.
Defina a baseUrl
Além disso, tal URL pode ser sobrescrita por meio
de um arquivo cypress.env.json, variáveis de
ambiente (CYPRESS_ ou cypress_), linha de
comando, plugins, etc, possibilitando a execução
dos mesmos testes contra diferentes ambientes.
Ao definir a baseUrl no arquivo de configuração
(cypress.json), seus testes podem visitar as
páginas via URLs relativas.
Seguindo essas boas práticas, você
terá testes rápidos e robustos, nos
quais seu time confia e ajuda a
manter e evoluir.
"Mão-na-massa"
Cypress RWA
MTC dendicasa 2021
Alguma pergunta?
Ficarei feliz em responder!
Clonar o projeto
https://github.com/cypress-
io/cypress-realworld-app, acessá-
lo e rodar yarn install
Abrir o runner e filtrar pelo teste
transaction-view.spec.ts
Executar a suite e tirar uma
screenshot dos testes passando
E postar a screenshot no LinkedIn
com o texto "Eu vi a talk de
Cypress do Walmyr no
#MTCDendiCasa2021" (marcando
MTC, o Cypress.io e eu)
Tenho 10 cupons grátis pro meu curso
de Cypress intermediário, para os
primeiros que realizarem os seguintes
passos:
1.
2.
3.
4.
Desafio/Surpresa!
https://docs.cypress.io/guides/
references/best-practices
https://github.com/cypress-
io/cypress-realworld-app
Referências
https://walmyrfilho.com
Muito obrigado!
MTC dendicasa 2021

Mais conteúdo relacionado

Mais procurados

Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
André Thiago
 
Cypress Automation
Cypress  AutomationCypress  Automation
Cypress Automation
Susantha Pathirana
 
Test Automation and Selenium
Test Automation and SeleniumTest Automation and Selenium
Test Automation and Selenium
Karapet Sarkisyan
 
Cypress testing
Cypress testingCypress testing
Cypress testing
Vladyslav Romanchenko
 
Automated testing with Cypress
Automated testing with CypressAutomated testing with Cypress
Automated testing with Cypress
Yong Shean Chong
 
Automated Testing with Agile
Automated Testing with AgileAutomated Testing with Agile
Automated Testing with Agile
Ken McCorkell
 
Automation - web testing with selenium
Automation - web testing with seleniumAutomation - web testing with selenium
Automation - web testing with selenium
Tzirla Rozental
 
Test Automation Framework Designs
Test Automation Framework DesignsTest Automation Framework Designs
Test Automation Framework Designs
Sauce Labs
 
Introduction to Integration Testing With Cypress
Introduction to Integration Testing With CypressIntroduction to Integration Testing With Cypress
Introduction to Integration Testing With Cypress
Erez Cohen
 
Automation Framework Presentation
Automation Framework PresentationAutomation Framework Presentation
Automation Framework Presentation
Ben Ngo
 
Test Automation - Keytorc Approach
Test Automation - Keytorc Approach Test Automation - Keytorc Approach
Test Automation - Keytorc Approach
Keytorc Software Testing Services
 
Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?
Shivam Bharadwaj
 
Test Automation
Test AutomationTest Automation
Test Automation
rockoder
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
Aneesh Rangarajan
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
Anirudh Raja
 
Arquitetura de Automação de Teste
Arquitetura de Automação de TesteArquitetura de Automação de Teste
Arquitetura de Automação de Teste
Elias Nogueira
 
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
Elias Nogueira
 
End to end test automation with cypress
End to end test automation with cypressEnd to end test automation with cypress
End to end test automation with cypress
Kushan Shalindra Amarasiri - Technical QE Specialist
 
Selenium with java
Selenium with javaSelenium with java
Selenium with java
Gousalya Ramachandran
 
Apresentação rest api
Apresentação rest apiApresentação rest api
Apresentação rest api
Matheus Petroni
 

Mais procurados (20)

Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
 
Cypress Automation
Cypress  AutomationCypress  Automation
Cypress Automation
 
Test Automation and Selenium
Test Automation and SeleniumTest Automation and Selenium
Test Automation and Selenium
 
Cypress testing
Cypress testingCypress testing
Cypress testing
 
Automated testing with Cypress
Automated testing with CypressAutomated testing with Cypress
Automated testing with Cypress
 
Automated Testing with Agile
Automated Testing with AgileAutomated Testing with Agile
Automated Testing with Agile
 
Automation - web testing with selenium
Automation - web testing with seleniumAutomation - web testing with selenium
Automation - web testing with selenium
 
Test Automation Framework Designs
Test Automation Framework DesignsTest Automation Framework Designs
Test Automation Framework Designs
 
Introduction to Integration Testing With Cypress
Introduction to Integration Testing With CypressIntroduction to Integration Testing With Cypress
Introduction to Integration Testing With Cypress
 
Automation Framework Presentation
Automation Framework PresentationAutomation Framework Presentation
Automation Framework Presentation
 
Test Automation - Keytorc Approach
Test Automation - Keytorc Approach Test Automation - Keytorc Approach
Test Automation - Keytorc Approach
 
Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?
 
Test Automation
Test AutomationTest Automation
Test Automation
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
 
Arquitetura de Automação de Teste
Arquitetura de Automação de TesteArquitetura de Automação de Teste
Arquitetura de Automação de Teste
 
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
 
End to end test automation with cypress
End to end test automation with cypressEnd to end test automation with cypress
End to end test automation with cypress
 
Selenium with java
Selenium with javaSelenium with java
Selenium with java
 
Apresentação rest api
Apresentação rest apiApresentação rest api
Apresentação rest api
 

Semelhante a Como criar testes rápidos e robustos com Cypress

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
Fabrício Campos
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
Autotic
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
Heider Lopes
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
Fabrício Vargas Matos
 
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
Gabriela Patuci
 
cypress.pdf
cypress.pdfcypress.pdf
cypress.pdf
Rafael Martins
 
Ibm app scan
Ibm app scanIbm app scan
Ibm app scan
Reinaldo Junior
 
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
tdc-globalcode
 
ibm_appscan
ibm_appscanibm_appscan
ibm_appscan
Reinaldo Junior
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
Joberto Diniz
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
Qualister
 
Paletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoPaletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojo
flavio1110
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
Thiago Ghisi
 
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
Antonio Lobato
 
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
Mario Mendonça
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
Jackson Veroneze
 
Tipos de automação de teste
Tipos de automação de testeTipos de automação de teste
Tipos de automação de teste
Marcos Pessoa
 
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
Elias Nogueira
 
GOTEST-Aula5-Automacao-Parte2.pdf
GOTEST-Aula5-Automacao-Parte2.pdfGOTEST-Aula5-Automacao-Parte2.pdf
GOTEST-Aula5-Automacao-Parte2.pdf
RodolphoCesar2
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
Elias Nogueira
 

Semelhante a Como criar testes rápidos e robustos com Cypress (20)

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
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
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
 
cypress.pdf
cypress.pdfcypress.pdf
cypress.pdf
 
Ibm app scan
Ibm app scanIbm app scan
Ibm app scan
 
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
 
ibm_appscan
ibm_appscanibm_appscan
ibm_appscan
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
Paletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoPaletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojo
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
 
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
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Tipos de automação de teste
Tipos de automação de testeTipos de automação de teste
Tipos de automação de teste
 
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
 
GOTEST-Aula5-Automacao-Parte2.pdf
GOTEST-Aula5-Automacao-Parte2.pdfGOTEST-Aula5-Automacao-Parte2.pdf
GOTEST-Aula5-Automacao-Parte2.pdf
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
 

Mais de Walmyr Lima e Silva Filho

Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Walmyr Lima e Silva Filho
 
Writing cypress tests without cucumber
Writing cypress tests without cucumberWriting cypress tests without cucumber
Writing cypress tests without cucumber
Walmyr Lima e Silva Filho
 
Component testing with cypress
Component testing with cypressComponent testing with cypress
Component testing with cypress
Walmyr Lima e Silva Filho
 
Esquenta QAX
Esquenta QAXEsquenta QAX
Agile Testing - A quality culture in the company's core business
Agile Testing - A quality culture in the company's core businessAgile Testing - A quality culture in the company's core business
Agile Testing - A quality culture in the company's core business
Walmyr Lima e Silva Filho
 
How to kill software quality in five steps
How to kill software quality in five stepsHow to kill software quality in five steps
How to kill software quality in five steps
Walmyr Lima e Silva Filho
 
Lessons learned as a software engineer working at appear.in
Lessons learned as a software engineer working at appear.inLessons learned as a software engineer working at appear.in
Lessons learned as a software engineer working at appear.in
Walmyr Lima e Silva Filho
 
Oslo QA Meetup
Oslo QA MeetupOslo QA Meetup
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocd
Walmyr Lima e Silva Filho
 
Agile testing coach Agile Lean Ireland 2017
Agile testing coach   Agile Lean Ireland 2017Agile testing coach   Agile Lean Ireland 2017
Agile testing coach Agile Lean Ireland 2017
Walmyr Lima e Silva Filho
 
Protractor tests no processo de integração contínua
Protractor tests no processo de integração contínuaProtractor tests no processo de integração contínua
Protractor tests no processo de integração contínua
Walmyr Lima e Silva Filho
 
Workshop - E2e tests with protractor
Workshop - E2e tests with protractorWorkshop - E2e tests with protractor
Workshop - E2e tests with protractor
Walmyr Lima e Silva Filho
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
Walmyr Lima e Silva Filho
 
Protractor style guide - Agile Testers Conference 2016
Protractor style guide - Agile Testers Conference 2016Protractor style guide - Agile Testers Conference 2016
Protractor style guide - Agile Testers Conference 2016
Walmyr Lima e Silva Filho
 
Primeiros passos com protractor - GUTS-SC
Primeiros passos com protractor - GUTS-SCPrimeiros passos com protractor - GUTS-SC
Primeiros passos com protractor - GUTS-SC
Walmyr Lima e Silva Filho
 
Protractor + visual review 2
Protractor + visual review 2Protractor + visual review 2
Protractor + visual review 2
Walmyr Lima e Silva Filho
 
Agile testing coach - Agile Trends Floripa
Agile testing coach - Agile Trends FloripaAgile testing coach - Agile Trends Floripa
Agile testing coach - Agile Trends Floripa
Walmyr Lima e Silva Filho
 
Palestra agile testing coaching
Palestra agile testing coaching Palestra agile testing coaching
Palestra agile testing coaching
Walmyr Lima e Silva Filho
 

Mais de Walmyr Lima e Silva Filho (18)

Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
 
Writing cypress tests without cucumber
Writing cypress tests without cucumberWriting cypress tests without cucumber
Writing cypress tests without cucumber
 
Component testing with cypress
Component testing with cypressComponent testing with cypress
Component testing with cypress
 
Esquenta QAX
Esquenta QAXEsquenta QAX
Esquenta QAX
 
Agile Testing - A quality culture in the company's core business
Agile Testing - A quality culture in the company's core businessAgile Testing - A quality culture in the company's core business
Agile Testing - A quality culture in the company's core business
 
How to kill software quality in five steps
How to kill software quality in five stepsHow to kill software quality in five steps
How to kill software quality in five steps
 
Lessons learned as a software engineer working at appear.in
Lessons learned as a software engineer working at appear.inLessons learned as a software engineer working at appear.in
Lessons learned as a software engineer working at appear.in
 
Oslo QA Meetup
Oslo QA MeetupOslo QA Meetup
Oslo QA Meetup
 
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocd
 
Agile testing coach Agile Lean Ireland 2017
Agile testing coach   Agile Lean Ireland 2017Agile testing coach   Agile Lean Ireland 2017
Agile testing coach Agile Lean Ireland 2017
 
Protractor tests no processo de integração contínua
Protractor tests no processo de integração contínuaProtractor tests no processo de integração contínua
Protractor tests no processo de integração contínua
 
Workshop - E2e tests with protractor
Workshop - E2e tests with protractorWorkshop - E2e tests with protractor
Workshop - E2e tests with protractor
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
 
Protractor style guide - Agile Testers Conference 2016
Protractor style guide - Agile Testers Conference 2016Protractor style guide - Agile Testers Conference 2016
Protractor style guide - Agile Testers Conference 2016
 
Primeiros passos com protractor - GUTS-SC
Primeiros passos com protractor - GUTS-SCPrimeiros passos com protractor - GUTS-SC
Primeiros passos com protractor - GUTS-SC
 
Protractor + visual review 2
Protractor + visual review 2Protractor + visual review 2
Protractor + visual review 2
 
Agile testing coach - Agile Trends Floripa
Agile testing coach - Agile Trends FloripaAgile testing coach - Agile Trends Floripa
Agile testing coach - Agile Trends Floripa
 
Palestra agile testing coaching
Palestra agile testing coaching Palestra agile testing coaching
Palestra agile testing coaching
 

Como criar testes rápidos e robustos com Cypress

  • 1. https://walmyrfilho.com Criando testes automatizados rápidos e robustos com Cypress MTC dendicasa 2021
  • 2. Sobre mim Meu nome é Walmyr Filho, sou um engenheiro de software especializado em automação de testes e integração contínua, embaixador do Cypress.io, autor do blog TAT e do canal TAT, instrutor de cursos de automação de testes web no Udemy, mentor e um cara apaixonado por skateboarding, comida vegana, música, tatuagens e minha família.
  • 3. O problema dos testes lentos Testes instáveis (flaky) Boas práticas p/ testes rápidos e confiáveis Mão-na-massa Perguntas e respostas Surpresa! Agenda Pontos de discussão
  • 4. Testes leeentos E os problemas que eles trazem junto consigo ATRASAM O TIME Gosto de um pipeline de integração contínua de não mais que 10 minutos. Mais que isso e problemas começam a voltar quando são mais caros de corrigir. ATRASAM ENTREGAS OU COMPROMETEM A QUALIDADE É arriscado entregar um software sem a garantia de que todos os testes de regressão estão passando. Mas e quando são muito lentos uai? SÃO "LARGADOS DE ΜÃO" É isso mesmo, testes que atrasam o time não são uma alternativa para times em busca de agilidade.
  • 5. Testes instáveis (os famosos flakey tests) EXECUÇÃO 1 Ô trem bão! Passou! EXECUÇÃO2 E nenhum código mudou desde a última execução. Falhou ) : EXECUÇÃO4 Uai, aquela falha devia ser alguma instabilidade no ambiente. Passou! EXECUÇÃO 5 Vixe, esse trem é flaky! Falhou :( EXECUÇÃO3 E nenhum código mudou desde a última execução de novo. Passou!
  • 6. Faça autenticação de forma programática Boas práticas Testes devem ser independentes uns dos outros Crie mecanismos para o controle do estado da app Selecione elementos com atributos data-* Não tente armazenar comandos do Cypress em variáveis Testes não devem ser muito pequenos nem muito grandes Não teste aplicações que você não controla Não use os hooks after e afterEach Não use cy.wait(Number) Inicialize o servidor antes de iniciar os testes
  • 7. Boas práticas - continuação Configure uma URL base (baseUrl) Já que sobrou espaçao, fica o convite para conhecerem a playlist Explorando a Cypress RWA no canal Talking About Testing no YouTube. https://bit.ly/3iOeykQ
  • 8. Testes independentes Além disso, testes independentes facilitam na paralelizacão de sua execução. Testes automatizados devem ser capazes de serem executados de forma isolada, sem a necesidade de que outro teste tenha executado para criar algum estado na aplicação em teste. A falha em um teste não deve impactar no resultados de outros testes. Dica: utilize o hook beforeEach quando precisar executar passos repetidos para todos os testes de um determinado describe ou context.
  • 9. Autenticação programática Ao adiconar mecanismos para realizar login de forma programática, os testes ficam mais rápidos e independentes. Realizar login via interface gráfica de usuário como pré-condição de todos testes é custoso (em termos de tempo de execução), além de tornar os testes dependentes, o que por si só já é uma má prática. Um botão de login desabilitado por uma erro de HMTL, por exemplo, não deveria quebrar toda uma suíte de testes.
  • 10. Mecanismos para criação de estado Alguns exemplos desses mecanismos são: chamadas de API para criação de recursos; comunicação com o banco de dados via tasks; ou a execução de scripts à nível de sistema operacional. Ao criar tais mecanismos, garantimos testes completamente desacoplados uns dos outros, não precisamos de abstrações que adicionam complexidade aos testes, tais como Page Objects, por exemplo, e garantimos testes rápidos e direto-ao-ponto.
  • 11. Atributos data-* Adicionando atributos aos elementos do frontend, tais como: data-test, data-testid, ou data-cy, adicionamos o que chamo de "testabilidade" na aplicação, visto que tais atributos são especificamente criados para fins de testes, diminuindo a chance de mudanças no frontend quebraem os testes.
  • 12. Não faça isso: var el = cy.get('seletor') cy.get('@myBtn).click() Lembre-se. Cypress não é Selenium! O Cypress possui uma arquitura própria, onde apesar de em muitos casos permitir a escrita de código que parece síncrono, mesmo que seja assíncrono (visto que coloca cada comando em uma fila para posterior execução), não é possível fazer algo como: const myBtn = cy.contains('button', 'My button') myBtn.click() Porém, você pode fazer: cy.contains('button', 'My button').as('myBtn)
  • 13. Não teste aplicações externas Para garantir que tais serviços estão de acordo com sua aplicação, você pode ter uma suite de smoke-test, por exemplo, ou testes de contrato. Depender do login do Google via GUI para seus testes, ou de alguma API de terceiros pode tornar seus testes instáveis, visto que mudanças nestes serviços (os quais você não controla) irão quebrar seus testes, mesmo que esteja tudo certo do "do seu lado".
  • 14. Testes muito pequenos ou muito grandes Porém, cuidado com testes muuuito grandes. Quem sabe estes estão testando muitas coisas não relacionadas e poderiam ser quebrados em testes menores. Testes end-to-end não são testes de unidade. Devido ao seu custo de execução, vale a pena adicionar mais de uma verificação por teste, para otimizar seu tempo.
  • 15. Não use os hooks after e afterEach Como boa prática, faça qualquer limpeza antes da execução dos testes, usando o hook beforeEach, por exemplo. Caso algo dê errado durante a execução dos testes, tais hooks correm o risco de não serem executados, deixando "lixo" na aplicação.
  • 16. Não use cy.wait(5000) cy.wait('@myReq') O Cypress já possui esperas automáticas com diferentes timeout defaults para esperar por elementos estarem visíveis, por animações acabarem, por requisições serem enviadas e respondidas e por páginas serem carregadas. O que você pode fazer, para tornar seus testes ainda mais robustos, é aguardor por elementos estarem visíveis: Ex.: cy.get('[data-cy="avatar"]').should('be.visible') Ou então, você pode esperar por uma deteminada requisição a qual você deu um alias. Ex2.: cy.intercept(...).as('myReq') ...
  • 17. start-server-and-test Utilize mecanismos, tais como o uso da biblioteca star-server-and-test, para inicializar o servidor da aplicação antes da execução dos testes, garantindo que a mesma será executada com o código correto e que os testes serão executados somente quando a aplicação estiver respondendo. Além disso, tal abordagem ajudará na execução dos testes em um servidor de integração contínua.
  • 18. Defina a baseUrl Além disso, tal URL pode ser sobrescrita por meio de um arquivo cypress.env.json, variáveis de ambiente (CYPRESS_ ou cypress_), linha de comando, plugins, etc, possibilitando a execução dos mesmos testes contra diferentes ambientes. Ao definir a baseUrl no arquivo de configuração (cypress.json), seus testes podem visitar as páginas via URLs relativas.
  • 19. Seguindo essas boas práticas, você terá testes rápidos e robustos, nos quais seu time confia e ajuda a manter e evoluir.
  • 22. Clonar o projeto https://github.com/cypress- io/cypress-realworld-app, acessá- lo e rodar yarn install Abrir o runner e filtrar pelo teste transaction-view.spec.ts Executar a suite e tirar uma screenshot dos testes passando E postar a screenshot no LinkedIn com o texto "Eu vi a talk de Cypress do Walmyr no #MTCDendiCasa2021" (marcando MTC, o Cypress.io e eu) Tenho 10 cupons grátis pro meu curso de Cypress intermediário, para os primeiros que realizarem os seguintes passos: 1. 2. 3. 4. Desafio/Surpresa!