Sobes.tech
Middle

W jaki sposób możesz zautomatyzować testowanie API?

sobes.tech AI

Odpowiedź od AI

Aby zautomatyzować testy API, używam następujących narzędzi:

  1. Wybór narzędzi:

    • Postman: Doskonałe do testów ręcznych i półautomatycznych, tworzenia kolekcji zapytań, pisania skryptów w JavaScript do asercji i tworzenia środowisk.
    • Rest-Assured (dla Java) / Requests (dla Pythona): Biblioteki do pisania zautomatyzowanych testów w kodzie. Umożliwiają elastyczne tworzenie zapytań, obsługę odpowiedzi i pisanie złożonych sprawdzeń.
    • Swagger/OpenAPI: Do generowania kodu klienta lub testów na podstawie specyfikacji API.
  2. Definiowanie scenariuszy testowych: Analiza specyfikacji API, określenie endpointów, metod (GET, POST, PUT, DELETE itp.), parametrów, nagłówków, ciał zapytań, oczekiwanych kodów statusu i formatów odpowiedzi (JSON, XML). Tworzenie scenariuszy testów pozytywnych i negatywnych.

  3. Implementacja testów:

    • Z użyciem Postman:

      • Tworzenie kolekcji do grupowania testów.
      • Pisanie skryptów Pre-request do przygotowania danych (np. uzyskanie tokena).
      • Pisanie testów (skryptów post-request) do sprawdzania statusu odpowiedzi, nagłówków, ciała odpowiedzi (używając pm.response.json(), pm.expect(), chai.expect()).
      • Użycie zmiennych środowiskowych dla parametrów zmieniających się między środowiskami (URL, dane logowania).
      • Uruchamianie kolekcji przez Collection Runner lub Newman (dla CI/CD).
      // Test Postman
      pm.test("Kod statusu to 200", function () {
          pm.response.to.have.status(200);
      });
      
      pm.test("Ciało odpowiedzi zawiera określone pole", function () {
          const responseJson = pm.response.json();
          pm.expect(responseJson.data).to.have.property('id');
      });
      
    • Z użyciem Rest-Assured (Java):

      • Pisanie kodu w Java z użyciem frameworków testowych (JUnit, TestNG).
      • Tworzenie zapytań, określanie parametrów, nagłówków, ciał.
      • Wykonywanie zapytań (when().get(), post(), itp.).
      • Sprawdzanie odpowiedzi (then().statusCode(int), body(String path, Matcher<?> matcher)).
      // Przykład Rest-Assured (Java) z użyciem JUnit
      import io.restassured.RestAssured;
      import org.junit.jupiter.api.Test;
      import static io.restassured.RestAssured.given;
      import static org.hamcrest.Matchers.equalTo;
      
      public class ApiTest {
      
          @Test
          public void testGetUser() {
              RestAssured.baseURI = "https://api.example.com"; // Ustaw URL bazowy
      
              given()
              .when()
                  .get("/users/1") // Wysyłanie zapytania GET do /users/1
              .then()
                  .statusCode(200) // Sprawdzanie, czy kod statusu to 200
                  .body("data.id", equalTo(1)); // Sprawdzanie pola w ciele odpowiedzi
          }
      }
      
  4. Zarządzanie danymi testowymi: Używanie parametryzacji testów do sprawdzania różnych kombinacji danych wejściowych. Źródła danych mogą być plikami CSV, JSON, bazami danych.

  5. Uruchamianie testów w pipeline CI/CD: Integracja zautomatyzowanych testów API w procesie ciągłej integracji i ciągłego dostarczania z użyciem narzędzi takich jak Jenkins, GitLab CI, GitHub Actions. Pozwala to na automatyczne uruchamianie testów przy każdym commicie i szybkie uzyskanie informacji zwrotnej o stabilności API. Do Postmana używa się Newman, do rozwiązań kodowych — uruchomienia frameworka testowego.

  6. Analiza wyników i raportowanie: Generowanie raportów z testów (np. przy użyciu Allure, raportów HTML z TestNG/JUnit). Monitorowanie wyników i analiza przyczyn niepowodzeń.

Takie podejście zapewnia regularną i niezawodną kontrolę funkcjonalności i stabilności API na różnych etapach rozwoju.