Vai al contenuto

📘 End-to-End automation testing

Alt text

✅ Stack Tecnologico adottato

Questo stack è progettato per eseguire test end-to-end (E2E) in modo affidabile e scalabile. Ogni componente ha un ruolo specifico:

  • WebdriverIO: Test runner che fornisce API moderne per interagire con i browser tramite protocollo WebDriver.
  • Selenium Standalone-Chrome: Server WebDriver che espone un endpoint per controllare il browser Chrome in modalità headless o full.
  • Node.js: Runtime JavaScript che esegue i test e gestisce le dipendenze.
  • Mocha: Framework di test BDD/TDD che definisce la struttura dei test (describe/it) e le asserzioni.
  • Allure Report: Sistema di reportistica avanzato che genera report interattivi con screenshot, log e metriche.
  • Docker: Contenitore per isolare l'ambiente di test, garantendo consistenza tra macchine.
  • Docker Compose: Orchestratore che avvia più container (Selenium, Allure, test runner) con un solo comando.

🔍 Perché questa architettura?

  • Isolamento: Nessuna dipendenza dal sistema host.
  • Scalabilità: Possibilità di eseguire più suite in parallelo.
  • Riproducibilità: Stesso comportamento in locale e in CI/CD.

🏗 Architettura del Sistema

+----------------------+           +--------------------------------+
|  Test Runner (WDIO)  |  <-----> |  Selenium Standalone Chrome    |
|  Node.js + Mocha     |           |  WebDriver endpoint :4444      |
+----------------------+           +--------------------------------+
          |                                      
          | genera risultati                     
          v                                      
+----------------------+                          
|     Allure Report    | <-- allure-results      
|  (Docker Service)    | --> allure-report HTML  
+----------------------+                          

Locale con Docker Compose

Architettura - Locale

GitLab CI (Job + Service Selenium)

Architettura - GitLab CI

🔄 Flusso di Esecuzione

  1. Avvio container: Docker Compose avvia Selenium e Allure.
  2. Esecuzione test: WebdriverIO invia comandi WebDriver a Selenium.
  3. Generazione risultati: I test producono file JSON in allure-results.
  4. Creazione report: Allure genera un report HTML interattivo.
  5. Visualizzazione: Il report è accessibile via browser (porta 4040).

📂 File docker-compose.yml

services:
  standalone-chrome:
    hostname: selenium
    ports:
      - '4444:4444'
    image: 'selenium/standalone-chrome@sha256:553ff18c2055bc2134cd833211c352d601d91f43fd42a7559f94a28eba96a504'
    environment:
      - SE_NODE_GRID_URL=http://127.0.0.1:4444

  allure:
    image: "frankescobar/allure-docker-service@sha256:0815040339a9d4cc175f69a1c89780f298ee6a55d9f0792cfae20b2718e66aa1"
    environment:
      CHECK_RESULTS_EVERY_SECONDS: 1
      KEEP_HISTORY: 0
    ports:
      - "4040:4040"
      - "5050:5050"
    volumes:
      - ${PWD}/allure-results:/app/allure-results

📦 File package.json

{
  "name": "webdriverio-end2end-test",
  "type": "module",
  "devDependencies": {
    "@wdio/allure-reporter": "^9.13.0",
    "@wdio/cli": "^9.13.0",
    "@wdio/local-runner": "^9.13.0",
    "@wdio/mocha-framework": "^9.13.0",
    "@wdio/spec-reporter": "^9.13.0",
    "allure-commandline": "^2.32.2",
    "ts-node": "^10.9.2",
    "typescript": "^5.4.3",
    "wdio-video-reporter": "^6.1.1"
  },
  "scripts": {
    "wdio": "wdio run ./wdio.conf.ts",
    "allure-generate": "allure generate allure-results"
  },
  "dependencies": {
    "axios": "^1.12.2",
    "minio": "^8.0.5",
    "moment": "^2.30.1",
    "otplib": "^12.0.1",
    "selenium-webdriver": "^4.29.0"
  }
}

▶️ Comandi Utili

# Avvia Selenium e Allure in Docker
docker compose -f docker-compose-local.yml up -d

# Esecuzione test e generazione del report Allure
rm -rf allure-results/*
npx wdio run ./wdio.conf.ts --suite <nome della suite/suites da eseguire>

# Apri il servizio Allure (porta 4040)
http://localhost:4040

🧪 Suite di Test presenti raggruppa

Auth & Settings

  • loginAsAdmin.act.ts: Login come amministratore e verifica accesso.
  • setPreferences.act.ts: Impostazione delle preferenze utente.
  • logout.act.ts: Logout e chiusura sessione.

Dataset

  • setupDatasetToBda.act.ts: Configurazione iniziale di un dataset per BDA.
  • createDatasetToDel.act.ts: Creazione di un dataset destinato alla cancellazione.
  • deleteDataset.act.ts: Eliminazione di un dataset esistente.
  • createDatasetToBda.act.ts: Creazione di un dataset per BDA.

BDA Service

  • createBdaServiceToDel.act.ts: Creazione di un servizio BDA da eliminare successivamente.
  • deleteBdaService.act.ts: Eliminazione di un servizio BDA.
  • createBdaServiceToBda.act.ts: Creazione di un servizio BDA per integrazione.

BDA Application

  • createBdaAppNoMlf.act.ts: Creazione di un’applicazione BDA senza modello ML.
  • editBdaApp.act.ts: Modifica configurazione di un’applicazione BDA.
  • runBdaAppToCompl.act.ts: Esecuzione di un’applicazione BDA fino al completamento.
  • showLogBdaApp.act.ts: Visualizzazione dei log di un’applicazione BDA.
  • runBdaAppToStop.act.ts: Avvio e interruzione di un’applicazione BDA.
  • checkDatasetBda.act.ts: Verifica dataset associati a un’applicazione BDA.
  • handleScheduler.act.ts: Gestione dello scheduler per applicazioni BDA.
  • deleteObjOnMinio.act.ts: Eliminazione di oggetti su MinIO.

📊 Reportistica

  • I risultati dei test vengono salvati in allure-results
  • Il report HTML viene generato in allure-report
  • Servizio Allure disponibile su http://localhost:4040

🔍 Troubleshooting

  • Errore connessione Selenium: assicurarsi che il container standalone-chrome sia attivo.
  • Report vuoto: verificare che i file in allure-results siano generati.

🚀 Integrazione CI/CD con GitLab

Esempio di pipeline GitLab per eseguire i test e generare il report Allure.

📄 File .gitlab-ci.yml

stages:
  - install-and-test
  - generate-allure-report

variables:
  SELENIUM_IMAGE: selenium/standalone-chrome@sha256:553ff18c2055bc2134cd833211c352d601d91f43fd42a7559f94a28eba96a504
  WDIO_CONFIG_PATH: ./wdio.conf.ts
  SE_NODE_GRID_URL: http://selenium:4444

install_dependencies:
  stage: install-and-test
  services:
    - name: $SELENIUM_IMAGE
      alias: selenium
  image: node:22
  tags:
    - docker
  artifacts:
    paths:
      - allure-results
    when: always
    expire_in: 1 day

  script:
    - npm ci
    - npx wdio run $WDIO_CONFIG_PATH --suite alida_1_series alida_2_series #alida_3_series

  only:
    - new-dev

generate-allure-result:
  stage: generate-allure-report
  image: frankescobar/allure-docker-service@sha256:0815040339a9d4cc175f69a1c89780f298ee6a55d9f0792cfae20b2718e66aa1
  tags:
    - docker
  artifacts:
    paths:
      - allure-report
      - allure-results
    when: always
    expire_in: 1 day
  script:
    - allure generate --single-file allure-results --clean -o allure-report
  when: always
  allow_failure: true

🔍 Dettagli

  • Stage install-and-test: esegue i test con WebdriverIO usando Selenium come servizio Docker.
  • Stage generate-allure-report: genera il report Allure in formato HTML.
  • Artifacts: i risultati (allure-results) e il report (allure-report) vengono salvati come artifact per il download.