testes rails em mais de 600% como turbinamos nossa suíte de · como turbinamos nossa suíte de...

70
Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby

Upload: others

Post on 22-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Como Turbinamos nossa suíte de testes Rails em mais de 600%TDC Florianópolis 2018 - Trilha Ruby

Page 2: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Tecnólogo em Gestão de TI

SysAdmin que aprendeu a programar

Nascido em Brasília mas feito na Bahia,

Louco por automação, músico do buteco da esquina, marceneiro de fim de semana.

$> whoami

Eric MagalhãesDevOps Evangelist @ JobScore IncJoinville - SC - Brazil

Page 3: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Bacharel em Ciência da Computação - FURBMestre em Informática - UFPR

Desenvolvedor Rails desde 2008

Mantenedor - RubyGem Octopus

$> su thiago $> whoami

Thiago PradiLider Técnico @ JobScore IncJaraguá do Sul - SC

Page 4: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Agenda

● Problema● A solução● Conclusão

● Background

● Desafios

● Setups antigos

Page 5: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Agenda

● Problema● A solução● Conclusão

● Tentativa e erro

● Testes em paralelo

● Implementação

● Melhoria

Page 6: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Agenda

● Problema● A solução● Conclusão

● Considerações finais

Page 7: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Um Pouco de História

Problema

Page 8: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

JobScore (www.jobscore.com)

“Software de Recrutamento” (ATS)Criada em 2005 utilizando Rails 0.5

Problema

Page 9: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Problema

Page 10: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Problema

Page 11: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

13 anos de história em números

Profitable ($$$) Mais de 15 Bilhões em aquisições

Mais de 1M de aplicações

Problema

Page 12: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Stack Atual

Ruby on Rails / Python PostgreSQL / MySQL / Redis

Passenger / AWS

Problema

Page 13: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Antes de 2012/2013...

Problema

Page 14: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Decisões Antigas de Engenharia(exemplo: Fat Controllers)

Problema

Page 15: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Criação de dados para testes utilizando

somente Fixtures

Problema

Page 16: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Ausência de testes de Aceitação

Utilização de testes de Integração

Problema

Page 17: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Problema

Page 18: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Coverage abaixo da média (< 50%)

Problema

Page 19: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Abuso de soluções temporárias

(rescue nil, monkeypatches, gems antigas)

Problema

Page 20: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Problema

Page 21: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

2013: Adotadas práticas mais modernas na suíte de testes

Problema

Page 22: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Stack da suíte de testes

Minitest (migrado do test/unit) Aceitação - Capybara / Poltergeist

Dados - Fixtures/Factories

Problema

Page 23: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

2016/2017: problemas diferentes

Problema

Page 24: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Testes lentos pelo abuso de Factories

Problema

Page 25: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Testes quebradiços devido ao exagero de testes de aceitação

com Capybara / Poltergeist

Problema

Page 26: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Builds levando mais de uma hora.

Problema

Page 27: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Solução: Utilização de servidor de integração contínua.

Problema

Page 28: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

1) Jenkins - Self-hosted;2) Semaphore;

3) Circle CI;4) Travis.

Problema

Page 29: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Testes divididos em 4 “workers” pelo

tipo do mesmo (unitário, aceitação, controller e mailers)

Problema

Page 30: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Alto Custo para upgrades.

Espera de quase 1 hora para cada merge.

Problema

Page 31: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

A Solução

Page 32: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Contratado para ser owner de várias coisas, incluindo o CI

Histórico

Page 33: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Nenhum Pouco conhecimento sobre testes para Rails

Histórico

Page 34: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Primeiro objetivo: Testes em menos de 10 minutos

Histórico

Page 35: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Primeiros erros

Page 36: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Manter o paralelismo existente usando Jenkins + EC2

Primeiros erros

Page 37: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

2 vCPU / 4GB = 35min8 vCPU / 16GB = 4x faster

Primeiros erros

Page 39: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Primeiros erros

Page 40: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Paralelismo é a solução!

Primeiros erros

Page 41: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Estratégia: Ambientes isolados em uma máquina maior

Primeiros erros

Page 42: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Testes com Docker

Primeiros erros

Page 43: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Sai Jenkins e entra Buildbot

Primeiros erros

Page 44: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Builds independentes

Primeiros erros

Page 45: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Testes ainda demoravam demaisEntre 5-16min

Primeiros erros

Page 46: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Primeiros erros

Page 47: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

https://github.com/grosser/parallel_tests

Testes em paralelo

Page 48: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Setup relativamente simples

Testes em paralelo

Page 49: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Os tempos eram bons!

Testes em paralelo

Page 51: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Implementação

Page 52: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Testes problemáticos falham com mais frequência

Implementação

Page 53: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Auto-retry: Minitest reporter + script em Python

Implementação

Page 54: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Três categorias de teste:Pass Danger Fail

Melhoria contínua

Page 55: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Usando instâncias spotPor volta dos USD 300

Custo

Page 56: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Tempos atuais

1-2 min

Preparando ambiente de teste

Criar banco, rodar migrations, testes javascript

1-2 min

Dependências

Tempo para baixar as dependências do código (Gems, NPM, etc.)

3-5 min

Boot

Tempo de boot de uma instância EC2

4-6 min

Testes

Tempo para rodar todos os testes

Page 57: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Em torno de 10h/mês

Operação / Manutenção

Page 58: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Como monitorar o CI?

Melhoria contínua

Page 59: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Metrics to the rescue!

Melhoria contínua

Page 60: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

O CI precisa de carinho

Melhoria contínua

Page 61: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Conclusão

Solução

Page 62: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Aplicações antigas requerem manutenção constante.

Solução

Page 63: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Manutenções incluem refatorar código ou inclusão de novas

tecnologias.

Solução

Page 64: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Suas soluções irão refletir no futuro, de forma positiva ou

negativa.

Solução

Page 65: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Por isso, saiba medir os prós e contras de cada solução.

Solução

Page 67: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

https://github.com/rails/rails/pull/31900

Page 68: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

$> su ericovis -c 'whereis ${USER}'

Social media: @ericovis

Web: https://emagalha.es

Email: [email protected]

Page 69: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

$> su thiago -c 'whereis ${USER}'

Social media: @thiagopradi

Web: https://www.thiagopradi.com

Email: [email protected]

Page 70: testes Rails em mais de 600% Como Turbinamos nossa suíte de · Como Turbinamos nossa suíte de testes Rails em mais de 600% TDC Florianópolis 2018 - Trilha Ruby. ... Um Pouco de

Wrap up