O documento discute boas práticas para criar testes automatizados rápidos e robustos com Cypress, como fazer autenticação de forma programática, criar mecanismos para controle de estado e usar atributos data-* para aumentar a testabilidade. Também aborda erros comuns como testes lentos ou instáveis.
This is a presentation given at the Hangzhou Scrum Forum 2009, sponsored by Perficient, China. The topic is how to incorporate automated functional testing into an agile project, and also some best practices, tips, and warnings.
www.perficient.com
This is a presentation given at the Hangzhou Scrum Forum 2009, sponsored by Perficient, China. The topic is how to incorporate automated functional testing into an agile project, and also some best practices, tips, and warnings.
www.perficient.com
What is TestNG in Selenium? TestNG is a data driven framework that allows to group, prioritise and order your test case in the most convenient manner YOU descire. Let's see more about it.
Todas as abordagens de testes dentro do ágilElias Nogueira
Palestra apresentada dia 10/11/2012 no Rio Agile Talks (@rioagile) mostrando a importância do Agile Testing e das visões que mudam sobre modelos, como o quadrande de Brian Merick que pode ser mudado/atualizado pelo novo uadrante proposto por Elisabeth Hendrickson, mas onde uma coida não muda: a pirâmide de automação de teste
In this session, we will discuss the introduction to the Data-Driven Testing Framework in Selenium. We will take a look at the importance of the Data-Driven Testing framework and also the integration of Apache POI and TestNg with the help of a demonstration.
Praticidade de criação de um projeto de automação de testes com Cypress utilizando JS como linguagem e as inúmeras praticidades do framework como viewports, pageobjects, cucumber e documentação dos testes.
Workshop: An Introduction to API Automation with JavascriptApplitools
APIs are an essential part of an increasingly large number of applications that we use daily. APIs enable applications to exchange data and functionality easily and securely. As testers, we want to ensure that our APIs do not break and provide the expected functionality. We can automate our APIs to speed up the rate at which our checks are done.
This workshop is geared toward persons who are new to API automation, who want a refresher or want to learn how to automate APIs using Supertest (a JS framework). In this workshop, you will learn how to get started with automating APIs using Supertest (a JS framework). We will be writing test automation for the restful-booker and the SpaceX-graphQL API.
The workshop will cover how to automate common API requests (GET, POST and PUT), negative tests for your API as well as check that your APIs handle errors appropriately and follow the specified schema.
During this workshop, you will also learn how to automate workflows for an API. To follow along with this workshop, Postman installed on your machine.
A Top Down Approach to End-to-End TestingSmartBear
Whether you are doing it or not, end-to-end testing is something we all should be engaging – especially in the day and age of more and more systems becoming integrated. This discussion includes:
What is end-to-end testing?
Who is doing end-to-end testing and why?
Common mistakes to avoid with end-to-end testing
Real stories from the fire-side
Page Object Model and Implementation in Selenium Zoe Gilbert
There are various frameworks that have been used by the IT industry for robust, easy maintenance, and to automate their applications to make them flexible and reusable. Page Object Model is one of the frameworks that have been covered here in this blog step by step clearly to help you understand.
What is TestNG in Selenium? TestNG is a data driven framework that allows to group, prioritise and order your test case in the most convenient manner YOU descire. Let's see more about it.
Todas as abordagens de testes dentro do ágilElias Nogueira
Palestra apresentada dia 10/11/2012 no Rio Agile Talks (@rioagile) mostrando a importância do Agile Testing e das visões que mudam sobre modelos, como o quadrande de Brian Merick que pode ser mudado/atualizado pelo novo uadrante proposto por Elisabeth Hendrickson, mas onde uma coida não muda: a pirâmide de automação de teste
In this session, we will discuss the introduction to the Data-Driven Testing Framework in Selenium. We will take a look at the importance of the Data-Driven Testing framework and also the integration of Apache POI and TestNg with the help of a demonstration.
Praticidade de criação de um projeto de automação de testes com Cypress utilizando JS como linguagem e as inúmeras praticidades do framework como viewports, pageobjects, cucumber e documentação dos testes.
Workshop: An Introduction to API Automation with JavascriptApplitools
APIs are an essential part of an increasingly large number of applications that we use daily. APIs enable applications to exchange data and functionality easily and securely. As testers, we want to ensure that our APIs do not break and provide the expected functionality. We can automate our APIs to speed up the rate at which our checks are done.
This workshop is geared toward persons who are new to API automation, who want a refresher or want to learn how to automate APIs using Supertest (a JS framework). In this workshop, you will learn how to get started with automating APIs using Supertest (a JS framework). We will be writing test automation for the restful-booker and the SpaceX-graphQL API.
The workshop will cover how to automate common API requests (GET, POST and PUT), negative tests for your API as well as check that your APIs handle errors appropriately and follow the specified schema.
During this workshop, you will also learn how to automate workflows for an API. To follow along with this workshop, Postman installed on your machine.
A Top Down Approach to End-to-End TestingSmartBear
Whether you are doing it or not, end-to-end testing is something we all should be engaging – especially in the day and age of more and more systems becoming integrated. This discussion includes:
What is end-to-end testing?
Who is doing end-to-end testing and why?
Common mistakes to avoid with end-to-end testing
Real stories from the fire-side
Page Object Model and Implementation in Selenium Zoe Gilbert
There are various frameworks that have been used by the IT industry for robust, easy maintenance, and to automate their applications to make them flexible and reusable. Page Object Model is one of the frameworks that have been covered here in this blog step by step clearly to help you understand.
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
Workshop ministrado no Agile Brazil 2018 sobre criação da abordagem de testes paralelos para web e mobile no dia 05/10/2018. Repositório em https://github.com/eliasnogueira/workshop-ab-2018
Curso completo com 50% de desconto: https://bit.ly/2EDTlbH
Slide utilizado na ministração do curso Automatizando Testes de Software Com Selenium - Básico
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontatdc-globalcode
Nessa palestra mostrarei como criar uma estrutura de testes automatizados para a sua aplicação ASP.NET MVC cobrindo os principais aspectos do seu sistema.
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...minastestingconference
Em nossa busca diária de forçar a web a fazer cada dia mais, acabamos diante de alguns problemas, dentre eles: Performance!
Aplicações web são bem mais robustas do que jamais imaginamos e se tornaram mais demandantes de recursos de dispositivos e até mesmo de internet.
Nessa talk vamos conhecer algumas formas e ferramentas para avaliar e sugerir melhorias de performance de aplicações web principalmente na perspectiva de um usuário.
Veremos o que é importante avaliar e como isso impacta em um site responsivo, desenvolvido para funcionar em vários dispositivos (smartphone, tablet, notebooks, etc).
Vou mostrar o novo TOP 10 da OWASP, com exemplos práticos de testes que podemos fazer e que poderá trazer uma confiabilidade gigantesca em sua plataforma em um mundo onde todos estão começando a se importar com suas informações digitais. Não podemos ficar para trás, Segurança é necessária
Muito tem se falado hoje em dia sobre automação e testes em diversas camadas para aumentar a qualidade do produto. Isso tudo é muito importante, porém o papel do QA se resume a criar testes? Como podemos auxiliar realmente a criar produtos? A ideia desse papo é demonstrar e contar cases de como o QA pode auxiliar ao time como uma figura de negócio, construindo a qualidade juntamente com a concepção do produto.
Nosso objetivo é compartilhar nossas experiências com garantia de qualidade em Chatbots. Quais os desafios encontrados, os caminhos seguidos e os aprendizados demonstrados através de cases de bots da Take. Além disso, as formas encontradas para automação dos bots.
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.