En aquest tema, aprendrem com realitzar proves efectives i desplegar la teva solució a Google Cloud Platform (GCP). Aquest procés és crucial per assegurar que la teva aplicació funcioni correctament i estigui preparada per a l'ús en producció.

  1. Importància de les proves

Per què són importants les proves?

  • Detecció d'errors: Identificar i corregir errors abans del desplegament en producció.
  • Assegurament de la qualitat: Garantir que la solució compleixi amb els requisits funcionals i no funcionals.
  • Millora de la seguretat: Detectar vulnerabilitats de seguretat.
  • Optimització del rendiment: Assegurar que l'aplicació funcioni de manera eficient sota diferents condicions de càrrega.

  1. Tipus de proves

Proves unitàries

  • Objectiu: Verificar que cada unitat de codi funcioni correctament.
  • Eines: JUnit (per a Java), pytest (per a Python), etc.
  • Exemple:
    import unittest
    
    def suma(a, b):
        return a + b
    
    class TestSuma(unittest.TestCase):
        def test_suma(self):
            self.assertEqual(suma(1, 2), 3)
    
    if __name__ == '__main__':
        unittest.main()
    

Proves d'integració

  • Objectiu: Verificar que diferents mòduls o serveis funcionin correctament junts.
  • Eines: Postman, SoapUI, etc.
  • Exemple:
    import requests
    
    def test_api():
        response = requests.get('https://api.example.com/data')
        assert response.status_code == 200
        assert 'data' in response.json()
    

Proves de sistema

  • Objectiu: Verificar que el sistema complet funcioni correctament.
  • Eines: Selenium (per a proves de navegadors), JMeter (per a proves de càrrega), etc.

Proves de rendiment

  • Objectiu: Avaluar el rendiment de l'aplicació sota diferents condicions de càrrega.
  • Eines: Apache JMeter, Locust, etc.

Proves de seguretat

  • Objectiu: Identificar vulnerabilitats de seguretat.
  • Eines: OWASP ZAP, Burp Suite, etc.

  1. Eines de proves a GCP

Google Cloud Build

  • Funcionalitat: Automatitzar la construcció, prova i desplegament de la teva aplicació.
  • Exemple de configuració:
    steps:
    - name: 'gcr.io/cloud-builders/mvn'
      args: ['clean', 'install']
    - name: 'gcr.io/cloud-builders/gcloud'
      args: ['app', 'deploy']
    

Google Cloud Monitoring

  • Funcionalitat: Monitoritzar el rendiment i la salut de la teva aplicació.
  • Exemple de configuració:
    resources:
      - type: gce_instance
        labels:
          instance_id: '1234567890123456789'
          zone: 'us-central1-a'
    metrics:
      - type: compute.googleapis.com/instance/cpu/utilization
        labels:
          instance_id: '1234567890123456789'
    

  1. Desplegament

Estratègies de desplegament

  • Desplegament continu: Automatitzar el desplegament de cada canvi que passa les proves.
  • Desplegament en blau/verd: Mantenir dues versions de l'aplicació (blau i verd) i alternar entre elles.
  • Desplegament canari: Desplegar la nova versió a un petit subconjunt d'usuaris abans de desplegar-la a tots els usuaris.

Eines de desplegament a GCP

  • Google Kubernetes Engine (GKE): Per desplegar aplicacions contenidoritzades.
  • Google App Engine: Per desplegar aplicacions sense servidor.
  • Google Cloud Run: Per desplegar aplicacions contenidoritzades sense servidor.

Exemple de desplegament amb Google App Engine

  • app.yaml:

    runtime: python39
    entrypoint: gunicorn -b :$PORT main:app
    
    handlers:
    - url: /.*
      script: auto
    
  • Comandament de desplegament:

    gcloud app deploy
    

  1. Exercici pràctic

Objectiu

Desplegar una aplicació web senzilla a Google App Engine i realitzar proves unitàries i d'integració.

Passos

  1. Crear una aplicació web senzilla en Python:

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello():
        return 'Hola, món!'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8080)
    
  2. Escriure proves unitàries:

    import unittest
    from main import app
    
    class TestApp(unittest.TestCase):
        def setUp(self):
            self.app = app.test_client()
    
        def test_hello(self):
            response = self.app.get('/')
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.data, b'Hola, món!')
    
    if __name__ == '__main__':
        unittest.main()
    
  3. Configurar app.yaml:

    runtime: python39
    entrypoint: gunicorn -b :$PORT main:app
    
    handlers:
    - url: /.*
      script: auto
    
  4. Desplegar l'aplicació:

    gcloud app deploy
    
  5. Executar les proves:

    python -m unittest test_main.py
    

  1. Resum

En aquesta secció, hem après la importància de les proves i les diferents tipologies que existeixen. Hem explorat les eines de proves i desplegament disponibles a GCP, i hem realitzat un exercici pràctic per desplegar una aplicació web senzilla a Google App Engine. Aquest coneixement és fonamental per assegurar que les teves aplicacions funcionin correctament i estiguin preparades per a l'ús en producció.

© Copyright 2024. Tots els drets reservats