• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
70
0
0

Texto

(1)

Como Turbinamos nossa suíte de testes Rails em mais de 600%

(2)

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ães

DevOps Evangelist @ JobScore Inc

(3)

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

Desenvolvedor Rails desde 2008 Mantenedor - RubyGem Octopus

$> su thiago $> whoami

Thiago Pradi

Lider Técnico @ JobScore Inc

(4)

Agenda ● Problema ● A solução ● Conclusão ● Background ● Desafios ● Setups antigos

(5)

Agenda ● Problema ● A solução ● Conclusão ● Tentativa e erro ● Testes em paralelo ● Implementação ● Melhoria

(6)

Agenda

● Problema ● A solução

● Conclusão

(7)

Um Pouco de História

(8)

JobScore (www.jobscore.com)

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

(9)
(10)
(11)

13 anos de história em números Profitable ($$$)

Mais de 15 Bilhões em aquisições Mais de 1M de aplicações

(12)

Stack Atual

Ruby on Rails / Python

PostgreSQL / MySQL / Redis Passenger / AWS

(13)

Antes de 2012/2013...

(14)

Decisões Antigas de Engenharia

(exemplo: Fat Controllers)

(15)

Criação de dados para testes

utilizando

somente Fixtures

(16)

Ausência de testes

de Aceitação

Utilização de testes

de Integração

(17)
(18)

Coverage abaixo da média (< 50%)

(19)

Abuso de soluções temporárias

(rescue nil, monkeypatches, gems antigas)

(20)
(21)

2013: Adotadas práticas mais

modernas na suíte de testes

(22)

Stack da suíte de testes

Minitest (migrado do test/unit)

Aceitação - Capybara / Poltergeist Dados - Fixtures/Factories

(23)

2016/2017:

problemas diferentes

(24)

Testes lentos pelo abuso de Factories

(25)

Testes quebradiços devido ao

exagero de testes de aceitação

com Capybara / Poltergeist

(26)

Builds levando mais de uma hora.

(27)

Solução: Utilização de servidor de

integração contínua.

(28)

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

3) Circle CI; 4) Travis.

(29)

Testes divididos em 4 “workers” pelo tipo do mesmo (unitário, aceitação, controller e mailers) Problema

(30)

Alto Custo para upgrades.

Espera de quase 1 hora para cada merge.

(31)
(32)

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

(33)

Nenhum Pouco conhecimento sobre testes para Rails

(34)

Primeiro objetivo: Testes em menos de 10 minutos

(35)
(36)

Manter o paralelismo existente usando Jenkins + EC2

(37)

2 vCPU / 4GB = 35min 8 vCPU / 16GB = 4x faster

(38)
(39)
(40)

Paralelismo é a solução!

(41)

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

(42)

Testes com Docker

(43)

Sai Jenkins e entra Buildbot

(44)

Builds independentes

(45)

Testes ainda demoravam demais Entre 5-16min

(46)
(47)

https://github.com/grosser/parallel_tests

(48)

Setup relativamente simples

(49)

Os tempos eram bons!

(50)
(51)
(52)

Testes problemáticos falham com mais frequência

(53)

Auto-retry: Minitest reporter + script em Python

(54)

Três categorias de teste:

Pass Danger Fail

(55)

Usando instâncias spot Por volta dos USD 300

(56)

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

(57)

Em torno de 10h/mês

(58)

Como monitorar o CI?

(59)

Metrics to the rescue!

(60)

O CI precisa de carinho

(61)

Conclusão

(62)

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

(63)

Manutenções incluem refatorar

código ou inclusão de novas tecnologias.

(64)

Suas soluções irão refletir no

futuro, de forma positiva ou

negativa.

(65)

Por isso, saiba medir os prós e

contras de cada solução.

(66)

Solução

https://weblog.rubyonrails.org/2018/2/17/this-week-in-rails-rails-5-1-5-pa rallel-testing-and-more/

(67)
(68)

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

Social media: @ericovis

Web: https://emagalha.es

(69)

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

Social media: @thiagopradi

Web: https://www.thiagopradi.com

(70)

Referências

Documentos relacionados

Curvas de rarefação (Coleman) estimadas para amostragens de espécies de morcegos em três ambientes separadamente (A) e agrupados (B), no Parque Estadual da Ilha do Cardoso,

Sabendo-se que o tamanho e o peso das plaquetas, hemácias e leucócitos determinam o protocolo mais efetivo para concentrar plaquetas em cada espécie (LÓPEZ et al.,

» Estamos em condições de fornecer consultoria e/ou informações especializada para o estudo e/ou a definição de novos artigos ou soluções coordenadas para problemas operativos,

Quando a luz acende, o console está sob a condição de monitoramento, com os medidores de nível principal mostrando o nível do sinal do canal do monitor e o sinal do canal é

Hoje o gasto com a saúde equivale a aproximada- mente 8% do Produto Interno Bruto (PIB), sendo que, dessa porcentagem, o setor privado gasta mais que o setor público (Portal

Objetivo: Garantir estimativas mais realistas e precisas para o projeto, ao considerar nesta estimativa o esforço necessário (em horas ou percentual do projeto) para

Ou seja, não há acordos específicos sobre cada apresentação, mas há parâmetros sobre composição que são treinados, definindo noções de eficiência como

(kHz) Power Beam-width (º) LF/HF (-3dB) Max Depth (ft.) Depth/ Speed/ Temp # of Pins Cable Length (ft.) Supported Deadrise/ T ransom Angles RRP GT50M-TM All-in-one CHIRP