Sobes.tech
Middle

Cum veți verifica serviciul web?

sobes.tech AI

Răspuns de la AI

Verificarea unui serviciu web include mai multe etape cheie și tipuri de testare:

  1. Înțelegerea cerințelor și specificațiilor:

    • Studierea documentației (Swagger/OpenAPI, WSDL, specificații funcționale).
    • Clarificarea punctelor neclare cu echipa de dezvoltare sau analiștii de business.
  2. Planificarea testării:

    • Stabilirea strategiei de testare.
    • Alegerea metodelor și instrumentelor de testare.
    • Planificarea volumului de date de testare.
  3. Testarea funcțională:

    • Scenarii pozitive: Verificarea comportamentului așteptat cu date de intrare corecte.
      • Scenarii negative: Verificarea procesării datelor incorecte, erorilor, valorilor limită.
    • Testarea tuturor operațiunilor (GET, POST, PUT, DELETE etc.).
    • Validarea structurii cererilor și răspunsurilor (JSON, XML).
    • Verificarea statusurilor HTTP (2xx - succes, 4xx - eroare client, 5xx - eroare server).
    • Repornirea serverului în timpul funcționării (pentru scenarii negative).
  4. Testarea integrării:

    • Verificarea interacțiunii serviciului web cu alte servicii sau sisteme.
    • Utilizarea instrumentelor care pot emula răspunsurile serviciilor dependente (moc-servere).
  5. Testarea performanței:

    • Testarea de încărcare: Verificarea comportamentului serviciului sub sarcină așteptată.
    • Testarea de stres: Verificarea funcționării sub sarcină mai mare decât cea așteptată pentru a determina punctul de eșec.
    • Testarea stabilității (Endurance testing): Verificarea funcționării serviciului sub sarcină pentru perioade lungi de timp.
    • Măsurarea timpului de răspuns și a capacității de transfer.
  6. Testarea securității:

    • Verificarea autentificării și autorizării.
    • Validarea intrărilor pentru prevenirea injecțiilor SQL, XSS și alte vulnerabilități.
    • Verificarea prezenței HTTPS.
  7. Testarea datelor:

    • Verificarea corectitudinii datelor returnate de serviciu.
    • Verificarea integrității datelor în operațiunile de creare, actualizare și ștergere.
    • Testarea cu volume mari de date.
  8. Automatizarea testării:

    • Automatizarea testelor funcționale repetitive.
    • Utilizarea bibliotecilor și framework-urilor pentru automatizarea testelor API (Rest Assured, JUnit/TestNG, Pytest, Postman Newman).
    • Configurarea CI/CD pentru rularea automată a testelor.
  9. Instrumente:

    • Postman, Insomnia (testare manuală și automată).
    • Apache JMeter, LoadRunner, Gatling (testare de performanță).
    • OWASP ZAP, Burp Suite (testare de securitate).
    • Biblioteci pentru limbaje de programare (Rest Assured pentru Java, Requests pentru Python etc.).
  10. Raportare:

    • Înregistrarea defectelor găsite cu descriere detaliată a pașilor de reproducere, rezultatelor așteptate și reale, datelor de solicitare/răspuns, statusului HTTP și jurnalelor.
    • Elaborarea rapoartelor despre progresul testării.

Exemplu de test automatizat în Java folosind 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-ul de bază al serviciului
            .when()
            .get("/users/" + userId) // metoda și endpoint-ul
            .then()
            .statusCode(200) // verificarea codului de stare
            .body("id", equalTo(userId)) // verificarea câmpului din corpul răspunsului
            .body("name", equalTo("John Doe")); // verificarea altui câmp
    }

    @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") // Setarea tipului de conținut
            .body(requestBody) // Trimiterea corpului cererii
            .when()
            .post("/users") // metoda și endpoint-ul pentru creare
            .then()
            .statusCode(201) // verificarea codului de stare "Created"
            .body("name", equalTo("Jane Smith"))
            .body("id", org.hamcrest.Matchers.notNullValue()); // verificarea dacă ID a fost creat
    }
}