Introducció

Les proves automatitzades són una part fonamental de la Integració Contínua (CI). Aquestes proves permeten verificar automàticament que el codi nou o modificat no introdueix errors en el sistema existent. En aquesta secció, aprendrem sobre els diferents tipus de proves automatitzades, com configurar-les i com integrar-les en el procés de CI.

Objectius

  • Entendre els diferents tipus de proves automatitzades.
  • Aprendre a configurar proves automatitzades.
  • Integrar proves automatitzades en el procés de CI.

Tipus de Proves Automatitzades

  1. Proves Unitàries

Les proves unitàries verifiquen el funcionament de components individuals del codi, com ara funcions o mètodes. Aquestes proves són ràpides d'executar i proporcionen una retroalimentació immediata sobre la qualitat del codi.

Exemple de Prova Unitària en Python:

import unittest

def suma(a, b):
    return a + b

class TestSuma(unittest.TestCase):
    def test_suma(self):
        self.assertEqual(suma(1, 2), 3)
        self.assertEqual(suma(-1, 1), 0)
        self.assertEqual(suma(0, 0), 0)

if __name__ == '__main__':
    unittest.main()

  1. Proves d'Integració

Les proves d'integració verifiquen que diferents components del sistema funcionen correctament quan es combinen. Aquestes proves són més complexes que les proves unitàries i poden requerir la configuració de bases de dades o altres serveis externs.

Exemple de Prova d'Integració en Node.js:

const request = require('supertest');
const app = require('../app'); // Suposant que 'app' és la teva aplicació Express

describe('GET /users', function() {
  it('respon amb una llista d'usuaris', function(done) {
    request(app)
      .get('/users')
      .expect('Content-Type', /json/)
      .expect(200, done);
  });
});

  1. Proves de Sistema

Les proves de sistema verifiquen el sistema complet en un entorn que simula la producció. Aquestes proves asseguren que totes les parts del sistema funcionen conjuntament com s'espera.

  1. Proves de Regressió

Les proves de regressió asseguren que els canvis recents en el codi no han introduït errors en funcionalitats que anteriorment funcionaven correctament. Aquestes proves es poden automatitzar per executar-se després de cada canvi en el codi.

Configuració de Proves Automatitzades

  1. Configuració d'un Entorn de Proves

Per configurar un entorn de proves, necessitem:

  • Un framework de proves (per exemple, JUnit per a Java, pytest per a Python).
  • Un entorn d'execució (per exemple, un servidor de proves o un contenidor Docker).
  • Dades de prova (per exemple, bases de dades de prova).

  1. Escriure Proves Automatitzades

Quan escrivim proves automatitzades, és important seguir les millors pràctiques:

  • Escriure proves petites i enfocades.
  • Utilitzar noms descriptius per a les proves.
  • Assegurar-se que les proves siguin repetibles i independents.

  1. Executar Proves Automatitzades

Les proves automatitzades es poden executar manualment o com a part d'un pipeline de CI. Les eines de CI com Jenkins, GitLab CI/CD, i CircleCI poden executar proves automatitzades després de cada commit o push al repositori.

Exemple de Configuració de Jenkins per a Proves Automatitzades:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
        stage('Test') {
            steps {
                sh 'make test'
            }
        }
    }
}

Integració de Proves Automatitzades en CI

  1. Integració amb Control de Versions

Les proves automatitzades es poden integrar amb sistemes de control de versions com Git. Cada vegada que es fa un commit o un push, les proves s'executen automàticament per assegurar-se que el codi és estable.

  1. Informes de Proves

Després d'executar les proves, és important generar informes que mostrin els resultats. Aquests informes poden incloure:

  • Nombre de proves executades.
  • Nombre de proves passades i fallades.
  • Temps d'execució de les proves.

Exemple d'Informe de Proves amb pytest:

pytest --junitxml=report.xml

Exercici Pràctic

Exercici: Escriure i Executar Proves Unitàries

  1. Escriu una funció que calculi el factorial d'un nombre.
  2. Escriu proves unitàries per a aquesta funció.
  3. Executa les proves unitàries utilitzant el teu framework de proves preferit.

Solució:

# factorial.py
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

# test_factorial.py
import unittest
from factorial import factorial

class TestFactorial(unittest.TestCase):
    def test_factorial(self):
        self.assertEqual(factorial(0), 1)
        self.assertEqual(factorial(1), 1)
        self.assertEqual(factorial(5), 120)

if __name__ == '__main__':
    unittest.main()

Conclusió

Les proves automatitzades són essencials per mantenir la qualitat del codi i assegurar-se que els canvis no introdueixen errors. En aquesta secció, hem après sobre els diferents tipus de proves automatitzades, com configurar-les i com integrar-les en el procés de CI. Amb aquesta base, estem preparats per avançar cap a la següent etapa del nostre curs de CI/CD.

© Copyright 2024. Tots els drets reservats