Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose

Preview:

Citation preview

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

Recommended