Что означает HTTP статус-код 404?

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

Ответ

404 Not Found — это клиентский код ошибки HTTP, который сервер возвращает, когда не может найти запрашиваемый ресурс по указанному URI.

Типичные причины в тестируемых системах:

  • Запрос к несуществующему ID (например, /api/users/999999).
  • Опечатка в пути эндпоинта.
  • Ресурс был удалён, а ссылка на него осталась.
  • Неправильная конфигурация маршрутизации на сервере.

Пример тестирования 404 в разных контекстах:

1. API-тестирование (проверка негативного сценария):

import requests

def test_get_nonexistent_user_returns_404():
    # Запрос к заведомо несуществующему ресурсу
    response = requests.get('https://api.example.com/v1/users/0')

    # Основная проверка
    assert response.status_code == 404, 
        f'Запрос к несуществующему ресурсу должен вернуть 404, а не {response.status_code}'

    # Дополнительно: иногда сервер возвращает тело ошибки
    if response.content:
        error_body = response.json()
        assert 'message' in error_body
        # Проверяем, что сообщение об ошибке информативно

2. UI-тестирование (Playwright):

// Пример проверки, что клик по битой ссылке ведет на страницу 404
const { test, expect } = require('@playwright/test');

test('Ссылка на удаленную страницу ведет на 404', async ({ page }) => {
  await page.goto('/article/old-deleted-article');
  // Проверяем статус ответа для страницы
  const response = await page.waitForResponse(resp => 
    resp.url().includes('/article/old-deleted-article')
  );
  expect(response.status()).toBe(404);
  // Или проверяем, что на странице отображается нужный заголовок/текст
  await expect(page.locator('h1')).toHaveText('Страница не найдена');
});

Ключевое для QA: Проверка кода 404 — это важная часть тестирования обработки ошибок и граничных случаев, которая обеспечивает стабильность и предсказуемость системы.