Integração contínua sem
traumas: testes e ferramentas
Sabrina Jucá Neri
Julho 2017
Quem eu sou?
➔ Engenheira de Software no Mercado Livre;
➔ Especialista em Desenvolvimento Web;
➔ 13 anos de experiência em desenvolvimento backend;
➔ Entusiasta na área de testes de software.
/sabrinaneri
sabrina.neri@mercadolivre.com
sabrinajn@gmail.com
Integração Contínua (CI)
CI
Dependênicas
Compilação
Testes
Empacotamento
Upload
Repositório de
artefatos
Servidor de CIRepositório
de
Código
Servidor de teste
Deploy
build
CI na prática
versionamento
+
build
+
teste
teste stage produção
integração contínua Entrega Contínua Deploy Contínuo
CODE BUILD TESTES DEPLOY OPERATE
Agora é só fazer o deploy
Execute o CI quando um Pull Request é criado
ou alterado
Pull Request
+
Qualidade
+ PR
build
análise de
código
relatório antes
do merge
Cobertura de
testes
Pirâmide de
testes
https://martinfowler.com/bliki/TestPyramid.html
Testes
executados no
build
Estrategia de
Testes do MeLi
➔ Cobertura mínima de 70% a 80% de testes unitários;
➔ Plugins de teste:
◆ Spock
◆ JUnit
◆ Rest Assured
◆ Nightwatch
➔ Jenkins - Executar os testes automáticos.
+ PR
build
static code
analysis
results before
merge
code
coverage
Tempo do build
< 10 minutos
Paralelizar a execução dos testes
Paralelismo
dos testes
Testes
do
build
Paralelismo
dos testes
//Jenkinsfile
stage('tests') {
steps {
parallel (
"unit tests": { … },
"integration tests": { ... },
"functional tests": { ... }
)
}
}
Redução
do tempo
Tempo dos testes será
o tempo da suíte mais
demorada
Testes E2E
Paralelizando
testes E2E
➔ Diferentes Browsers
➔ Testes para mobile
Paralelismo
dos testes
//Jenkinsfile
stage ("E2E"){
steps {
//Inicie as instâncias do docker
sh(script: "docker run -d -p 4444:4444 --name selenium-hub selenium/hub")
sh(script: "docker run -d --name node-1 --link selenium-hub:hub selenium/node-
chrome")
sh(script: "docker run -d --name node-2 --link selenium-hub:hub selenium/node-
chrome")
parallel ( … )
//Finalize as instâncias do docker
sh(script: "docker ps -q --filter 'name=node*' | xargs docker rm -f")
sh(script: "docker stop selenium-hub && docker rm -f selenium-hub")
}
}
Testes E2E
Retry
Retry para os
flaky Tests
Paralelismo
dos testes
//Jenkinsfile
parallel (
"home page": { e2e("home_page") },
...
)
…
def e2e(suite_name) {
def result = false
waitUntil {
try {
//run suite_name
} catch(error) {
input "Retry the job ?"
}
ok
}
}
Reduzir os custos da infraestrutura do CI
Ambientes
para testes
build
+
teste
test stage prod
Reduza
build
+
teste
test stage com
auto scaling
prod com auto
scaling
Circle Ci
Collaborations
Deployment
Testing
Source Code
Gratuito para projetos pequenos
Circle Ci
➔ Desligue os ambientes no horário que eles não serão usados;
➔ Se estiver usando a AWS utilize instâncias SPOT (economia de
até 90%) para os ambientes de teste;
➔ Monitore e remova os recursos que não estão sendo mais
usados;
➔ Use auto scaling;
➔ Escolha o tamanho e o tipo certo para as instâncias.
Outras dicas de redução de custos
Comunicação e visibilidade
push to CIpush code
Generate
build
run tests
run deploy
Notify when fail
Notify when fail
Notify when fail
Notify success and
change log
Comunique as falhas e alterações
?
Obrigada!

Integração continua sem traumas