Les proves unitàries són una part essencial del desenvolupament de programari, ja que permeten verificar que les diferents parts de la teva aplicació funcionen correctament de manera independent. En aquest tema, aprendrem com crear i executar proves unitàries per a una aplicació Flask.
Objectius
- Entendre la importància de les proves unitàries.
- Configurar un entorn de proves per a una aplicació Flask.
- Escriure i executar proves unitàries utilitzant
unittest
ipytest
.
- Importància de les Proves Unitàries
Les proves unitàries ajuden a:
- Detectar errors en fases primerenques del desenvolupament.
- Assegurar que els canvis en el codi no introdueixin nous errors.
- Facilitar el manteniment del codi.
- Millorar la qualitat del codi.
- Configuració de l'Entorn de Proves
Instal·lació de Dependències
Per començar a escriure proves unitàries, necessitem instal·lar algunes biblioteques. Les més comunes són unittest
(inclosa en la biblioteca estàndard de Python) i pytest
.
Estructura del Projecte
És recomanable tenir una estructura clara per a les proves dins del teu projecte. Una estructura típica podria ser:
my_flask_app/ ├── app/ │ ├── __init__.py │ ├── routes.py │ └── models.py ├── tests/ │ ├── __init__.py │ ├── test_routes.py │ └── test_models.py ├── config.py └── run.py
- Escriure Proves Unitàries amb
unittest
unittest
Exemple de Prova Unitària
A continuació, es mostra un exemple de com escriure una prova unitària per a una ruta simple en Flask.
app/routes.py
from flask import Flask, jsonify app = Flask(__name__) @app.route('/hello', methods=['GET']) def hello(): return jsonify(message="Hello, World!")
tests/test_routes.py
import unittest from app.routes import app class BasicTests(unittest.TestCase): def setUp(self): self.app = app.test_client() self.app.testing = True def test_hello(self): response = self.app.get('/hello') self.assertEqual(response.status_code, 200) self.assertEqual(response.json, {"message": "Hello, World!"}) if __name__ == "__main__": unittest.main()
Explicació del Codi
setUp
: Aquest mètode s'executa abans de cada prova. Aquí, configurem el client de proves de Flask.test_hello
: Aquesta és una prova unitària que verifica que la ruta/hello
retorna un codi d'estat 200 i el missatge esperat.
- Executar Proves amb
unittest
unittest
Per executar les proves, simplement executa el fitxer de proves:
- Escriure Proves Unitàries amb
pytest
pytest
Exemple de Prova Unitària amb pytest
pytest
és una altra eina popular per a les proves unitàries en Python. A continuació, es mostra com escriure la mateixa prova utilitzant pytest
.
tests/test_routes.py
import pytest from app.routes import app @pytest.fixture def client(): app.testing = True return app.test_client() def test_hello(client): response = client.get('/hello') assert response.status_code == 200 assert response.json == {"message": "Hello, World!"}
Explicació del Codi
@pytest.fixture
: Aquesta funció proporciona un client de proves per a les proves.test_hello
: Aquesta és la prova unitària que verifica la ruta/hello
.
- Executar Proves amb
pytest
pytest
Per executar les proves amb pytest
, simplement executa:
- Exercicis Pràctics
Exercici 1: Provar una Ruta POST
Crea una ruta POST que accepti dades JSON i retorni una resposta. Escriu una prova unitària per verificar aquesta funcionalitat.
app/routes.py
tests/test_routes.py
def test_echo(client): response = client.post('/echo', json={"key": "value"}) assert response.status_code == 200 assert response.json == {"key": "value"}
Exercici 2: Provar una Ruta amb Paràmetres
Crea una ruta que accepti un paràmetre en l'URL i retorni una resposta basada en aquest paràmetre. Escriu una prova unitària per verificar aquesta funcionalitat.
app/routes.py
@app.route('/greet/<name>', methods=['GET']) def greet(name): return jsonify(message=f"Hello, {name}!")
tests/test_routes.py
def test_greet(client): response = client.get('/greet/John') assert response.status_code == 200 assert response.json == {"message": "Hello, John!"}
Conclusió
En aquesta secció, hem après la importància de les proves unitàries i com configurar un entorn de proves per a una aplicació Flask. Hem escrit i executat proves unitàries utilitzant unittest
i pytest
. A més, hem practicat amb exercicis per reforçar els conceptes apresos. Les proves unitàries són una eina poderosa per assegurar la qualitat i la robustesa del teu codi, i és important integrar-les en el teu flux de treball de desenvolupament.
Curs de Desenvolupament Web amb Flask
Mòdul 1: Introducció a Flask
- Què és Flask?
- Configuració del Teu Entorn de Desenvolupament
- Creant la Teva Primera Aplicació Flask
- Entenent l'Estructura d'una Aplicació Flask
Mòdul 2: Conceptes Bàsics de Flask
- Enrutament i Mapeig d'URL
- Gestió de Mètodes HTTP
- Renderització de Plantilles amb Jinja2
- Treballant amb Fitxers Estàtics
Mòdul 3: Formularis i Entrada d'Usuari
Mòdul 4: Integració de Bases de Dades
- Introducció a Flask-SQLAlchemy
- Definició de Models
- Realització d'Operacions CRUD
- Migracions de Bases de Dades amb Flask-Migrate
Mòdul 5: Autenticació d'Usuaris
- Registre d'Usuaris
- Inici i Tancament de Sessió d'Usuaris
- Hashing de Contrasenyes
- Gestió de Sessions d'Usuaris
Mòdul 6: Conceptes Avançats de Flask
- Blueprints per a Aplicacions Grans
- Gestió d'Errors
- Pàgines d'Error Personalitzades
- Registre i Depuració
Mòdul 7: APIs RESTful amb Flask
- Introducció a les APIs RESTful
- Creació de Punts Finals RESTful
- Gestió de Dades JSON
- Autenticació per a APIs
Mòdul 8: Desplegament i Producció
- Configuració de Flask per a Producció
- Desplegament a Heroku
- Desplegament a AWS
- Monitorització i Optimització del Rendiment
Mòdul 9: Proves i Millors Pràctiques
- Proves Unitàries amb Flask
- Proves d'Integració
- Cobertura de Proves
- Millors Pràctiques per al Desenvolupament amb Flask