Sobes.tech
Middle

Come controllerai il servizio web?

sobes.tech AI

Risposta dell'AI

La verifica del servizio web include diverse fasi chiave e tipi di test:

  1. Comprensione dei requisiti e delle specifiche:

    • Studio della documentazione (Swagger/OpenAPI, WSDL, specifiche funzionali).
    • Chiarimento di punti poco chiari con il team di sviluppo o analisti di business.
  2. Pianificazione dei test:

    • Definizione della strategia di test.
    • Selezione di metodi e strumenti di test.
    • Pianificazione del volume di dati di test.
  3. Test di funzionalità:

    • Scenari positivi: Verifica del comportamento atteso con dati di input corretti.
    • Scenari negativi: Verifica della gestione di dati errati, errori, valori limite.
    • Test di tutte le operazioni (GET, POST, PUT, DELETE, ecc.).
    • Validazione della struttura delle richieste e risposte (JSON, XML).
    • Verifica degli stati di risposta HTTP (2xx - successo, 4xx - errore del client, 5xx - errore del server).
    • Riavvio del server durante l'operazione (per scenario negativo).
  4. Test di integrazione:

    • Verifica dell'interazione del servizio web con altri servizi o sistemi.
    • Utilizzo di strumenti che possano emulare le risposte di servizi dipendenti (mock-server).
  5. Test di performance:

    • Test di carico: Verifica del comportamento del servizio sotto carico atteso.
    • Test di stress: Verifica del funzionamento sotto carico superiore a quello atteso per determinare il punto di fallimento.
    • Test di stabilità (Endurance testing): Verifica del funzionamento del servizio sotto carico per un lungo periodo.
    • Misurazione del tempo di risposta e della larghezza di banda.
  6. Test di sicurezza:

    • Verifica di autenticazione e autorizzazione.
    • Validazione dell'input per prevenire SQL injection, XSS e altre vulnerabilità.
    • Verifica della presenza di HTTPS.
  7. Test sui dati:

    • Verifica della correttezza dei dati restituiti dal servizio.
    • Verifica dell'integrità dei dati durante operazioni di creazione, aggiornamento e cancellazione.
    • Test con grandi volumi di dati.
  8. Automazione dei test:

    • Automazione dei test funzionali routinari.
    • Uso di librerie e framework per automatizzare i test API (Rest Assured, JUnit/TestNG, Pytest, Postman Newman).
    • Configurazione di CI/CD per l'esecuzione automatica dei test.
  9. Strumenti:

    • Postman, Insomnia (test manuali e automatizzati).
    • Apache JMeter, LoadRunner, Gatling (test di performance).
    • OWASP ZAP, Burp Suite (test di sicurezza).
    • Librerie per linguaggi di programmazione (Rest Assured per Java, Requests per Python, ecc.).
  10. Report:

    • Registrazione dei difetti trovati con descrizione dettagliata dei passaggi, risultati attesi e reali, dati di richiesta/risposta, stato HTTP e log.
    • Redazione di rapporti sul progresso dei test.

Esempio di test automatizzato in Java con Rest Assured:

import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;

class UserServiceTest {

    @Test
    void testGetUserById() {
        int userId = 1;
        given()
            .baseUri("http://api.example.com") // URL di base del servizio
            .when()
            .get("/users/" + userId) // Metodo e endpoint
            .then()
            .statusCode(200) // Verifica del codice di stato
            .body("id", equalTo(userId)) // Verifica del campo nella risposta
            .body("name", equalTo("John Doe")); // Verifica di un altro campo
    }

    @Test
    void testCreateUser() {
        String requestBody = "{\n" +
                             "  \"name\": \"Jane Smith\",\n" +
                             "  \"email\": \"jane.smith@example.com\"\n" +
                             "}";

        given()
            .baseUri("http://api.example.com")
            .contentType("application/json") // Imposta il tipo di contenuto
            .body(requestBody) // Corpo della richiesta
            .when()
            .post("/users") // Metodo e endpoint per creare
            .then()
            .statusCode(201) // Verifica del codice "Creato"
            .body("name", equalTo("Jane Smith"))
            .body("id", org.hamcrest.Matchers.notNullValue()); // Verifica che venga creato un ID
    }
}