Sobes.tech
Middle

Hoe gaat u de webservice controleren?

sobes.tech AI

Antwoord van AI

De controle van een webservice omvat verschillende belangrijke fasen en testtypes:

  1. Begrip van vereisten en specificaties:

    • Bestudering van documentatie (Swagger/OpenAPI, WSDL, functionele specificaties).
    • Clarificatie van onduidelijke punten met het ontwikkelingsteam of businessanalisten.
  2. Testplanning:

    • Bepaling van de teststrategie.
    • Keuze van testmethoden en -tools.
    • Planning van de testgegevens.
  3. Functioneel testen:

    • Positieve scenario's: Controle van het verwachte gedrag bij correcte invoergegevens.
    • Negatieve scenario's: Controle van de verwerking van onjuiste gegevens, fouten, grenswaarden.
    • Testen van alle operaties (GET, POST, PUT, DELETE, etc.).
    • Validatie van de structuur van verzoeken en antwoorden (JSON, XML).
    • Controle van HTTP-statuscodes (2xx - succes, 4xx - klantfout, 5xx - serverfout).
    • Herstarten van de server tijdens werking (voor negatieve scenario's).
  4. Integratietesten:

    • Controle van de interactie tussen webservice en andere services of systemen.
    • Gebruik van tools die antwoorden van afhankelijke services kunnen emuleren (mock-servers).
  5. Prestatietesten:

    • Load testing: Gedrag van de service onder verwachte belasting.
    • Stress testing: Werking onder hogere belasting dan verwacht om het breekpunt te bepalen.
    • Stabiliteitstesten (Endurance testing): Controle van de werking onder belasting gedurende lange tijd.
    • Meting van responstijd en doorvoer.
  6. Beveiligingstesten:

    • Controle van authenticatie en autorisatie.
    • Validatie van invoer om SQL-injecties, XSS en andere kwetsbaarheden te voorkomen.
    • Controle op HTTPS-verbinding.
  7. Datatesten:

    • Controle van de correctheid van gegevens die door de service worden geretourneerd.
    • Controle van gegevensintegriteit bij create-, update- en delete-operaties.
    • Testen met grote hoeveelheden gegevens.
  8. Automatisering van testen:

    • Automatisering van routinematige functionele tests.
    • Gebruik van bibliotheken en frameworks voor API-automatisering (Rest Assured, JUnit/TestNG, Pytest, Postman Newman).
    • Configuratie van CI/CD voor automatische testuitvoering.
  9. Tools:

    • Postman, Insomnia (handmatige en geautomatiseerde tests).
    • Apache JMeter, LoadRunner, Gatling (prestatietesten).
    • OWASP ZAP, Burp Suite (beveiligingstesten).
    • Bibliotheken voor programmeertalen (Rest Assured voor Java, Requests voor Python, etc.).
  10. Rapportage:

    • Documentatie van gevonden defecten met gedetailleerde reproduceringsstappen, verwachte en feitelijke resultaten, request/response data, HTTP-status en logs.
    • Opstellen van testvoortgangsrapporten.

Voorbeeld van een geautomatiseerde test in Java met 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") // Basis URL van de service
            .when()
            .get("/users/" + userId) // Methode en endpoint
            .then()
            .statusCode(200) // Controle van de status code
            .body("id", equalTo(userId)) // Controle van het veld in de response body
            .body("name", equalTo("John Doe")); // Controle van een ander veld
    }

    @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") // Instellen van content type
            .body(requestBody) // Verzend request body
            .when()
            .post("/users") // Methode en endpoint voor aanmaken
            .then()
            .statusCode(201) // Controle van de status code "Created"
            .body("name", equalTo("Jane Smith"))
            .body("id", org.hamcrest.Matchers.notNullValue()); // Controle of ID is aangemaakt
    }
}