Einführung in Rest Assured API-Tests für Anfänger

Lerne REST Assured API-Tests! Anfängerfreundlicher Guide: Automatisierung, erste Skripte schreiben & Testeffizienz steigern.

Leo Schulz

Leo Schulz

5 June 2025

Einführung in Rest Assured API-Tests für Anfänger

In der Welt der Softwareentwicklung sind APIs (Application Programming Interfaces) zum Rückgrat moderner Anwendungen geworden. Da diese APIs an Komplexität und Bedeutung zunehmen, war der Bedarf an robusten und effizienten Testmethoden noch nie so entscheidend. Hier kommt Rest Assured ins Spiel, eine Java-basierte Bibliothek, die die Art und Weise, wie wir API-Tests angehen, revolutioniert hat.

Rest Assured hat unter Entwicklern und Qualitätssicherungsfachleuten immense Popularität erlangt, da es REST-API-Tests einfach und leistungsstark automatisiert. Seine ausdrucksstarke Syntax und die nahtlose Integration mit Java machen es zu einer idealen Wahl für Teams, die umfassende API-Teststrategien implementieren möchten.

In diesem vollständigen Leitfaden werden wir uns eingehender mit Rest Assured API-Tests befassen und alles von der grundlegenden Einrichtung bis zu fortgeschrittenen Techniken behandeln und sogar untersuchen, wie es sich mit anderen Tools in der API-Testlandschaft vergleicht.

Was ist Rest Assured im API-Testing?

Rest Assured ist eine Java-basierte Bibliothek, die speziell für das Testen von RESTful APIs entwickelt wurde. Sie stellt eine domänenspezifische Sprache (DSL) für das Erstellen von HTTP-Anfragen und das Validieren von Antworten bereit. Zu den wichtigsten Funktionen gehören:

Was ist REST API im Testing?

REST (Representational State Transfer) API ist ein Architekturstil für die Gestaltung von Netzwerkanwendungen. Im Kontext des Testens beinhaltet REST-API-Testing:

  1. Überprüfen der korrekten Handhabung von HTTP-Methoden (GET, POST, PUT, DELETE usw.)
  2. Validieren von Antwortstatuscodes
  3. Überprüfen der Antwort-Payload-Struktur und des Inhalts
  4. Testen des API-Verhaltens unter verschiedenen Szenarien (gültige/ungültige Eingaben, Authentifizierung usw.)
  5. Überprüfen von Zustandsänderungen nach API-Operationen

Was ist der Unterschied zwischen Postman und Rest Assured?

Obwohl beide Tools für API-Tests verwendet werden, dienen sie unterschiedlichen Zwecken:

Feature Postman Rest Assured
Interface GUI-basiert Code-basiert
Language JavaScript Java
Learning Curve Niedriger Steiler
Automation Möglich mit Newman Nativ
CI/CD Integration Benötigt zusätzliches Setup Nahtlos
Scripting Flexibility Begrenzt auf das Scripting von Postman Volles Java-Ökosystem

Rest Assured wird typischerweise bevorzugt, wenn Sie API-Tests in Ihr Java-basiertes Testautomatisierungs-Framework integrieren müssen oder wenn Sie komplexere Testszenarien benötigen.

Was ist der Unterschied zwischen TestNG und Rest Assured?

TestNG und Rest Assured dienen unterschiedlichen Zwecken, werden aber oft zusammen verwendet:

Feature TestNG Rest Assured
Primary Purpose Test-Framework API-Testbibliothek
Scope Allgemeines Testen Spezifisch für API-Tests
Features Testorganisation, parallele Ausführung, Reporting HTTP-Anfragen, Antwortvalidierung
Language Support Java Java

Sie können TestNG verwenden, um Ihre Rest Assured-Tests zu strukturieren und auszuführen und so die Stärken beider Tools zu kombinieren. Zum Beispiel:

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;

public class CombinedTest {

    @BeforeClass
    public void setup() {
        baseURI = "https://api.example.com";
        basePath = "/v1";
    }

    @Test(groups = "smoke")
    public void testGetUser() {
        given()
            .pathParam("id", 1)
        .when()
            .get("/users/{id}")
        .then()
            .statusCode(200)
            .body("name", notNullValue());
    }

    @Test(groups = "regression")
    public void testCreateUser() {
        String newUser = "{\"name\":\"John Doe\",\"email\":\"john@example.com\"}";
        
        given()
            .contentType("application/json")
            .body(newUser)
        .when()
            .post("/users")
        .then()
            .statusCode(201)
            .body("id", notNullValue());
    }
}

Dieses Beispiel verwendet TestNG-Annotationen, um die Tests zu organisieren, und Rest Assured für die eigentliche API-Testlogik.

Erste Schritte mit Rest Assured API-Tests

Bevor wir uns in die Feinheiten von Rest Assured vertiefen, richten wir unsere Entwicklungsumgebung ein, um sicherzustellen, dass wir bereit sind, mit dem Testen zu beginnen.

Einrichten Ihrer Umgebung

Java installieren: Rest Assured benötigt Java 8 oder höher. Laden Sie das neueste JDK von der Oracle-Website herunter und installieren Sie es oder verwenden Sie OpenJDK.

Wählen Sie eine IDE: Obwohl Sie jeden Texteditor verwenden können, kann eine integrierte Entwicklungsumgebung (IDE) Ihre Produktivität erheblich steigern. Beliebte Optionen sind:

Richten Sie ein Maven-Projekt ein: Maven hilft bei der Verwaltung unserer Abhängigkeiten. Erstellen Sie ein neues Maven-Projekt in Ihrer IDE oder verwenden Sie die Befehlszeile:

mvn archetype:generate -DgroupId=com.example -DartifactId=rest-assured-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Fügen Sie die Rest Assured-Abhängigkeit hinzu: Öffnen Sie Ihre pom.xml-Datei und fügen Sie die folgende Abhängigkeit hinzu:

<dependencies>
    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>4.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest</artifactId>
        <version>2.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Dies beinhaltet Rest Assured, TestNG für die Testorganisation und Hamcrest für zusätzliche Matcher.

Maven aktualisieren: Führen Sie mvn clean install aus, um die Abhängigkeiten herunterzuladen.

Mit diesen Schritten sind Sie nun bereit, mit dem Schreiben von Rest Assured-Tests zu beginnen!

Grundlegende Rest Assured API-Testkonzepte

Rest Assured folgt einer Given-When-Then-Syntax, die von der verhaltensgesteuerten Entwicklung (BDD) inspiriert wurde. Diese Struktur macht Tests lesbar und intuitiv, auch für diejenigen, die mit der Codebasis nicht vertraut sind.

Die Given-When-Then-Struktur

Lassen Sie uns ein einfaches Beispiel aufschlüsseln:

import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
import org.testng.annotations.Test;

public class SimpleTest {
    @Test
    public void testGetRequest() {
        given()
            .baseUri("https://api.example.com")
        .when()
            .get("/users")
        .then()
            .statusCode(200)
            .body("data.size()", greaterThan(0))
            .body("data[0].id", notNullValue())
            .body("data[0].email", containsString("@"));
    }
}

Dieser Test macht Folgendes:

  1. Legt die Basis-URI für die API fest
  2. Sendet eine GET-Anfrage an den "/users"-Endpunkt
  3. Bestätigt, dass:

Verständnis der Rest Assured-Syntax

Rest Assured verwendet eine Fluent-Schnittstelle, mit der Sie Methodenaufrufe verketten können. Hier ist eine Aufschlüsselung einiger gängiger Methoden:

Fortgeschrittene Rest Assured API-Testtechniken

Wenn Sie sich mit Rest Assured vertrauter machen, möchten Sie dessen erweiterte Funktionen erkunden, um robuste und umfassende Testsuiten zu erstellen.

Behandlung der Authentifizierung in Rest Assured API-Tests

Viele APIs erfordern eine Authentifizierung. Rest Assured unterstützt verschiedene Authentifizierungsmethoden:

Basisauthentifizierung

given()
    .auth().basic("username", "password")
.when()
    .get("/secure-endpoint")
.then()
    .statusCode(200);

OAuth 2.0

given()
    .auth().oauth2("your_access_token")
.when()
    .get("/oauth2-protected-endpoint")
.then()
    .statusCode(200);

Benutzerdefinierte Authentifizierung

Für APIs mit benutzerdefinierten Authentifizierungsschemas können Sie Header manuell hinzufügen:

given()
    .header("X-API-Key", "your-api-key")
.when()
    .get("/custom-auth-endpoint")
.then()
    .statusCode(200);

Parametrisieren von Tests in Rest Assured API-Tests

Mit parametrisierten Tests können Sie denselben Test mit unterschiedlichen Eingaben ausführen und so Ihre Testabdeckung erhöhen:

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParameterizedTest {

    @DataProvider(name = "userIds")
    public Object[][] createUserIds() {
        return new Object[][] {{1}, {2}, {3}, {4}, {5}};
    }

    @Test(dataProvider = "userIds")
    public void testMultipleUsers(int userId) {
        given()
            .pathParam("id", userId)
        .when()
            .get("https://api.example.com/users/{id}")
        .then()
            .statusCode(200)
            .body("id", equalTo(userId))
            .body("name", notNullValue());
    }
}

Dieser Test wird fünfmal ausgeführt, einmal für jede Benutzer-ID, die vom Datenanbieter bereitgestellt wird.

Validieren von JSON-Antworten in Rest Assured API-Tests

Rest Assured bietet leistungsstarke JSON-Parsing-Funktionen mit JSONPath:

given()
.when()
    .get("https://api.example.com/users/1")
.then()
    .statusCode(200)
    .body("name", equalTo("John Doe"))
    .body("email", endsWith("@example.com"))
    .body("roles", hasItems("user", "admin"))
    .body("address.city", equalTo("New York"))
    .body("phoneNumbers.size()", greaterThanOrEqualTo(1));

Dieser Test validiert verschiedene Aspekte der JSON-Antwort, einschließlich verschachtelter Objekte und Arrays.

Umgang mit XML-Antworten

Während JSON üblicher ist, verwenden einige APIs immer noch XML. Rest Assured kann auch XML-Antworten verarbeiten:

given()
.when()
    .get("https://api.example.com/data.xml")
.then()
    .statusCode(200)
    .body("root.data.name", equalTo("Test Name"))
    .body("root.data.value", equalTo("100"));

Datei-Upload und -Download

Rest Assured kann Dateivorgänge verarbeiten:

Datei-Upload

File fileToUpload = new File("path/to/file.txt");

given()
    .multiPart("file", fileToUpload)
.when()
    .post("/upload")
.then()
    .statusCode(200)
    .body("message", equalTo("File uploaded successfully"));

Datei-Download

byte[] downloadedFile = given()
.when()
    .get("/download/file.pdf")
.then()
    .statusCode(200)
    .extract().asByteArray();

// Now you can write the byte array to a file or process it further

Verwenden von Apidog mit Rest Assured API-Tests

Während Rest Assured allein leistungsstark ist, können Sie Ihren API-Test-Workflow verbessern, indem Sie Apidog, eine API-Dokumentations- und Testplattform, integrieren. So können Sie Apidog neben Rest Assured verwenden:

APIs entwerfen: Verwenden Sie APIdog, um Ihre APIs vor der Implementierung zu entwerfen und zu dokumentieren. Dies hilft bei der Erstellung einer klaren Spezifikation für Entwickler und Tester.

Tests generieren: APIdog kann Testfälle basierend auf Ihren API-Spezifikationen generieren. Obwohl dies keine direkten Rest Assured-Tests sind, können sie als Blaupause für das dienen, was getestet werden soll.

Tests implementieren: Übersetzen Sie die von APIdog generierten Testfälle in Rest Assured-Tests. Dadurch wird sichergestellt, dass Ihre Tests alle angegebenen Verhaltensweisen abdecken.

Zusammenarbeiten: Teilen Sie API-Spezifikationen und Testergebnisse mit Ihrem Team über die Kollaborationsfunktionen von APIdog. Dadurch bleiben alle auf dem erwarteten Verhalten der API auf dem Laufenden.

Dokumentation verwalten: Stellen Sie bei der Aktualisierung Ihrer Rest Assured-Tests sicher, dass die APIdog-Dokumentation synchron bleibt. Dies hilft bei der Pflege einer genauen, aktuellen API-Dokumentation.

So integrieren Sie REST API mit Apidog

Die Integration einer REST-API mit Apidog umfasst einige grundlegende Schritte. Hier ist ein detaillierter Schritt-für-Schritt-Prozess zur Integration der REST-API mit Apidog:

button
Sign up Apidog Account

2. Klicken Sie auf "Neues Projekt" und geben Sie Ihrem Projekt einen Namen.

Add New Project Name

3. Erstellen Sie eine neue API.

Create a New API

4. Klicken Sie nun auf die Schaltfläche "Endpunkt hinzufügen" und geben Sie die folgenden Details für den Endpunkt "Alle Bücher abrufen" ein: In diesem Fall,

URL: http://localhost:5000/books

Methode: GET

Endpunktname: Alle Bücher abrufen

Add Endpoint

5. Geben Sie alle Abfrageparameter oder Header an, die Ihr Endpunkt möglicherweise benötigt, indem Sie auf die Schaltflächen "Parameter hinzufügen" oder "Header hinzufügen" klicken.

Add Parameter

6. Klicken Sie auf die Schaltfläche "Senden", um Ihren Endpunkt zu testen und sicherzustellen, dass er ordnungsgemäß funktioniert. Sobald Ihr Endpunkt wie erwartet funktioniert, klicken Sie auf die Schaltfläche "APICase speichern", um ihn zu Ihrem Apidog-Projekt hinzuzufügen.

Save APICase

7. Sie können Apidog jetzt verwenden, um Ihren Endpunkt zu testen und Dokumentation für Ihre Flask-API zu generieren.

Generate Your Flask API

8. Definieren Sie die Testschritte Ihres Testfalls und wählen Sie die Endpunkte aus, die Sie in die Tests einbeziehen möchten. Passen Sie die Testfälle nach Ihren Bedürfnissen an.

Customize the Test Cases

9. Sobald Sie die Fälle getestet haben, können Sie sie im Web veröffentlichen oder in eine PDF- oder Markdown-Datei exportieren.

Export Test Cases

Apidog bietet zahlreiche Anpassungsoptionen, um Benutzern bei der Nutzung und dem Testen ihrer APIs gemäß ihren spezifischen Anforderungen zu helfen.

Best Practices für Rest Assured API-Tests

Um das Beste aus Rest Assured API-Tests herauszuholen, sollten Sie diese Best Practices berücksichtigen:

Organisieren Sie Ihre Tests: Verwenden Sie TestNG oder JUnit, um Ihre Tests logisch zu strukturieren. Gruppieren Sie verwandte Tests und verwenden Sie geeignete Annotationen für Setup und Teardown.

Code wiederverwenden: Erstellen Sie Hilfsmethoden für allgemeine Operationen, um Ihre Tests DRY (Don't Repeat Yourself) zu halten. Zum Beispiel:

public class TestUtils {
    public static RequestSpecification getBaseRequestSpec() {
        return given()
            .baseUri("https://api.example.com")
            .contentType(ContentType.JSON)
            .accept(ContentType.JSON);
    }
}

Verwenden Sie es dann in Ihren Tests:

@Test
public void testSomething() {
    TestUtils.getBaseRequestSpec()
        .when()
            .get("/endpoint")
        .then()
            .statusCode(200);
}

Verwenden Sie die Protokollierung: Aktivieren Sie die Protokollierung, um Probleme leichter zu debuggen. Rest Assured bietet verschiedene Protokollierungsoptionen:

given()
    .log().all()  // Alle Anforderungsdetails protokollieren
.when()
    .get("/endpoint")
.then()
    .log().ifValidationFails()  // Antwort protokollieren, wenn die Assertion fehlschlägt
    .statusCode(200);

Schemas validieren: Verwenden Sie die JSON-Schema-Validierung, um sicherzustellen, dass Antwortstrukturen korrekt sind:

given()
.when()
    .get("/users")
.then()
    .assertThat()
    .body(matchesJsonSchemaInClasspath("user-schema.json"));

Umgebungspezifische Daten verarbeiten: Verwenden Sie Eigenschaftendateien oder Umgebungsvariablen, um verschiedene Umgebungen zu verwalten:

public class Config {
    public static String getBaseUrl() {
        return System.getProperty("api.baseUrl", "https://api.example.com");
    }
}

Verwenden Sie dies dann in Ihren Tests:

@Test
public void testEndpoint() {
    given()
        .baseUri(Config.getBaseUrl())
    .when()
        .get("/users")
    .then()
        .statusCode(200);
}

Antwortextraktion verwenden: Extrahieren Sie für komplexe Validierungen die Antwort und führen Sie Assertions aus:

Response response = given()
    .when()
        .get("/users")
    .then()
        .extract().response();

JsonPath jsonPath = response.jsonPath();
List<String> names = jsonPath.getList("name");
Assert.assertTrue(names.contains("John Doe"));

Benutzerdefinierte Matcher implementieren: Erstellen Sie für bestimmte Validierungen benutzerdefinierte Hamcrest-Matcher:

public class CustomMatchers {
    public static Matcher<String> isValidEmail() {
        return new TypeSafeMatcher<String>() {
            @Override
            protected boolean matchesSafely(String item) {
                return item.matches("^[A-Za-z0-9+_.-]+@(.+)$");
            }

            @Override
            public void describeTo(Description description) {
                description.appendText("should be a valid email");
            }
        };
    }
}

Verwenden Sie es in Ihren Tests:

given()
.when()
    .get("/users/1")
.then()
    .body("email", CustomMatchers.isValidEmail());

Verwenden Sie Datenanbieter für umfassende Tests: Nutzen Sie die Datenanbieter von TestNG, um mehrere Szenarien zu testen:

@DataProvider(name = "userRoles")
public Object[][] userRoles() {
    return new Object[][] {
        {"admin", 200},
        {"user", 403},
        {"guest", 401}
    };
}

@Test(dataProvider = "userRoles")
public void testAccessControl(String role, int expectedStatus) {
    given()
        .auth().oauth2(getTokenForRole(role))
    .when()
        .get("/admin-endpoint")
    .then()
        .statusCode(expectedStatus);
}

Implementieren Sie einen Wiederholungsmechanismus: Implementieren Sie für fehlerhafte Tests oder unzuverlässige Netzwerke einen Wiederholungsmechanismus:

@Test(retryAnalyzer = RetryAnalyzer.class)
public void testWithRetry() {
    // Ihr Testcode hier
}

public class RetryAnalyzer implements IRetryAnalyzer {
    private int retryCount = 0;
    private static final int MAX_RETRY_COUNT = 3;

    @Override
    public boolean retry(ITestResult result) {
        if (retryCount < MAX_RETRY_COUNT) {
            retryCount++;
            return true;
        }
        return false;
    }
}

Spezifikationen verwenden: Verwenden Sie für konsistente Erwartungen an Anfragen/Antworten Spezifikationen:

RequestSpecification requestSpec = new RequestSpecBuilder()
    .setBaseUri("https://api.example.com")
    .setContentType(ContentType.JSON)
    .build();

ResponseSpecification responseSpec = new ResponseSpecBuilder()
    .expectStatusCode(200)
    .expectContentType(ContentType.JSON)
    .build();

@Test
public void testWithSpecs() {
    given()
        .spec(requestSpec)
    .when()
        .get("/users")
    .then()
        .spec(responseSpec);
}

Fazit

Rest Assured API-Tests bieten eine leistungsstarke und flexible Möglichkeit, Ihre API-Tests zu automatisieren. Durch die Kombination mit Tools wie TestNG und APIdog können Sie eine umfassende API-Teststrategie erstellen, die sich nahtlos in Ihre Java-basierten Projekte integriert.

Die wichtigsten Vorteile der Verwendung von Rest Assured sind:

  1. Einfachheit: Seine Fluent-API macht das Schreiben von Tests intuitiv und lesbar.
  2. Leistung: Es bietet umfangreiche Funktionen für den Aufbau von Anfragen und die Validierung von Antworten.
  3. Integration: Es funktioniert gut mit dem Java-Ökosystem, einschließlich Build-Tools und CI/CD-Pipelines.
  4. Flexibilität: Von einfachen GET-Anfragen bis hin zu komplexer Authentifizierung und Dateihandling kann Rest Assured alles bewältigen.

Da APIs weiterhin eine entscheidende Rolle in der modernen Softwarearchitektur spielen, wird ein robustes API-Testing immer wichtiger. Rest Assured stattet Sie mit den Werkzeugen aus, um sicherzustellen, dass Ihre APIs zuverlässig und leistungsfähig sind und sich wie erwartet verhalten.

Denken Sie daran, dass effektives API-Testing nicht nur darin besteht, Fehler zu finden, sondern auch darin, die Qualität und Zuverlässigkeit Ihres gesamten Systems sicherzustellen. Mit Rest Assured haben Sie ein vielseitiges Werkzeug zur Hand, um Ihre APIs gründlich zu testen und Probleme zu erkennen, bevor sie in die Produktion gelangen.

Erforschen Sie auf Ihrer Reise mit Rest Assured weiterhin seine Funktionen, bleiben Sie mit den neuesten Versionen auf dem Laufenden und zögern Sie nicht, einen Beitrag zur Open-Source-Community zu leisten. Viel Spaß beim Testen!

Explore more

Onlook AI Bewertung: Der Cursor für Designer ist da!

Onlook AI Bewertung: Der Cursor für Designer ist da!

Entdecke Onlook: Überbrückt es die Design-Code-Lücke? Hands-on-Test der visuellen React-Bearbeitung.

4 June 2025

Top 10 Cursor MCP Server für Vibe-Coder im Jahr 2025

Top 10 Cursor MCP Server für Vibe-Coder im Jahr 2025

Entdecke 2025 die besten Cursor MCP Server für Entwickler. Von API-Assistenten bis zu Design-to-Code Tools: AI-Integration leicht gemacht.

29 May 2025

SmartBear Preise und Top-Alternativen im Jahr 2025

SmartBear Preise und Top-Alternativen im Jahr 2025

Vergleichen Sie SmartBear mit Apidog. Sparen Sie bis zu 94% bei API-Tools mit Design, Test & Doku.

27 May 2025

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen