Conteinerizando Testes com
Docker Compose 🐳🐙
Stefan Teixeira
@stefan_teixeira
stefanfk@gmail.com
stefanteixeira.com.br
stefanteixeira.com
• QA Automation Engineer @ Toptal
• Blogs técnicos: stefanteixeira.com.br (pt-br) /
stefanteixeira.com (en)
• Co-organizador dos meetups DevOps Carioca e Grupo de
Testes Carioca
Contatos:
• E-mail: stefanfk@gmail.com
• Twitter: twitter.com/stefan_teixeira
• LinkedIn: linkedin.com/in/stefanteixeira
• GitHub: github.com/stefanteixeira
• SlideShare: slideshare.net/stefanteixeira
Sobre
Docker Compose
Docker Compose
• Ferramenta para definir/rodar
aplicações multi-container
https://docs.docker.com/compose/
Docker Compose
• Ferramenta para definir/rodar
aplicações multi-container
• Conhecido antigamente como Fig
https://docs.docker.com/compose/
Docker Compose
• Ferramenta para definir/rodar
aplicações multi-container
• Conhecido antigamente como Fig
• YAML ❤
https://docs.docker.com/compose/
Compose File (v1)
Compose File (v2)
Conteinerizando testes
com Docker Compose
Como assim?
Containers != mini-VMs
https://twitter.com/rhein_wein/status/662995114235678720
Motivações
#1
Se os testes (exceto testes unitários)
são trabalhosos para rodar
localmente, os devs não vão rodar.
¯_( )_/¯
#2
Configurar um ambiente para rodar
testes pode ser um inferno.
👹
“Docker delivers a predictable,
reproducible testing environment.”
(Laura Frank, Codeship)
🐳❤
Exemplos
App A
App A
DB
App A
DB Mock Service
App A
DB Mock Service
API Tests
App A
DB Mock Service
API Tests
UI Tests
App A
DB Mock Service
API Tests
UI Tests
Security Tests
App A
DB Mock Service
API Tests
UI Tests
Security Tests
Smoke Tests
Demo
Demonstração
• Exemplo mais simples possível, com três
containers:
• App (uma API REST)
• DB (banco de dados MongoDB)
• API Tests (testes de API escritos com Supertest)
• https://github.com/stefanteixeira/demo-testing-
compose
Pontos de atenção
• Logs
Pontos de atenção
• Logs
• volumes ou data containers
Pontos de atenção
• Logs
• volumes ou data containers
• Tempo de inicialização
Pontos de atenção
• Logs
• volumes ou data containers
• Tempo de inicialização
• netcat (nc), curl, wait-for-it, wait_for module
(Ansible)
Pontos de atenção
• Logs
• volumes ou data containers
• Tempo de inicialização
• netcat (nc), curl, wait-for-it, wait_for module
(Ansible)
• Geração de imagens
Pontos de atenção
• Logs
• volumes ou data containers
• Tempo de inicialização
• netcat (nc), curl, wait-for-it, wait_for module
(Ansible)
• Geração de imagens
• Alpine-linux, Phusion (minimal base images)
Pontos de atenção
• Logs
• volumes ou data containers
• Tempo de inicialização
• netcat (nc), curl, wait-for-it, wait_for module
(Ansible)
• Geração de imagens
• Alpine-linux, Phusion (minimal base images)
• Automatizar processo
Referências
• "Stop Being Lazy and Test Your Software”:
• https://www.youtube.com/watch?v=Mx1Il9wIepw
• http://www.slideshare.net/rheinwein/stop-being-lazy-and-test-your-
software
• https://hharnisc.github.io/2016/06/19/integration-testing-with-docker-
compose.html
• https://docs.docker.com/compose/startup-order/
• https://github.com/vishnubob/wait-for-it
• https://www.ansible.com/blog/six-ways-ansible-makes-docker-compose-better
• https://www.vivaolinux.com.br/artigo/Tutorial-Netcat
Obrigado!
Stefan Teixeira
@stefan_teixeira
stefanfk@gmail.com
stefanteixeira.com.br
stefanteixeira.com

Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose