Criando ambientes isolados para testes integrados com Docker

O problema...

"O sistema deve garantir apenas um Job em importação por vez."

<requisito funcional>

Algumas possíveis soluções...

Mock do database/cenário?

Teste parcialmente integrado.

Drop/create tables before/after tests?

Baixa performance / alta complexidade.

Um database exclusivo?

Consistência do cenário.

Custo de infra dedicada.

A nossa solução!

(passo a passo)

1 - Preparamos um cenário consistente

2 - Dump

PGPASSWORD=123456 pg_dump -h 192.168.x.x -U <user> -d <database> -F p -n <schema> -T <schema>.<ignoreTable> > dump.sql

3 - Dockerizar tudo

docker rm -f rabbit 2> /dev/null
docker run --name rabbit -d -p 5672:5672 -p 15672:15672 mikaelhg/docker-rabbitmq

docker rm -f mongo 2> /dev/null
docker run -d --name mongo -p 27017:27017 -p 28017:28017 -e AUTH=no tutum/mongodb

docker rm -f psql 2> /dev/null
docker run -d --name psql -p 5432:5432 -e "DB=xxx" -e "PASS=123456" -e "USER=xxx" centurylink/postgresql:9.3

4 - Automatizar dump restore

docker rm -f rabbit 2> /dev/null
docker run --name rabbit -d -p 5672:5672 -p 15672:15672 mikaelhg/docker-rabbitmq

docker rm -f mongo 2> /dev/null
docker run -d --name mongo -p 27017:27017 -p 28017:28017 -e AUTH=no tutum/mongodb

docker rm -f psql 2> /dev/null
docker run -d --name psql -p 5432:5432 -e "DB=xxx" -e "PASS=123456" -e "USER=xxx" centurylink/postgresql:9.3

PGPASSWORD="123456" psql -h 192.168.x.x -U xxx -d xxx -f dump.sql

5 - Shellscript é vida

docker rm -f rabbit 2> /dev/null
docker run --name rabbit -d -p 5672:5672 -p 15672:15672 mikaelhg/docker-rabbitmq

docker rm -f mongo 2> /dev/null
docker run -d --name mongo -p 27017:27017 -p 28017:28017 -e AUTH=no tutum/mongodb

docker rm -f psql 2> /dev/null
docker run -d --name psql -p 5432:5432 -e "DB=xxx" -e "PASS=123456" -e "USER=xxx" centurylink/postgresql:9.3

PGPASSWORD="123456" psql -h 192.168.x.x -U xxx -d xxx -f dump.sql

... others containers ...

cd tests-automation-framework
mvn test

Quais as desvantagens?

Manter o cenário

++TestOps

Quais as vantagens?

Alto isolamento

Performance dos Containers

Um passo para a economia

Dúvidas?

Obrigado!

Criando ambientes isolados para testes com Docker

By Ricardo Longa

Criando ambientes isolados para testes com Docker

  • 1,832