Писал ли тест-кейсы самостоятельно?

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

Ответ

Да, написание тест-кейсов — это базовая и регулярная часть моей работы как QA-инженера. Я пишу их как для ручного тестирования (в системах управления тестированием), так и в виде автоматизированных сценариев.

1. Ручные тест-кейсы (в TestRail/Jira): Я следую принципу чёткого, атомарного и воспроизводимого сценария.

  • ID: API-TC-101
  • Заголовок: Проверка успешного создания пользователя через REST API
  • Предусловия:
    • Доступен эндпоинт POST /api/v1/users
    • У пользователя есть права администратора (токен получен).
  • Шаги:
    1. Отправить POST-запрос с телом:
      {
        "username": "test_user_01",
        "email": "user@example.com",
        "role": "viewer"
      }
    2. Зафиксировать код ответа и тело ответа.
  • Ожидаемый результат:
    • Код ответа: 201 Created
    • Тело ответа: Содержит ID созданного пользователя и переданные данные.
    • Побочный эффект: Новый пользователь появляется в БД и доступен через GET /api/v1/users/{id}.

2. Автоматизированные кейсы (в коде на Python): Тест-кейс превращается в исполняемый скрипт.

import pytest
import requests

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

    def test_create_user(self, admin_auth_token):
        """API-TC-101: Проверка успешного создания пользователя."""
        headers = {"Authorization": f"Bearer {admin_auth_token}"}
        payload = {
            "username": "test_user_01",
            "email": "user@example.com",
            "role": "viewer"
        }

        # Шаг 1: Отправить POST-запрос
        response = requests.post(
            f"{self.BASE_URL}/api/v1/users",
            json=payload,
            headers=headers
        )

        # Ожидаемый результат: Проверки (assert)
        assert response.status_code == 201, f"Expected 201, got {response.status_code}"

        response_json = response.json()
        assert response_json["username"] == payload["username"]
        assert "id" in response_json
        user_id = response_json["id"]

        # Побочный эффект: Проверка, что пользователь действительно создан
        get_response = requests.get(
            f"{self.BASE_URL}/api/v1/users/{user_id}",
            headers=headers
        )
        assert get_response.status_code == 200

Ключевые принципы: независимость, ясность шагов, однозначность ожидаемого результата и связь с требованиями (Traceability).