Какой подход вы используете для проверки метода API?

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

Ответ

Для всесторонней проверки метода API я применяю многоуровневую стратегию, основанную на анализе спецификации и практическом тестировании.

Основные этапы:

  1. Анализ контракта: Изучаю документацию (Swagger/OpenAPI) для понимания ожидаемых входных/выходных параметров, кодов состояния и схем данных.
  2. Разработка тест-кейсов: Создаю сценарии, покрывающие:
    • Позитивные сценарии с валидными данными.
    • Негативные сценарии: невалидные данные, отсутствующие обязательные поля, неверные типы.
    • Граничные значения и валидации: проверка ограничений (min/max length, диапазоны).
    • Безопасность и авторизация: доступ без токена, с неверными правами.
  3. Автоматизация и выполнение: Использую инструменты вроде Postman (для ручных проверок и коллекций) или пишу скрипты на Python с requests и pytest для интеграции в CI/CD.

Пример теста на Python с pytest:

import pytest
import requests

BASE_URL = "https://api.example.com"

def test_get_user_positive():
    """Позитивный тест: получение данных существующего пользователя."""
    user_id = 1
    response = requests.get(f"{BASE_URL}/users/{user_id}")

    assert response.status_code == 200
    assert response.headers["Content-Type"] == "application/json"

    data = response.json()
    assert data["id"] == user_id
    assert "name" in data

def test_get_user_negative_not_found():
    """Негативный тест: запрос несуществующего пользователя."""
    response = requests.get(f"{BASE_URL}/users/99999")
    assert response.status_code == 404

def test_create_user_validation_error():
    """Тест валидации: попытка создания пользователя без обязательного поля."""
    payload = {"email": "test@example.com"}  # Нет поля 'name'
    response = requests.post(f"{BASE_URL}/users", json=payload)

    assert response.status_code == 400
    error_data = response.json()
    assert "validation_error" in error_data
    assert "name" in error_data["validation_error"]
  1. Проверка нефункциональных требований: При необходимости тестирую производительность (latency, throughput) и нагрузку.
  2. Верификация интеграции: Убеждаюсь, что метод корректно взаимодействует с другими сервисами и БД, проверяя побочные эффекты (например, создание записи в логе).