Skip to content

Commit

Permalink
[WIP] Removendo a execução dos testes rodando no docker
Browse files Browse the repository at this point in the history
related #161
  • Loading branch information
dunossauro committed Jun 4, 2024
1 parent 0c08828 commit 5ac6930
Showing 1 changed file with 5 additions and 63 deletions.
68 changes: 5 additions & 63 deletions aulas/10.md
Original file line number Diff line number Diff line change
Expand Up @@ -831,76 +831,18 @@ task test
========= 28 passed in 7.96s =========
```
Com o container sendo iniciado somente uma vez, o tempo total de execução dos testes caiu para `7.96s`, em comparação com os 80 segundos que tínhamos antes.
Com o container sendo iniciado somente uma vez, o tempo total de execução dos testes caiu para `7.96s`, em comparação com os 80 segundos que tínhamos antes. Um tempo de feedback aceitável para execução de testes.
Agora temos um tempo de feedback aceitável para execução de testes.
### Executando os testes via docker
> WIP: Verificar o que deve ser alterado nesse tópico em relação ao que foi inserido no anterior
Agora que temos o `docker-compose` configurado, realizar testes tornou-se uma tarefa simplificada. Podemos executar toda a suíte de testes com um único comando, sem a necessidade de ajustes adicionais ou configurações complexas. Isso é possível devido à maneira como o `docker-compose` gerencia os serviços e suas dependências.
Para executar os testes, utilizamos o comando:
```shell title="$ Execução no terminal!"
docker-compose run --entrypoint="poetry run task test" fastzero_app
```
Vamos entender melhor o que cada parte do comando faz:
- `docker-compose run`: este comando executa um serviço único definido no seu arquivo `compose.yaml`. Ao contrário do `docker-compose up`, que inicia todos os serviços, o `run` permite que você inicie um serviço específico.
- `--entrypoint`: a flag `--entrypoint` substitui o ponto de entrada padrão do container. O ponto de entrada padrão é especificado no `Dockerfile` ou no `compose.yaml` e é normalmente o comando que inicia sua aplicação. Ao substituir o entrypoint, você pode executar comandos diferentes, como neste caso, onde queremos rodar nossos testes.
- `"poetry run task test"`: este é o comando que substituirá o entrypoint padrão. Ele diz ao Docker para iniciar o container e executar a nossa suíte de testes com o Poetry, uma ferramenta para gerenciamento de dependências e pacotes em Python.
- `fastzero_app`: este é o nome do serviço que definimos no `compose.yaml`. É o serviço que contém a nossa aplicação FastAPI e onde nossos testes serão executados.
Ao utilizar esse comando, o Docker Compose cuidará de iniciar os serviços dos quais `fastzero_app` depende, neste caso, o serviço `fastzero_database` do PostgreSQL. Isso é importante porque nossos testes podem depender de um banco de dados ativo para funcionar corretamente. O Compose garante que a ordem de inicialização dos serviços seja respeitada e que o serviço do banco de dados esteja pronto antes de iniciar os testes.
Se executarmos o comando, vemos que ele inicia o banco de dados, inicia o container da aplicação e na sequência executa o comando que passamos no `--entrypoint` que é exatamente como executar os testes:
```shell title="$ Execução no terminal!"
docker-compose run --entrypoint="poetry run task test" fastzero_app
# Resulado esperado
[+] Building 0.0s (0/0) docker:default
[+] Creating 2/2
✔ Network default Created 0.1s
✔ Container fastzero_database-1 Created 0.1s
[+] Running 1/1
✔ Container fastzero_database-1 Started 0.3s
[+] Building 0.0s (0/0) docker:default
================ test session starts ================
platform linux - Python 3.11.6, pytest-7.4.3, pluggy-1.3.0 - /app/.venv/bin/python
cachedir: .pytest_cache
rootdir: /app
configfile: pyproject.toml
plugins: cov-4.1.0, anyio-4.1.0, Faker-20.1.0
collected 27 items
tests/test_app.py::test_root_deve_retornar_ok_e_ola_mundo PASSED
...
```
É importante notar que, embora o `docker-compose run` inicie as dependências necessárias para a execução do serviço especificado, ele não finaliza essas dependências após a conclusão do comando. Isso significa que após a execução dos testes, o serviço do banco de dados continuará ativo. Você precisará finalizá-lo manualmente com `docker-compose down` para encerrar todos os serviços e limpar o ambiente:
---
```shell title="$ Execução no terminal!"
docker-compose down
[+] Running 2/2
✔ Container 09-fastzero_database-1 Removed 0.4s
✔ Network 09_default Removed
```
Desta forma temos uma separação do nosso container postgres de desenvolvimento, do container usado pelos testes. Fazendo com que a execução dos testes não remova os dados inseridos durante o desenvolvimento da aplicação.
Assim tendo o ambiente limpo novamente.
## Commit
Após criar nosso arquivo `Dockerfile` e `compose.yaml`, executar os testes e construir nosso ambiente, podemos fazer o commit das alterações no Git:
Para finalizar, após criar nosso arquivo `Dockerfile` e `compose.yaml`, executar os testes e construir nosso ambiente, podemos fazer o commit das alterações no Git:
1. Adicionando todos os arquivos modificados nessa aula com `git add .`
2. Faça o commit das alterações com `git commit -m "Dockerizando nossa aplicação e alterando os testes para serem executados no PostgreSQL"`
2. Faça o commit das alterações com `git commit -m "Dockerizando nossa aplicação e inserindo o PostgreSQL"`
3. Envie as alterações para o repositório remoto com `git push`
## Conclusão
Expand Down

0 comments on commit 5ac6930

Please sign in to comment.