forked from Anteros-Code-Mentoria/poc-mvc-ocr
167 lines
4.8 KiB
Markdown
167 lines
4.8 KiB
Markdown
Claro! Aqui está um exemplo de **README** para o seu projeto, cobrindo a criação do **virtual environment (venv)**, instalação de dependências, execução do **Flasgger** para documentação e execução de **testes**:
|
|
|
|
---
|
|
|
|
# Projeto de Testes com SQLAlchemy, Factory Boy e Flask
|
|
|
|
Este é um projeto simples de teste utilizando **SQLAlchemy**, **Factory Boy** para a criação de dados e **Flasgger** para a documentação de APIs. O projeto inclui exemplos de como configurar o ambiente de desenvolvimento, realizar testes e gerar documentação interativa para suas APIs.
|
|
|
|
## Índice
|
|
|
|
- [Pré-requisitos](#pré-requisitos)
|
|
- [Instalação](#instalação)
|
|
- [Uso](#uso)
|
|
- [Rodar Flasgger (Documentação da API)](#rodar-flasgger-documentação-da-api)
|
|
- [Rodar Testes Unitários](#rodar-testes-unitários)
|
|
- [Estrutura de Diretórios](#estrutura-de-diretórios)
|
|
|
|
## Pré-requisitos
|
|
|
|
Antes de começar, você precisa ter o **Python** instalado na sua máquina. Você pode verificar se o Python está instalado executando o seguinte comando:
|
|
|
|
```sh
|
|
python --version
|
|
```
|
|
|
|
Se você não tiver o Python instalado, pode obter a versão mais recente [aqui](https://www.python.org/downloads/).
|
|
|
|
Além disso, é necessário ter o **pip** (gerenciador de pacotes do Python) instalado. Você pode verificar isso com:
|
|
|
|
```sh
|
|
pip --version
|
|
```
|
|
|
|
## Instalação
|
|
|
|
1. **Crie um ambiente virtual (virtualenv):**
|
|
|
|
Para isolar as dependências do seu projeto, é recomendável criar um **ambiente virtual**. Navegue até o diretório do projeto e execute:
|
|
|
|
```sh
|
|
python -m venv venv
|
|
```
|
|
|
|
2. **Ative o ambiente virtual:**
|
|
|
|
- **No Windows:**
|
|
|
|
```sh
|
|
venv\Scripts\activate
|
|
```
|
|
|
|
- **No macOS/Linux:**
|
|
|
|
```sh
|
|
source venv/bin/activate
|
|
```
|
|
|
|
3. **Instale as dependências:**
|
|
|
|
Após ativar o ambiente virtual, instale as dependências necessárias listadas no `requirements.txt`:
|
|
|
|
```sh
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
4. **Requisitos (requirements.txt)**:
|
|
|
|
Certifique-se de que o arquivo `requirements.txt` contenha as bibliotecas necessárias:
|
|
|
|
```txt
|
|
Flask
|
|
Flask-SQLAlchemy
|
|
Flask-Flasgger
|
|
factory_boy
|
|
pytest
|
|
```
|
|
|
|
## Uso
|
|
|
|
### Rodar Flasgger (Documentação da API)
|
|
|
|
Este projeto utiliza o **Flasgger** para gerar uma interface de documentação interativa para as APIs Flask. Para visualizar a documentação da sua API:
|
|
|
|
1. **Inicie o servidor Flask:**
|
|
|
|
Certifique-se de que o ambiente virtual está ativado e execute o seguinte comando:
|
|
|
|
```sh
|
|
flask run
|
|
```
|
|
|
|
2. **Abra a documentação no navegador:**
|
|
|
|
Depois que o servidor estiver em execução, você pode acessar a documentação da API através do seguinte endereço:
|
|
|
|
```
|
|
http://127.0.0.1:5000/apidocs/
|
|
```
|
|
|
|
A interface do **Flasgger** permitirá que você veja as rotas, envie requisições e veja as respostas de forma interativa.
|
|
|
|
### Rodar Testes Unitários
|
|
|
|
Este projeto usa o **pytest** para rodar testes unitários. Os testes estão localizados na pasta `tests/`.
|
|
|
|
Para rodar os testes, execute:
|
|
|
|
```sh
|
|
pytest -v
|
|
```
|
|
|
|
Isso irá rodar todos os testes dentro da pasta `tests/`. Você verá a saída com os resultados dos testes diretamente no terminal.
|
|
|
|
#### Exemplo de execução de teste unitário:
|
|
|
|
```sh
|
|
tests/test_invoices.py::test_get_invoices
|
|
```
|
|
|
|
### Rodar Testes Rápidos (Sem Flask)
|
|
|
|
Se você quiser rodar testes rápidos sem o Flask (usando apenas SQLAlchemy e Factory Boy), pode executar o seguinte código diretamente, sem iniciar o servidor Flask. Apenas instancie o banco em memória e rode a fábrica.
|
|
|
|
```python
|
|
# Executar a criação de usuários sem o Flask (em memória)
|
|
from app.database import db
|
|
from tests.factories import UserFactory
|
|
|
|
# Configurar banco de dados em memória
|
|
engine = create_engine('sqlite:///:memory:')
|
|
Base.metadata.create_all(engine)
|
|
|
|
# Criar um usuário usando a factory
|
|
user = UserFactory.create(name="João", email="joao@example.com")
|
|
print(user.name, user.email)
|
|
```
|
|
|
|
Este código irá criar um banco de dados SQLite temporário em memória e usar o **Factory Boy** para gerar dados de teste rapidamente.
|
|
|
|
## Estrutura de Diretórios
|
|
|
|
A estrutura do projeto segue a seguinte organização:
|
|
|
|
```
|
|
/project-root
|
|
├── /app
|
|
│ ├── /__init__.py
|
|
│ ├── /models.py
|
|
│ ├── /routes.py
|
|
│ └── /database.py
|
|
├── /tests
|
|
│ ├── /__init__.py
|
|
│ ├── /test_invoices.py
|
|
│ └── /factories.py
|
|
├── requirements.txt
|
|
├── run.py
|
|
├── /venv
|
|
└── README.md
|
|
```
|
|
|
|
- **/app**: Contém a lógica da aplicação Flask (modelos, rotas, configuração do banco de dados).
|
|
- **/tests**: Contém os testes unitários, como `test_invoices.py`.
|
|
- **requirements.txt**: Arquivo que contém todas as dependências do projeto.
|
|
- **run.py**: Script para iniciar o servidor Flask.
|
|
- **venv/**: Diretório do ambiente virtual.
|
|
|