Ajudamos empresas a criar produtos digitais de sucesso
@samantacicilia
Importância de Testes Automatizados para
Continuous Delivery & DevOps
@samantacicilia
Conteúdo:
● Importância de Testes Automatizados
● Quadrante de Testes
● Pirâmide de Testes & Anti-padrões
● Tipos de Teste & Continuous Delivery
● Demo
● Referências
Importância de Testes Automatizados
@samantacicilia
Testes automatizados?
Testes automatizados?
● Feedback rápido;
Testes automatizados?
● Feedback rápido;
● Menos passível de erro de execução;
Testes automatizados?
● Feedback rápido;
● Menos passível de erro de execução;
● Executar testes automatizados no decorrer do pipeline ++ qualidade;
Testes automatizados?
● Feedback rápido;
● Menos passível de erro de execução;
● Executar testes automatizados no decorrer do pipeline ++ qualidade;
● Melhoria Contínua na Estratégia de Testes;
Testes automatizados?
● Feedback rápido;
● Menos passível de erro de execução;
● Executar testes automatizados no decorrer do pipeline ++ qualidade;
● Melhoria Contínua na Estratégia de Testes;
● Testes = especificação executável do comportamento do sistema;
Testes automatizados?
● Feedback rápido;
● Menos passível de erro de execução;
● Executar testes automatizados no decorrer do pipeline ++ qualidade;
● Melhoria Contínua na Estratégia de Testes;
● Testes = especificação executável do comportamento do sistema;
● Feedback, Feedback, Feedback;
Quadrante de Testes
@samantacicilia
Pirâmide de Testes
@samantacicilia
Anti-padrões
@samantacicilia
Tipos de Teste & Continuous Delivery
@samantacicilia
Testes Unitários
@samantacicilia
Testes Unitários:
Testes Unitários:
● Feedback extremamente rápido;
Testes Unitários:
● Feedback extremamente rápido;
● 10-minute build (eXtreme Programming);
Testes Unitários:
● Feedback extremamente rápido;
● 10-minute build (eXtreme Programming);
● Testes de valores limite, diferentes combinações, exceções…
Testes Unitários:
● Feedback extremamente rápido;
● 10-minute build (eXtreme Programming);
● Testes de valores limite, diferentes combinações, exceções…
● Cobertura de Código;
Testes Unitários:
● Feedback extremamente rápido;
● 10-minute build (eXtreme Programming);
● Testes de valores limite, diferentes combinações, exceções…
● Cobertura de Código;
● Segurança para fazer mudanças (eXtreme Programming);
Testes Unitários:
● Feedback extremamente rápido;
● 10-minute build (eXtreme Programming);
● Testes de valores limite, diferentes combinações, exceções…
● Cobertura de Código;
● Segurança para fazer mudanças (eXtreme Programming);
● Qualidade também nos testes unitários!
Testes Unitários:
● Feedback extremamente rápido;
● 10-minute build (eXtreme Programming);
● Testes de valores limite, diferentes combinações, exceções…
● Cobertura de Código;
● Segurança para fazer mudanças (eXtreme Programming);
● Qualidade também nos testes unitários!
● Test Driven Development;
Testes Unitários:
● Feedback extremamente rápido;
● 10-minute build (eXtreme Programming);
● Testes de valores limite, diferentes combinações, exceções…
● Cobertura de Código;
● Segurança para fazer mudanças (eXtreme Programming);
● Qualidade também nos testes unitários!
● Test Driven Development;
● Design de Código que permita testes;
Testes Unitários:
● Feedback extremamente rápido;
● 10-minute build (eXtreme Programming);
● Testes de valores limite, diferentes combinações, exceções…
● Cobertura de Código;
● Segurança para fazer mudanças (eXtreme Programming);
● Qualidade também nos testes unitários!
● Test Driven Development;
● Design de Código que permita testes;
● Mocks;
Ferramentas:
Link das Ferramentas:
● http://junit.org/junit4/
● http://www.nunit.org/
● http://testng.org/doc/index.html
● https://phpunit.de/
● http://jasmine.github.io/
● https://mochajs.org/
● http://robolectric.org/
● http://rspec.info/
● https://docs.python.org/2.7/library/unittest.html
Cobertura & Análise Estática:
Cobertura & Análise Estática:
● Verificar qual a % do seu código da aplicação está coberto por testes;
Cobertura & Análise Estática:
● Verificar qual a % do seu código da aplicação está coberto por testes;
● Analisar seu código de acordo com algumas regras;
Cobertura & Análise Estática:
● Verificar qual a % do seu código da aplicação está coberto por testes;
● Analisar seu código de acordo com algumas regras;
● Verificação por estilo (identação, espaços, convenção de nomes, comentários…);
Cobertura & Análise Estática:
● Verificar qual a % do seu código da aplicação está coberto por testes;
● Analisar seu código de acordo com algumas regras;
● Verificação por estilo (identação, espaços, convenção de nomes, comentários…);
● Verificação por boas práticas (duplicação de código, encoding, tamanho de métodos e
classes, criação de variáveis desnecessárias…);
Cobertura & Análise Estática:
● Verificar qual a % do seu código da aplicação está coberto por testes;
● Analisar seu código de acordo com algumas regras;
● Verificação por estilo (identação, espaços, convenção de nomes, comentários…);
● Verificação por boas práticas (duplicação de código, encoding, tamanho de métodos e
classes, criação de variáveis desnecessárias…);
● Verificação por bugs (antecipar possíveis problemas);
Ferramentas:
Link das Ferramentas:
● https://coverage.readthedocs.io/en/coverage-4.0.3/
● https://github.com/colszowka/simplecov
● http://emma.sourceforge.net/
● https://github.com/jacoco/jacoco
● https://www.ncover.com/
● http://blanketjs.org/
● https://github.com/jonreid/XcodeCoverage
● https://coveralls.io/
Ferramentas:
Link das Ferramentas:
● http://www.sonarqube.org/
● https://codeclimate.com/
● https://github.com/es-analysis/plato/
● https://github.com/dafiti/cs/
● http://checkstyle.sourceforge.net/
● http://findbugs.sourceforge.net/
● https://www.pylint.org/
● https://stylecop.codeplex.com/
Testes de Mutação:
Testes de Mutação:
● Testar seus Testes Unitários;
Testes de Mutação:
● Testar seus Testes Unitários;
● Ferramenta introduz mutações no seu código e executa os testes unitários;
Testes de Mutação:
● Testar seus Testes Unitários;
● Ferramenta introduz mutações no seu código e executa os testes unitários;
● Se os testes falharem = OK!
Testes de Mutação:
● Testar seus Testes Unitários;
● Ferramenta introduz mutações no seu código e executa os testes unitários;
● Se os testes falharem = OK!
● Se os testes passarem = NOK!
Testes de Mutação:
Ferramentas:
Link das Ferramentas:
● http://pitest.org/
● https://pypi.python.org/pypi/MutPy
● https://ninjaturtles.codeplex.com/
● http://visualmutator.github.io/web/
● https://github.com/mbj/mutant
● http://jumble.sourceforge.net/
Testes de Serviços
@samantacicilia
Testes de Serviços:
Testes de Serviços:
● Depois dos Testes de Unidade e antes dos Testes de UI;
Testes de Serviços:
● Depois dos Testes de Unidade e antes dos Testes de UI;
● Testar seu app + módulos, componentes, banco de dados;
Testes de Serviços:
● Depois dos Testes de Unidade e antes dos Testes de UI;
● Testar seu app + módulos, componentes, banco de dados;
● Sem interface;
Testes de Serviços:
● Depois dos Testes de Unidade e antes dos Testes de UI;
● Testar seu app + módulos, componentes, banco de dados;
● Sem interface;
● Stubs;
Testes de Serviços:
●Integração/Componentes
●Contratos
●API/Webservices
Ferramentas:
Link das Ferramentas:
● https://www.soapui.org/
● https://github.com/jayway/rest-assured
● http://flask-restless.readthedocs.io/en/stable/
● http://frisbyjs.com/
● https://github.com/visionmedia/supertest
● https://github.com/svanoort/pyresttest
● https://github.com/rest-client/rest-client
● https://github.com/brooklynDev/airborne
Testes de UI
@samantacicilia
Testes Funcionais:
Testes Funcionais:
● Lentos :(
Testes Funcionais:
● Lentos :(
● Fluxos principais da aplicação;
Testes Funcionais:
● Lentos :(
● Fluxos principais da aplicação;
● Diferentes browsers (IE, Firefox, Chrome, Safari & Headless);
Testes Funcionais:
● Lentos :(
● Fluxos principais da aplicação;
● Diferentes browsers (IE, Firefox, Chrome, Safari & Headless);
● Mobile;
Ferramentas:
Link das Ferramentas:
● http://www.seleniumhq.org/
● https://github.com/jnicklas/capybara
● http://angular.github.io/protractor/#/
● https://github.com/RobotiumTech/robotium
● http://calaba.sh/
● http://appium.io/
Testes de Regressão Visual:
● Comparação de Imagens;
Testes de Regressão Visual:
● Comparação de Imagens;
Ferramentas:
Link das Ferramentas:
● https://github.com/yahoo/kobold
● https://github.com/Huddle/PhantomCSS
● https://applitools.com/
● https://dpxdt-test.appspot.com/
● https://github.com/BBC-News/wraith
● https://github.com/xebia/VisualReview
Testes de Performance:
Testes de Performance:
● Comportamento da aplicação diante de uma carga conhecida;
Testes de Performance:
● Comportamento da aplicação diante de uma carga conhecida;
● Baselines;
Testes de Performance:
● Comportamento da aplicação diante de uma carga conhecida;
● Baselines;
● Ter um ambiente para esses testes;
Testes de Performance:
● Comportamento da aplicação diante de uma carga conhecida;
● Baselines;
● Ter um ambiente para esses testes;
● Definir as métricas;
Testes de Performance:
● Comportamento da aplicação diante de uma carga conhecida;
● Baselines;
● Ter um ambiente para esses testes;
● Definir as métricas;
● Análise automática???
Ferramentas:
Link das Ferramentas:
● http://www.radview.com/pt-br/baixe-o-webload/
● https://smartbear.com/product/loadcomplete/overview/
● http://www.neotys.com/neoload/overview
● http://jmeter.apache.org/
● http://grinder.sourceforge.net/
● http://locust.io/
● http://gatling.io/
● https://www.loadui.org/
E Continuous Delivery?
@samantacicilia
Testes X Estágios:
Testes X Estágios:
● Estágio de Commit:
● Testes Unitários
● Testes de Mutação
Testes X Estágios:
● Estágio de Commit:
● Testes Unitários
● Testes de Mutação
● Testes de Integração
● Estágio de Aceite (primeiro ambiente):
● Testes de API
Testes X Estágios:
● Estágio de Commit:
● Testes Unitários
● Testes de Mutação
● Testes de Integração
● Estágio de Aceite (primeiro ambiente):
● Testes de API
● Estágio de Aceite (pré-produção):
● Testes de UI
● Testes de Regressão Visual
● Testes de Performance
Ferramentas:
Link das Ferramentas:
● https://semaphoreci.com/
● https://travis-ci.org/
● http://circleci.com/
● https://jenkins.io
● https://www.go.cd/
● https://snap-ci.com/
Demo
@samantacicilia
Ruby:
Unitário (Rspec)
Mutação (mutant-rspec)
https://github.com/samycici/mutation_example
Exemplo 1:
Exemplo 1:
Exemplo 1:
Exemplo 1:
Exemplo 2:
Exemplo 2:
Exemplo 2:
App em Python usando Flask:
Unitário (unittest + fixtures)
Integração (unittest + sqlite)
API (pyresttest)
Funcional (selenium)
Performance (locust.io)
https://github.com/samycici/todoapp-flask
Referências
@samantacicilia
● http://www.guru99.com/mutation-testing.html
● http://blog.arkency.com/2015/05/mutation-testing-and-continuous-integration/
● http://blog.arkency.com/2015/06/how-good-are-your-ruby-tests-testing-your-tests-with-mutant/
● https://blog.blockscore.com/how-to-write-better-code-using-mutation-testing/
● http://www.slideshare.net/stefanteixeira/vr-dev-summit-2016-primeiros-passos-em-automao-de-testes
● http://pt.slideshare.net/fredoriginal/palestra-de-como-testar-sua-api-rest-no-grupo-de-teste-carioca
● https://css-tricks.com/visual-regression-testing-with-phantomcss/
● http://www.softwaretestinghelp.com/performance-testing-tools-load-testing-tools/
● https://talkingabouttesting.com/2015/08/19/mao-na-massa-com-visual-review-e-protractor/
● https://robots.thoughtbot.com/how-to-stub-external-services-in-tests
● http://www.devmedia.com.br/como-adotar-a-analise-estatica-de-codigo/32727
insideoutproject.com.br
insideoutproject.com.br/mulheres-palestrantes
Comunidades:
● meetup.com/pt-BR/DevOps-Carioca/
● meetup.com/pt-BR/Grupo-de-Testes-Carioca/
● meetup.com/pt-BR/Data-Science-Meetup-Rio-de-Janeiro/
● facebook.com/RioAgile/
● agiletesters.com.br
● insideoutproject.com.br
Contatos:
● testedesoftware.com
● rtstreinamentos.com.br
● medium.com/@samantacicilia
● Linkedin: Samanta Cicilia
● Twitter: @samantacicilia
● Slideshare: pt.slideshare.net/samantacicilia/
● Email: samycici@gmail.com
www.concretesolutions.com.br
blog.concretesolutions.com.br
Rio de Janeiro – Rua São José, 90 – cj. 2121
Centro – (21) 2240-2030
São Paulo - Rua Sansão Alves dos Santos, 433
4º andar - Brooklin - (11) 4119-0449

Importância de Testes Automatizados para Continuous Delivery & DevOps