Ответ
Имею комплексный опыт ручного и автоматизированного тестирования REST API.
Основные направления работы:
-
Функциональное тестирование:
- Проверка корректности CRUD операций (GET, POST, PUT, PATCH, DELETE).
- Валидация кодов состояния HTTP (200, 201, 400, 401, 403, 404, 409, 500).
- Проверка бизнес-логики и граничных условий.
-
Тестирование данных:
- Проверка структуры JSON ответа на соответствие контракту (использую JSON Schema или Pydantic).
- Валидация типов данных, обязательных полей, форматов (email, date, UUID).
-
Тестирование безопасности и авторизации:
- Проверка эндпоинтов на наличие аутентификации (JWT, OAuth2, Basic Auth).
- Тестирование ролевой модели доступа (RBAC).
- Проверка на чувствительные данные в ответах.
-
Тестирование производительности и надёжности:
- Проверка ограничения частоты запросов (rate limiting).
- Тестирование пагинации и сортировки.
- Проверка обработки некорректных данных и устойчивости к сбоям.
Инструменты и технологии:
- Для ручного тестирования/исследования: Postman, Swagger UI, cURL.
- Для автоматизации: Python (библиотеки requests, pytest, pydantic), интеграция с Allure для отчётности.
- Для валидации: JSON Schema, встроенные валидаторы Postman.
Пример автоматизированного теста на Python (pytest):
import requests
import pytest
BASE_URL = "https://api.example.com"
def test_create_and_retrieve_item():
# 1. Создание нового ресурса (POST)
payload = {"title": "Test Item", "count": 5}
create_response = requests.post(f"{BASE_URL}/items", json=payload)
assert create_response.status_code == 201
created_item = create_response.json()
item_id = created_item["id"]
# 2. Получение созданного ресурса (GET)
get_response = requests.get(f"{BASE_URL}/items/{item_id}")
assert get_response.status_code == 200
retrieved_item = get_response.json()
# 3. Проверка целостности данных
assert retrieved_item["id"] == item_id
assert retrieved_item["title"] == payload["title"]
assert retrieved_item["count"] == payload["count"]