SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
Boas práticas e
sobrevivência com VCR no
Rspec
Fabio Perrella (@fabioperrella)
Agenda
- Teorias
- Dicas
- Dores
Por que testes integrados?
O que são?
> Testes que batem no banco, nas apis, caches, etc.. (sem mocks/stubs)
Vantagens
> Testar de verdade!
Desvantagens
> Dificuldade na setup dos testes
> Dificuldade na manutenção dos testes
> Maior tempo de execução
Por que usar a gem VCR?
- Testes não dependem do estado das suas dependências
- Testes não dependem de estar conectado na internet/vpn
- Automatiza a criação dos mocks (cassetes)
- Melhora performance dos testes
- Serve de “documentação” das chamadas de api que são feitas
Configurações recomendadas
Com isso, vai quebrar o teste se for feito uma requisição inesperada!
Para facilitar o uso do VCR
Nas versões antigas (<4) precisa da conf abaixo, nas novas não!
Config.configure_rspec_metadata!
Com isso é possível usar o :vcr nos cenários
Permita rodar os testes sem VCR
- Cassetes podem ficar obsoletos
- Bom para testes integrados no CI
http://milhouseonsoftware.com/2015/01/14/temporarily-disable-vcr/
Idempotência dos testes com VCR
Em cada teste gravado com VCR, deve ser possível deletar o cassete e
regravá-lo novamente sem precisar mexer no teste (treta!)
Ex: teste de deleção de site
- (setup) deleta o site x se existir (para garantir a idempotência)
- (setup) cria o site x (para poder deletar)
- (exercise) deleta o site
- (verify) verifica se foi deletado
Cuidado com a ordem de execução
No Rspec é recomendado o uso do config.order = 'random'
Se houver algum cache (de service-ticket por exemplo), ele pode fazer o teste
quebrar dependendo da ordem que rodar.
Ex:
Teste 1: faz requisição para gerar ticket, faz requisição na api com ticket
Teste 2: usa ticket cacheado, faz requisição na api com ticket
Se rodar o 2 antes, vai falhar pois este não esperava a req p/ gerar o ticket.
> Desabilite os caches nos testes! (memoization tambem pode ser cache!)
Exemplo de problema com cache
Cuidado com as factories que usam “sequences”
Factories (da gem factory_bot) que usam sequences podem ter os valores dos
campos diferentes dependendo da ordem dos testes.
> Para evitar, setar valor fixo
Prefira (assumindo que o login é uma sequence na factory de site):
site = create(:site, login: ‘lalapopo’)
E não:
site = create(:site)
Filtrando url das APIs
Facilita troca da URL (ou até da porta) sem precisar regravar cassetes
Filtro customizado para ignorar params dinâmicos
Exemplo:
Neste caso, não temos controle sobre qual product_id será postado!
Fazendo o filtro
Remote Factory
https://code.locaweb.com.br/paas/remote_factory
Como descobrir onde está o arquivo do cassette?
1) Usando a busca “fuzzy search” do editor (no sublime: ctrl + p)
Dica extra para copiar o path do arquivo fácil!
Plugin Copy Filepath With Line Numbers (Sublime)
https://packagecontrol.io/packages/Copy%20Filepath%20With%20Line%20Numb
ers
Adicionar key binding:
Como descobrir onde está o arquivo do cassette
2) Usando VCR.current_cassette.file
Como visualizar chamadas do VCR com
colapse
Ctrl + k + 3 (sublime)
Grep no terminal
Ignorando diff de arquivos nos MRs (gitlab)
Criar arquivo .gitattributes
https://git-scm.com/docs/gitattributes
Como resolver o erro “An HTTP request
has been made that VCR does not know
how to handle”
Script
- mv VCR_FILE VCR_FILE-2
- Rodar teste para gravar VCR novamente
- diff VCR_FILE VCR_FILE-2
Dicas
- Provavelmente mudou algo no uri ou no body de algum request
- Focar na 1a diferença que achar no diff
Usando o debug_logger
Aprendi isso ao preparar os slides!
Usando o Webmock have_requested
No spec_helper.rb
https://www.rubydoc.info/github/bblimke/webmock/WebMock/Matchers
No teste
Quando o teste não é
idempotente :(
Pelo menos tente deixar claro isso!
Dúvidas?
ítems para adicionar
- Cuidado quando editar o IT ou CONTEXT de um teste (precisa renomear o
cassette ou regravá-lo)
- Ter rotina para regravar os cassettes frequentemente
- Como limpar cassettes que não são mais usados:
https://github.com/vcr/vcr/issues/283

Mais conteúdo relacionado

Semelhante a Boas práticas e sobrevivência com vcr no rspec

Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produçãothomasdacosta
 
Praticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaPraticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaIvayr Farah Netto
 
Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Webgoal
 
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicaçãoAgile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicaçãoStefan Teixeira
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Thiago Rondon
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniJoao Galdino Mello de Souza
 
Otimizando a execução de código-fonte PHP
Otimizando a execução de código-fonte PHPOtimizando a execução de código-fonte PHP
Otimizando a execução de código-fonte PHPEr Galvão Abbott
 
Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Rodrigo Campos
 
TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016Fernando Santiago
 
Html5 pt - Offline Apps
Html5 pt - Offline AppsHtml5 pt - Offline Apps
Html5 pt - Offline AppsByclosure
 
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSAgile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSStefan Teixeira
 
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...Tchelinux
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverStefan Teixeira
 
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensaSeja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensagarux
 
Análise comparativa de desempenho de FileSystems em ambientes virtualizados
Análise comparativa de desempenho de FileSystems em ambientes virtualizadosAnálise comparativa de desempenho de FileSystems em ambientes virtualizados
Análise comparativa de desempenho de FileSystems em ambientes virtualizadosKleber Silva
 

Semelhante a Boas práticas e sobrevivência com vcr no rspec (20)

Squid
SquidSquid
Squid
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produção
 
Praticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaPraticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnica
 
Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho
 
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicaçãoAgile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
 
Apresentando o CakePHP
Apresentando o CakePHPApresentando o CakePHP
Apresentando o CakePHP
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.
 
Efficient rails
Efficient railsEfficient rails
Efficient rails
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
 
Otimizando a execução de código-fonte PHP
Otimizando a execução de código-fonte PHPOtimizando a execução de código-fonte PHP
Otimizando a execução de código-fonte PHP
 
Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!
 
TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016
 
Html5 pt - Offline Apps
Html5 pt - Offline AppsHtml5 pt - Offline Apps
Html5 pt - Offline Apps
 
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSAgile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
 
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
Linux Deployment: Como instalar Linux sem sair da cadeira - Jonathan Meller e...
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriver
 
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensaSeja um Perl Core Hacker - é (muito) mais fácil do que você pensa
Seja um Perl Core Hacker - é (muito) mais fácil do que você pensa
 
Análise comparativa de desempenho de FileSystems em ambientes virtualizados
Análise comparativa de desempenho de FileSystems em ambientes virtualizadosAnálise comparativa de desempenho de FileSystems em ambientes virtualizados
Análise comparativa de desempenho de FileSystems em ambientes virtualizados
 

Mais de fabio perrella

Deixando o código mais amigável para as próximas gerações
Deixando o código mais amigável para as próximas geraçõesDeixando o código mais amigável para as próximas gerações
Deixando o código mais amigável para as próximas geraçõesfabio perrella
 
Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesDeixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesfabio perrella
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...fabio perrella
 
[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Railsfabio perrella
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
Coisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosCoisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosfabio perrella
 

Mais de fabio perrella (7)

Deixando o código mais amigável para as próximas gerações
Deixando o código mais amigável para as próximas geraçõesDeixando o código mais amigável para as próximas gerações
Deixando o código mais amigável para as próximas gerações
 
Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesDeixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
 
[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails
 
Ruby profiling
Ruby profilingRuby profiling
Ruby profiling
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
Coisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosCoisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dados
 

Boas práticas e sobrevivência com vcr no rspec

  • 1. Boas práticas e sobrevivência com VCR no Rspec Fabio Perrella (@fabioperrella)
  • 2.
  • 4. Por que testes integrados? O que são? > Testes que batem no banco, nas apis, caches, etc.. (sem mocks/stubs) Vantagens > Testar de verdade! Desvantagens > Dificuldade na setup dos testes > Dificuldade na manutenção dos testes > Maior tempo de execução
  • 5. Por que usar a gem VCR? - Testes não dependem do estado das suas dependências - Testes não dependem de estar conectado na internet/vpn - Automatiza a criação dos mocks (cassetes) - Melhora performance dos testes - Serve de “documentação” das chamadas de api que são feitas
  • 6. Configurações recomendadas Com isso, vai quebrar o teste se for feito uma requisição inesperada!
  • 7. Para facilitar o uso do VCR Nas versões antigas (<4) precisa da conf abaixo, nas novas não! Config.configure_rspec_metadata! Com isso é possível usar o :vcr nos cenários
  • 8. Permita rodar os testes sem VCR - Cassetes podem ficar obsoletos - Bom para testes integrados no CI http://milhouseonsoftware.com/2015/01/14/temporarily-disable-vcr/
  • 9. Idempotência dos testes com VCR Em cada teste gravado com VCR, deve ser possível deletar o cassete e regravá-lo novamente sem precisar mexer no teste (treta!) Ex: teste de deleção de site - (setup) deleta o site x se existir (para garantir a idempotência) - (setup) cria o site x (para poder deletar) - (exercise) deleta o site - (verify) verifica se foi deletado
  • 10. Cuidado com a ordem de execução No Rspec é recomendado o uso do config.order = 'random' Se houver algum cache (de service-ticket por exemplo), ele pode fazer o teste quebrar dependendo da ordem que rodar. Ex: Teste 1: faz requisição para gerar ticket, faz requisição na api com ticket Teste 2: usa ticket cacheado, faz requisição na api com ticket Se rodar o 2 antes, vai falhar pois este não esperava a req p/ gerar o ticket. > Desabilite os caches nos testes! (memoization tambem pode ser cache!)
  • 11. Exemplo de problema com cache
  • 12. Cuidado com as factories que usam “sequences” Factories (da gem factory_bot) que usam sequences podem ter os valores dos campos diferentes dependendo da ordem dos testes. > Para evitar, setar valor fixo Prefira (assumindo que o login é uma sequence na factory de site): site = create(:site, login: ‘lalapopo’) E não: site = create(:site)
  • 13. Filtrando url das APIs Facilita troca da URL (ou até da porta) sem precisar regravar cassetes
  • 14.
  • 15. Filtro customizado para ignorar params dinâmicos Exemplo: Neste caso, não temos controle sobre qual product_id será postado!
  • 17.
  • 19. Como descobrir onde está o arquivo do cassette? 1) Usando a busca “fuzzy search” do editor (no sublime: ctrl + p)
  • 20. Dica extra para copiar o path do arquivo fácil! Plugin Copy Filepath With Line Numbers (Sublime) https://packagecontrol.io/packages/Copy%20Filepath%20With%20Line%20Numb ers Adicionar key binding:
  • 21. Como descobrir onde está o arquivo do cassette 2) Usando VCR.current_cassette.file
  • 22. Como visualizar chamadas do VCR com colapse
  • 23.
  • 24. Ctrl + k + 3 (sublime)
  • 25.
  • 27.
  • 28. Ignorando diff de arquivos nos MRs (gitlab) Criar arquivo .gitattributes https://git-scm.com/docs/gitattributes
  • 29.
  • 30.
  • 31. Como resolver o erro “An HTTP request has been made that VCR does not know how to handle”
  • 32.
  • 33.
  • 34. Script - mv VCR_FILE VCR_FILE-2 - Rodar teste para gravar VCR novamente - diff VCR_FILE VCR_FILE-2 Dicas - Provavelmente mudou algo no uri ou no body de algum request - Focar na 1a diferença que achar no diff
  • 35.
  • 36. Usando o debug_logger Aprendi isso ao preparar os slides!
  • 37.
  • 38. Usando o Webmock have_requested
  • 41. Quando o teste não é idempotente :( Pelo menos tente deixar claro isso!
  • 42.
  • 44. ítems para adicionar - Cuidado quando editar o IT ou CONTEXT de um teste (precisa renomear o cassette ou regravá-lo) - Ter rotina para regravar os cassettes frequentemente - Como limpar cassettes que não são mais usados: https://github.com/vcr/vcr/issues/283