Conteinerizando Testes com Docker Compose 🐳🐙
Stefan Teixeira @stefan_teixeira
[email protected] 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: [email protected] • 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
[email protected] stefanteixeira.com.br
stefanteixeira.com
Top Related