Что такое интеграционное тестирование веб-приложения и приведи пример?

«Что такое интеграционное тестирование веб-приложения и приведи пример?» — вопрос из категории Веб-тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример интеграционного теста для REST API (Node.js, Jest, Supertest):

const request = require('supertest');
const app = require('../app'); // Express приложение

describe('User API Integration Tests', () => {
  test('GET /api/users возвращает список пользователей', async () => {
    const response = await request(app)
      .get('/api/users')
      .expect('Content-Type', /json/)
      .expect(200);

    expect(Array.isArray(response.body)).toBe(true);
    expect(response.body[0]).toHaveProperty('id');
    expect(response.body[0]).toHaveProperty('email');
  });

  test('POST /api/users создает нового пользователя', async () => {
    const newUser = { email: 'test@example.com', name: 'Test User' };
    const response = await request(app)
      .post('/api/users')
      .send(newUser)
      .expect(201);

    expect(response.body).toMatchObject({
      id: expect.any(Number),
      email: newUser.email,
      name: newUser.name
    });
    // Проверка сохранения в БД (опционально)
    const dbUser = await UserModel.findById(response.body.id);
    expect(dbUser).not.toBeNull();
  });
});

Ключевые аспекты такого теста:

  • Интеграция компонентов: Проверяет связку маршрутизатора (Express), бизнес-логики и слоя данных (БД).
  • Реальные HTTP-запросы: Использует библиотеку (Supertest) для эмуляции клиента.
  • Зависимости: Требует поднятого тестового окружения (база данных, возможно, моки внешних сервисов).
  • Цель: Обнаружить дефекты на стыке модулей, которые unit-тесты не выявят.