Как получить токен при тестировании API?

«Как получить токен при тестировании API?» — вопрос из категории API тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Получение токена — это первый шаг в тестировании защищенных эндпоинтов. Процесс обычно заключается в отправке запроса аутентификации и извлечении токена из ответа.

Пример на Java с использованием REST Assured:

import io.restassured.RestAssured;
import io.restassured.response.Response;

public class AuthTest {

    public static String getAuthToken() {
        String authEndpoint = "https://api.example.com/v1/auth/login";

        Response response = RestAssured.given()
                .contentType("application/json")
                .body("{"username": "testuser", "password": "Pass123!"}")
                .post(authEndpoint);

        // Извлекаем токен из JSON-ответа. Поле может называться "token", "access_token" и т.д.
        String token = response.jsonPath().getString("access_token");

        // Валидируем, что токен получен
        if (token == null || token.isEmpty()) {
            throw new RuntimeException("Failed to retrieve authentication token");
        }
        return token;
    }

    // Пример использования токена в последующем запросе
    public static void testSecuredEndpoint() {
        String token = getAuthToken();

        RestAssured.given()
                .header("Authorization", "Bearer " + token) // Передача токена в заголовке
                .get("https://api.example.com/v1/users/me")
                .then()
                .statusCode(200);
    }
}

Важные аспекты для QA:

  • Безопасность: Никогда не хардкодите реальные учетные данные в код. Используйте переменные окружения или защищенные vault.
  • Жизненный цикл: Учитывайте срок действия токена (expires_in). Для длительных тест-сьютов может потребоваться логика его обновления.
  • Негативные сценарии: Обязательно тестируйте запросы с неверными учетными данными, просроченными или невалидными токенами.