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

pip install coverage

Utilització de coverage.py

  1. Executar les Proves amb Cobertura:

    coverage run -m unittest discover
    
  2. Generar un Informe de Cobertura:

    coverage report
    
  3. 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:

coverage run -m unittest discover
coverage report

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

Mòdul 2: Conceptes Bàsics de Flask

Mòdul 3: Formularis i Entrada d'Usuari

Mòdul 4: Integració de Bases de Dades

Mòdul 5: Autenticació d'Usuaris

Mòdul 6: Conceptes Avançats de Flask

Mòdul 7: APIs RESTful amb Flask

Mòdul 8: Desplegament i Producció

Mòdul 9: Proves i Millors Pràctiques

Mòdul 10: Extensions i Ecosistema de Flask

© Copyright 2024. Tots els drets reservats