Ответ
Опыт включает тестирование REST API как вручную, так и с помощью автоматизации. Основной стек: Postman (для ручных проверок и коллекций), Python с библиотеками Requests и Pytest (для автотестов).
Типичные проверки в интеграционных тестах API:
- Корректность HTTP-статусов:
200 OK,201 Created,400 Bad Request,401 Unauthorized,404 Not Found,500 Internal Server Error. - Валидация структуры и данных ответа:
- Соответствие JSON-схеме (используется библиотека
jsonschema). - Проверка типов данных, обязательных полей, форматов значений (например,
date-time).
- Соответствие JSON-схеме (используется библиотека
- Проверка бизнес-логики: Корректность вычислений, состояние данных после выполнения запроса.
- Проверка заголовков (headers):
Content-Type,Authorization(JWT, OAuth2). - Обработка граничных случаев и ошибок: Передача невалидных данных, проверка валидационных сообщений.
Пример автотеста для цепочки запросов (создание -> чтение -> удаление ресурса):
import requests
import pytest
BASE_URL = "https://api.example.com/v1"
@pytest.fixture
def auth_headers():
# Получение токена для авторизации
auth_resp = requests.post(f"{BASE_URL}/auth", json={"login": "user", "pass": "pass"})
token = auth_resp.json()["access_token"]
return {"Authorization": f"Bearer {token}"}
def test_user_crud_lifecycle(auth_headers):
# 1. CREATE (POST)
new_user = {"name": "John Doe", "email": "john@example.com"}
create_resp = requests.post(f"{BASE_URL}/users", json=new_user, headers=auth_headers)
assert create_resp.status_code == 201
user_id = create_resp.json()["id"]
# 2. READ (GET) - проверяем, что пользователь создан
get_resp = requests.get(f"{BASE_URL}/users/{user_id}", headers=auth_headers)
assert get_resp.status_code == 200
assert get_resp.json()["name"] == new_user["name"]
# 3. DELETE (DELETE) - очистка тестовых данных
delete_resp = requests.delete(f"{BASE_URL}/users/{user_id}", headers=auth_headers)
assert delete_resp.status_code == 204
# 4. Проверяем, что пользователь удален
get_resp_after = requests.get(f"{BASE_URL}/users/{user_id}", headers=auth_headers)
assert get_resp_after.status_code == 404