SlideShare uma empresa Scribd logo
https://walmyrfilho.com
Criando testes
automatizados
rápidos e robustos
com Cypress
MTC em 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
É 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-* (testabilidade)
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 as "pitadas de Cypress" no blog Talking About Testing
https://talkingabouttesting.com/category/cypress/
Testes independentes
Dica: utilize o hook beforeEach quando
precisar executar passos repetidos para todos
os testes de um determinado describe ou
context.
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
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.
Mecanismos
para criação de estado
Alguns exemplos desses mecanismos são:
chamadas de API para criação de recursos;
comunicação direto com o banco de dados;
execução de scripts à nível de sistema; ou,
execucão de tarefas diversas.
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, adicionmos 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 lado
da aplicação sendo desenvolida.
Testes 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, tais como no hook
beforeEach.
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, 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.
"Mão-na-massa"
Cypress RWA
MTC em 2021
Alguma pergunta?
Ficarei feliz em responder!
https://walmyrfilho.com
Muito obrigado!
MTC em 2021

Mais conteúdo relacionado

Mais procurados

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
 
TestNG with selenium
TestNG with seleniumTestNG with selenium
TestNG with selenium
Gousalya Ramachandran
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágil
Elias Nogueira
 
Testing Tool Evaluation Criteria
Testing Tool Evaluation CriteriaTesting Tool Evaluation Criteria
Testing Tool Evaluation Criteriabasma_iti_1984
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
Levon Apreyan
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
Anirudh Raja
 
Data Driven Framework in Selenium
Data Driven Framework in SeleniumData Driven Framework in Selenium
Data Driven Framework in Selenium
Knoldus Inc.
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-Assured
Júlio de Lima
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
Nàtali Cabral
 
AI assisted testing using postman and openAI.pdf
AI assisted testing using postman and openAI.pdfAI assisted testing using postman and openAI.pdf
AI assisted testing using postman and openAI.pdf
sivaganeshsivakumar1
 
UnitTest.pptx
UnitTest.pptxUnitTest.pptx
UnitTest.pptx
yuchengLiu36
 
Create an architecture for web test automation
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automation
Elias Nogueira
 
Automation testing strategy, approach & planning
Automation testing  strategy, approach & planningAutomation testing  strategy, approach & planning
Automation testing strategy, approach & planningSivaprasanthRentala1975
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio Nas
WordCamp Floripa
 
05 junit
05 junit05 junit
05 junit
mha4
 
Workshop: An Introduction to API Automation with Javascript
Workshop: An Introduction to API Automation with JavascriptWorkshop: An Introduction to API Automation with Javascript
Workshop: An Introduction to API Automation with Javascript
Applitools
 
Selenium documentation,
Selenium documentation,Selenium documentation,
Selenium documentation,t7t7uyt
 
A Top Down Approach to End-to-End Testing
A Top Down Approach to End-to-End TestingA Top Down Approach to End-to-End Testing
A Top Down Approach to End-to-End Testing
SmartBear
 
Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium  Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium
Zoe Gilbert
 
Test automation
Test automationTest automation
Test automation
Xavier Yin
 

Mais procurados (20)

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
 
TestNG with selenium
TestNG with seleniumTestNG with selenium
TestNG with selenium
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágil
 
Testing Tool Evaluation Criteria
Testing Tool Evaluation CriteriaTesting Tool Evaluation Criteria
Testing Tool Evaluation Criteria
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
 
Data Driven Framework in Selenium
Data Driven Framework in SeleniumData Driven Framework in Selenium
Data Driven Framework in Selenium
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-Assured
 
Testes E2E em Cypress com JS
Testes E2E em Cypress com JSTestes E2E em Cypress com JS
Testes E2E em Cypress com JS
 
AI assisted testing using postman and openAI.pdf
AI assisted testing using postman and openAI.pdfAI assisted testing using postman and openAI.pdf
AI assisted testing using postman and openAI.pdf
 
UnitTest.pptx
UnitTest.pptxUnitTest.pptx
UnitTest.pptx
 
Create an architecture for web test automation
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automation
 
Automation testing strategy, approach & planning
Automation testing  strategy, approach & planningAutomation testing  strategy, approach & planning
Automation testing strategy, approach & planning
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio Nas
 
05 junit
05 junit05 junit
05 junit
 
Workshop: An Introduction to API Automation with Javascript
Workshop: An Introduction to API Automation with JavascriptWorkshop: An Introduction to API Automation with Javascript
Workshop: An Introduction to API Automation with Javascript
 
Selenium documentation,
Selenium documentation,Selenium documentation,
Selenium documentation,
 
A Top Down Approach to End-to-End Testing
A Top Down Approach to End-to-End TestingA Top Down Approach to End-to-End Testing
A Top Down Approach to End-to-End Testing
 
Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium  Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium
 
Test automation
Test automationTest automation
Test automation
 

Semelhante a [MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walmyr Lima e Silva Filho

Solucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.ioSolucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.io
Patrick Monteiro
 
cypress.pdf
cypress.pdfcypress.pdf
cypress.pdf
Rafael Martins
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
Qualister
 
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
 
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
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
Autotic
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
Samanta Cicilia
 
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
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
Elias Nogueira
 
Ibm app scan
Ibm app scanIbm app scan
Ibm app scan
Reinaldo Junior
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
Bruno Luiz Pereira da Silva
 
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Stefan Teixeira
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
Sandy Maciel
 
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
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
Fabrício Vargas Matos
 
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
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
Samuel Lourenço
 
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 automatizadosThiago Ghisi
 

Semelhante a [MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walmyr Lima e Silva Filho (20)

Solucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.ioSolucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.io
 
cypress.pdf
cypress.pdfcypress.pdf
cypress.pdf
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
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
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
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
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
ibm_appscan
ibm_appscanibm_appscan
ibm_appscan
 
Ibm app scan
Ibm app scanIbm app scan
Ibm app scan
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
 
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 
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)
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
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
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
 
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
 

Mais de minastestingconference

[MTC 2021] Automatizando testes de acessibilidade - Isabel Francine Mendes
[MTC 2021] Automatizando testes de acessibilidade - Isabel Francine Mendes[MTC 2021] Automatizando testes de acessibilidade - Isabel Francine Mendes
[MTC 2021] Automatizando testes de acessibilidade - Isabel Francine Mendes
minastestingconference
 
[MTC 2021] Será que as escolhas matam a qualidade? - Thais Nepomuceno
[MTC 2021] Será que as escolhas matam a qualidade? - Thais Nepomuceno[MTC 2021] Será que as escolhas matam a qualidade? - Thais Nepomuceno
[MTC 2021] Será que as escolhas matam a qualidade? - Thais Nepomuceno
minastestingconference
 
[MTC 2021] Continuous quality, desafios da melhorias contínua e entrega com q...
[MTC 2021] Continuous quality, desafios da melhorias contínua e entrega com q...[MTC 2021] Continuous quality, desafios da melhorias contínua e entrega com q...
[MTC 2021] Continuous quality, desafios da melhorias contínua e entrega com q...
minastestingconference
 
[MTC 2021] Regressão visual com applitools, appium e amazon aws device farm -...
[MTC 2021] Regressão visual com applitools, appium e amazon aws device farm -...[MTC 2021] Regressão visual com applitools, appium e amazon aws device farm -...
[MTC 2021] Regressão visual com applitools, appium e amazon aws device farm -...
minastestingconference
 
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
minastestingconference
 
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
minastestingconference
 
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
[MTC 2021] Conversa sobre shift left - Douglas Cardoso[MTC 2021] Conversa sobre shift left - Douglas Cardoso
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
minastestingconference
 
[MTC 2021] Sua api está bem documentada - Tainara Santos Reis
[MTC 2021] Sua api está bem documentada - Tainara Santos Reis[MTC 2021] Sua api está bem documentada - Tainara Santos Reis
[MTC 2021] Sua api está bem documentada - Tainara Santos Reis
minastestingconference
 
[MTC 2021] Do manual ao continuos testing - Jonathan Rodrigo da Silva Santos
[MTC 2021] Do manual ao continuos testing - Jonathan Rodrigo da Silva Santos[MTC 2021] Do manual ao continuos testing - Jonathan Rodrigo da Silva Santos
[MTC 2021] Do manual ao continuos testing - Jonathan Rodrigo da Silva Santos
minastestingconference
 
[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
 
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
minastestingconference
 
MTC 2019 - PENTEST PARA PROTEÇÃO DE REDES CORPORATIVAS
MTC 2019 - PENTEST PARA PROTEÇÃO DE REDES CORPORATIVASMTC 2019 - PENTEST PARA PROTEÇÃO DE REDES CORPORATIVAS
MTC 2019 - PENTEST PARA PROTEÇÃO DE REDES CORPORATIVAS
minastestingconference
 
MTC 2019 - ACESSIBILIDADE: GARANTINDO QUE AS APLICAÇÕES ESTEJAM ACESSÍVEIS PA...
MTC 2019 - ACESSIBILIDADE: GARANTINDO QUE AS APLICAÇÕES ESTEJAM ACESSÍVEIS PA...MTC 2019 - ACESSIBILIDADE: GARANTINDO QUE AS APLICAÇÕES ESTEJAM ACESSÍVEIS PA...
MTC 2019 - ACESSIBILIDADE: GARANTINDO QUE AS APLICAÇÕES ESTEJAM ACESSÍVEIS PA...
minastestingconference
 
MTC 2019 - TESTANDO O CONSUMO DE ENERGIA DO SOFTWARE EM IOT: COMO FAZER NA PR...
MTC 2019 - TESTANDO O CONSUMO DE ENERGIA DO SOFTWARE EM IOT: COMO FAZER NA PR...MTC 2019 - TESTANDO O CONSUMO DE ENERGIA DO SOFTWARE EM IOT: COMO FAZER NA PR...
MTC 2019 - TESTANDO O CONSUMO DE ENERGIA DO SOFTWARE EM IOT: COMO FAZER NA PR...
minastestingconference
 
MTC 2019 - Precisamos falar sobre teste de infra
MTC 2019 - Precisamos falar sobre teste de infraMTC 2019 - Precisamos falar sobre teste de infra
MTC 2019 - Precisamos falar sobre teste de infra
minastestingconference
 
Selenium WebDriver com Docker
Selenium WebDriver com DockerSelenium WebDriver com Docker
Selenium WebDriver com Docker
minastestingconference
 
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
minastestingconference
 
Saia do 7x0 com testes de segurança
Saia do 7x0 com testes de segurançaSaia do 7x0 com testes de segurança
Saia do 7x0 com testes de segurança
minastestingconference
 
QA além da automação
QA além da automaçãoQA além da automação
QA além da automação
minastestingconference
 
O que é teste e qualidade em Chatbots?
O que é teste e qualidade em Chatbots?O que é teste e qualidade em Chatbots?
O que é teste e qualidade em Chatbots?
minastestingconference
 

Mais de minastestingconference (20)

[MTC 2021] Automatizando testes de acessibilidade - Isabel Francine Mendes
[MTC 2021] Automatizando testes de acessibilidade - Isabel Francine Mendes[MTC 2021] Automatizando testes de acessibilidade - Isabel Francine Mendes
[MTC 2021] Automatizando testes de acessibilidade - Isabel Francine Mendes
 
[MTC 2021] Será que as escolhas matam a qualidade? - Thais Nepomuceno
[MTC 2021] Será que as escolhas matam a qualidade? - Thais Nepomuceno[MTC 2021] Será que as escolhas matam a qualidade? - Thais Nepomuceno
[MTC 2021] Será que as escolhas matam a qualidade? - Thais Nepomuceno
 
[MTC 2021] Continuous quality, desafios da melhorias contínua e entrega com q...
[MTC 2021] Continuous quality, desafios da melhorias contínua e entrega com q...[MTC 2021] Continuous quality, desafios da melhorias contínua e entrega com q...
[MTC 2021] Continuous quality, desafios da melhorias contínua e entrega com q...
 
[MTC 2021] Regressão visual com applitools, appium e amazon aws device farm -...
[MTC 2021] Regressão visual com applitools, appium e amazon aws device farm -...[MTC 2021] Regressão visual com applitools, appium e amazon aws device farm -...
[MTC 2021] Regressão visual com applitools, appium e amazon aws device farm -...
 
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
[MTC 2021] QAs que não codificam e seus 12% de vagas - Paulo César de Oliveira
 
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
 
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
[MTC 2021] Conversa sobre shift left - Douglas Cardoso[MTC 2021] Conversa sobre shift left - Douglas Cardoso
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
 
[MTC 2021] Sua api está bem documentada - Tainara Santos Reis
[MTC 2021] Sua api está bem documentada - Tainara Santos Reis[MTC 2021] Sua api está bem documentada - Tainara Santos Reis
[MTC 2021] Sua api está bem documentada - Tainara Santos Reis
 
[MTC 2021] Do manual ao continuos testing - Jonathan Rodrigo da Silva Santos
[MTC 2021] Do manual ao continuos testing - Jonathan Rodrigo da Silva Santos[MTC 2021] Do manual ao continuos testing - Jonathan Rodrigo da Silva Santos
[MTC 2021] Do manual ao continuos testing - Jonathan Rodrigo da Silva Santos
 
[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...
 
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot[MTC 2021] Vieses da qualidade -  Daniele Vieira Fiorot
[MTC 2021] Vieses da qualidade - Daniele Vieira Fiorot
 
MTC 2019 - PENTEST PARA PROTEÇÃO DE REDES CORPORATIVAS
MTC 2019 - PENTEST PARA PROTEÇÃO DE REDES CORPORATIVASMTC 2019 - PENTEST PARA PROTEÇÃO DE REDES CORPORATIVAS
MTC 2019 - PENTEST PARA PROTEÇÃO DE REDES CORPORATIVAS
 
MTC 2019 - ACESSIBILIDADE: GARANTINDO QUE AS APLICAÇÕES ESTEJAM ACESSÍVEIS PA...
MTC 2019 - ACESSIBILIDADE: GARANTINDO QUE AS APLICAÇÕES ESTEJAM ACESSÍVEIS PA...MTC 2019 - ACESSIBILIDADE: GARANTINDO QUE AS APLICAÇÕES ESTEJAM ACESSÍVEIS PA...
MTC 2019 - ACESSIBILIDADE: GARANTINDO QUE AS APLICAÇÕES ESTEJAM ACESSÍVEIS PA...
 
MTC 2019 - TESTANDO O CONSUMO DE ENERGIA DO SOFTWARE EM IOT: COMO FAZER NA PR...
MTC 2019 - TESTANDO O CONSUMO DE ENERGIA DO SOFTWARE EM IOT: COMO FAZER NA PR...MTC 2019 - TESTANDO O CONSUMO DE ENERGIA DO SOFTWARE EM IOT: COMO FAZER NA PR...
MTC 2019 - TESTANDO O CONSUMO DE ENERGIA DO SOFTWARE EM IOT: COMO FAZER NA PR...
 
MTC 2019 - Precisamos falar sobre teste de infra
MTC 2019 - Precisamos falar sobre teste de infraMTC 2019 - Precisamos falar sobre teste de infra
MTC 2019 - Precisamos falar sobre teste de infra
 
Selenium WebDriver com Docker
Selenium WebDriver com DockerSelenium WebDriver com Docker
Selenium WebDriver com Docker
 
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
 
Saia do 7x0 com testes de segurança
Saia do 7x0 com testes de segurançaSaia do 7x0 com testes de segurança
Saia do 7x0 com testes de segurança
 
QA além da automação
QA além da automaçãoQA além da automação
QA além da automação
 
O que é teste e qualidade em Chatbots?
O que é teste e qualidade em Chatbots?O que é teste e qualidade em Chatbots?
O que é teste e qualidade em Chatbots?
 

[MTC 2021] Criando testes automatizados rápidos e robustos com cypress - Walmyr Lima e Silva Filho

  • 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 É 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-* (testabilidade) 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 as "pitadas de Cypress" no blog Talking About Testing https://talkingabouttesting.com/category/cypress/
  • 8. Testes independentes Dica: utilize o hook beforeEach quando precisar executar passos repetidos para todos os testes de um determinado describe ou context. 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
  • 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.
  • 10. Mecanismos para criação de estado Alguns exemplos desses mecanismos são: chamadas de API para criação de recursos; comunicação direto com o banco de dados; execução de scripts à nível de sistema; ou, execucão de tarefas diversas. 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, adicionmos 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 lado da aplicação sendo desenvolida.
  • 14. Testes 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, tais como no hook beforeEach. 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, 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.