Testning på avancerad nivå: JUnit, Mockito och integrationstester · Lektion

Hantering av testdata

Utveckla strategier för att skapa, hantera och rensa testdata för att säkerställa repeterbara E2E-tester.

Lektion 3 av 411 steg

Hantering av testdata är en gratis lektion i Testning på avancerad nivå: JUnit, Mockito och integrationstester på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Testning på avancerad nivå: JUnit, Mockito och integrationstester, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Testning på avancerad nivå: JUnit, Mockito och integrationstester innehåller totalt 4 lektioner.

Grunderna i testdata för E2E-tester

När Ni utför End-to-End-tester (E2E-tester) är testdata avgörande. Det är den information som Er applikation använder under ett test, till exempel användarkonton, produktuppgifter eller orderhistorik.

Utan bra testdata blir Era E2E-tester otillförlitliga. Föreställ Er att Ni testar ett e-handelskassa utan en produkt i varukorgen eller en registrerad användare!

Utmaningar med E2E-data

Att hantera testdata för E2E-tester medför särskilda utmaningar:

  • Komplexitet: E2E-tester interagerar ofta med flera delar av systemet, vilket kräver komplexa datauppsättningar.
  • Beroenden: Data kan vara beroende av externa system eller andra moduler, vilket gör den svår att kontrollera.
  • Tillstånd: Tester kan lämna systemet i ett oväntat tillstånd, vilket påverkar efterföljande tester.
  • Rensning: Det kan vara svårt att ta bort data efter ett test, men det är avgörande för att testerna ska kunna upprepas.

Skapa data via API

En vanlig strategi är att skapa testdata programmatiskt med hjälp av applikationens egna API:er, till exempel REST API-endpoints. Då säkerställs att datan går igenom samma valideringslogik som verklig användardata.

Prova att köra det här exemplet, som simulerar att en användare skapas via ett API:

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
  public static void main(String[] args) throws IOException, InterruptedException {
    String jsonPayload = "{\"username\": \"testuser\", \"email\": \"test@example.com\"}";
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.example.com/users"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
        .build();

    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println("API Call Status: " + response.statusCode());
    System.out.println("Response Body: " + response.body());
  }
}

Data med databasskript

För vissa E2E-tester kan Ni behöva infoga data direkt i databasen med hjälp av SQL-skript. Det går snabbt, men kringgår applikationens affärslogik.

Använd denna metod varsamt, vanligtvis för grundläggande data eller när det är för långsamt eller komplext att skapa data via API:et.

INSERT INTO users (id, username, email)
VALUES (101, 'db_user', 'db@example.com');

INSERT INTO products (id, name, price)
VALUES (201, 'Test Product A', 19.99);

Använda testdatafabriker

Testdatafabriker (eller generatorer) är verktyg eller anpassade klasser som automatiserar skapandet av realistiska och varierade data. Bibliotek som Faker kan generera namn, adresser med mera.

Det gör det möjligt att skapa varierade testscenarier utan manuellt arbete. Här är ett enkelt exempel på fabrikkonceptet:

// Imagine a UserFactory class
class User {
    String username;
    String email;
    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }
    @Override
    public String toString() {
        return "User: " + username + " (" + email + ")";
    }
}

class UserFactory {
    private static int counter = 0;
    public static User createRandomUser() {
        counter++;
        return new User("user_" + counter, "user" + counter + "@example.com");
    }
}

public class Main {
  public static void main(String[] args) {
    User user1 = UserFactory.createRandomUser();
    User user2 = UserFactory.createRandomUser();
    System.out.println(user1);
    System.out.println(user2);
  }
}

Isolera testdata

En av de viktigaste principerna är isolering av testdata. Varje test eller testsamling bör helst arbeta med sin egen unika uppsättning data.

Det hindrar tester från att påverka varandra, vilket gör dem mer tillförlitliga och enklare att felsöka. Delad data kan leda till instabila tester som godkänns eller misslyckas oförutsägbart.

Miljödata

Testdata behöver ofta skilja sig åt mellan olika miljöer, till exempel utveckling, staging och produktion. Ni kan ha specifika konfigurationer eller integrationer med externa tjänster som kräver unik data.

Hantera detta genom att använda miljövariabler, konfigurationsfiler eller särskilda datauppsättningar för varje miljö.

Avgörande datarensning

Att skapa testdata är bara halva arbetet; att rensa bort den är minst lika viktigt. När ett test har körts ska all data som testet skapade tas bort.

Varför är rensning så viktigt?

  • Säkerställer att testerna verkligen kan upprepas.
  • Förhindrar att testmiljön förorenas av data.
  • Undviker oväntade bieffekter i efterföljande tester.

Programmatisk rensning

Precis som Ni skapar data programmatiskt bör Ni också ta bort den programmatiskt. Det kan innebära att Ni anropar en 'delete'-API-endpoint eller kör SQL-satser med DELETE.

Ofta utförs rensningen i en metod av typen @AfterEach eller @AfterAll (beroende på Ert testramverk) för att garantera att den körs när testerna är klara.

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
  public static void main(String[] args) throws IOException, InterruptedException {
    String userIdToDelete = "testuser"; // Or an ID obtained during creation
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.example.com/users/" + userIdToDelete))
        .DELETE()
        .build();

    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println("Delete Status: " + response.statusCode());
  }
}

Frågesport om testdata

Vilka av följande är goda metoder för att hantera testdata i End-to-End-tester (E2E-tester)?

Sammanfattning: Bemästra testdata

Ni har lärt Er att effektiv hantering av testdata är avgörande för stabila och repeterbara E2E-tester. Vi har gått igenom:

  • Strategier för att skapa data (API:er, databasskript, fabriker).
  • Vikten av dataisolering och miljöspecifik data.
  • Nödvändigheten av att rensa bort data efter tester.

Genom att tillämpa dessa strategier kan Ni bygga mer robusta och tillförlitliga E2E-testsviter!

Gratis att börja

Lär dig Testning på avancerad nivå: JUnit, Mockito och integrationstester med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Hantering av testdata” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Testning på avancerad nivå: JUnit, Mockito och integrationstester, inklusive ”Hantering av testdata”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Testning på avancerad nivå: JUnit, Mockito och integrationstester innehåller totalt 4 lektioner.

Vad lär jag mig i ”Hantering av testdata”?

Utveckla strategier för att skapa, hantera och rensa testdata för att säkerställa repeterbara E2E-tester. Ni övar på Testning på avancerad nivå: JUnit, Mockito och integrationstester med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Testning på avancerad nivå: JUnit, Mockito och integrationstester?

Du behöver inga förkunskaper. Utbildningen i Testning på avancerad nivå: JUnit, Mockito och integrationstester på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Hantering av testdata”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Testning på avancerad nivå: JUnit, Mockito och integrationstester-lektionen?

Ja. Varje Testning på avancerad nivå: JUnit, Mockito och integrationstester-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. E2E-testning kontra integrationstestning
  2. Översikt över verktyg för E2E-testning
  3. Hantering av testdata
  4. Skriv tillförlitliga E2E-tester: besegra flakighet
← Tillbaka till Testning på avancerad nivå: JUnit, Mockito och integrationstester