Как описать методы API для создания сущности (например, Cat Post)?

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

Ответ

При тестировании API я документирую и проверяю методы, используя спецификацию OpenAPI (Swagger). Для метода создания сущности (POST) я описываю следующие ключевые аспекты:

1. Структура запроса и ответа в OpenAPI:

paths:
  /api/cats:
    post:
      summary: "Создание новой записи о коте"
      tags:
        - "Cats"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CatRequest'
      responses:
        '201':
          description: "Кот успешно создан"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatResponse'
        '400':
          description: "Невалидные входные данные"
        '409':
          description: "Конфликт (например, кот с таким именем уже существует)"

2. Схемы данных, которые я проверяю в тестах:

components:
  schemas:
    CatRequest:
      type: object
      required:
        - name
        - age
      properties:
        name:
          type: string
          example: "Барсик"
        age:
          type: integer
          minimum: 0
          maximum: 30
          example: 3
        breed:
          type: string
          example: "Мейн-кун"
    CatResponse:
      allOf:
        - $ref: '#/components/schemas/CatRequest'
        - type: object
          properties:
            id:
              type: integer
              readOnly: true
              example: 42
            createdAt:
              type: string
              format: date-time

3. Ключевые проверки, которые я выполняю как тестировщик:

  • Валидация схемы: Соответствие JSON-тела запроса схеме CatRequest.
  • Обязательные поля: Отправка запроса без name или age должна возвращать 400.
  • Граничные значения: Проверка валидации поля age (отрицательные числа, нецелые значения).
  • Уникальность: Попытка создать дубликат (по name) должна возвращать 409.
  • Заголовки ответа: Проверка, что успешный ответ (201) содержит заголовок Location: /api/cats/{id}.
  • Состояние системы: После успешного POST-запроса GET-запрос на /api/cats/{id} должен возвращать созданную сущность.