La cobertura de proves és una mesura que indica quina part del codi font d'una aplicació està sent executada durant les proves. És una eina essencial per assegurar que el codi està ben provat i que les proves cobreixen la major part possible del codi, minimitzant així el risc d'errors no detectats.
Objectius d'Aquesta Secció
- Entendre què és la cobertura de proves i per què és important.
- Aprendre a utilitzar eines per mesurar la cobertura de proves en una aplicació Flask.
- Analitzar els resultats de la cobertura de proves per identificar àrees no cobertes.
- Millorar la cobertura de proves afegint proves addicionals.
Què és la Cobertura de Proves?
La cobertura de proves és una mètrica que mesura el percentatge de codi que és executat durant les proves. Aquesta mètrica ajuda a identificar parts del codi que no estan sent provades, permetent als desenvolupadors afegir proves addicionals per cobrir aquestes àrees.
Tipus de Cobertura de Proves
- Cobertura de Línies: Mesura el percentatge de línies de codi executades durant les proves.
- Cobertura de Funcions: Mesura el percentatge de funcions o mètodes executats durant les proves.
- Cobertura de Ramificacions: Mesura el percentatge de camins de decisió (if, else, etc.) executats durant les proves.
Eines per Mesurar la Cobertura de Proves
Una de les eines més populars per mesurar la cobertura de proves en aplicacions Python és coverage.py
. Aquesta eina proporciona informes detallats sobre quines parts del codi han estat executades durant les proves.
Instal·lació de coverage.py
Utilització de coverage.py
-
Executar les Proves amb Cobertura:
coverage run -m unittest discover
-
Generar un Informe de Cobertura:
coverage report
-
Generar un Informe HTML:
coverage html
Exemple Pràctic
Suposem que tenim una aplicació Flask amb el següent codi:
# app.py from flask import Flask app = Flask(__name__) @app.route('/') def home(): return "Hello, World!" @app.route('/about') def about(): return "About Page" if __name__ == '__main__': app.run()
I tenim les següents proves:
# test_app.py import unittest from app import app class BasicTests(unittest.TestCase): def setUp(self): self.app = app.test_client() self.app.testing = True def test_home(self): response = self.app.get('/') self.assertEqual(response.status_code, 200) self.assertEqual(response.data, b"Hello, World!") def test_about(self): response = self.app.get('/about') self.assertEqual(response.status_code, 200) self.assertEqual(response.data, b"About Page") if __name__ == "__main__": unittest.main()
Per mesurar la cobertura de proves, executem:
L'informe de cobertura mostrarà quines línies de app.py
han estat executades durant les proves.
Analitzar els Resultats de la Cobertura
Després de generar l'informe de cobertura, és important analitzar els resultats per identificar àrees no cobertes. L'informe HTML generat per coverage.py
proporciona una visualització clara de quines línies de codi no han estat executades.
Exemple d'Informe de Cobertura
Name Stmts Miss Cover --------------------------- app.py 10 0 100% --------------------------- TOTAL 10 0 100%
En aquest exemple, totes les línies de app.py
han estat executades durant les proves, resultant en una cobertura del 100%.
Millorar la Cobertura de Proves
Si l'informe de cobertura mostra que algunes parts del codi no estan cobertes, és important afegir proves addicionals per cobrir aquestes àrees. Això pot incloure:
- Afegir proves per a camins de decisió no coberts.
- Afegir proves per a funcions o mètodes no provats.
- Afegir proves per a casos límit o d'error.
Consells Addicionals
- Cobertura no és Tot: Una alta cobertura de proves no garanteix que el codi estigui lliure d'errors. És important combinar la cobertura de proves amb altres tècniques de proves com les proves d'integració i les proves de sistema.
- Revisió de Codi: A més de les proves automàtiques, la revisió de codi per part d'altres desenvolupadors pot ajudar a identificar errors que les proves automàtiques poden no detectar.
Resum
En aquesta secció, hem après què és la cobertura de proves, per què és important i com utilitzar coverage.py
per mesurar la cobertura de proves en una aplicació Flask. També hem vist com analitzar els resultats de la cobertura i com millorar la cobertura afegint proves addicionals. La cobertura de proves és una eina poderosa per assegurar que el codi està ben provat i per minimitzar el risc d'errors no detectats.
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