← Назад к вопросам

Приведи примеры проверки на каждый уровень пирамиды тестирования

2.3 Middle🔥 151 комментариев
#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Примеры проверок для каждого уровня пирамиды тестирования

Пирамида тестирования — это концепция, которая помогает распределить тестовые активности по уровням, чтобы оптимизировать ресурсы и обеспечить качество продукта. Она состоит из следующих уровней: UI-тесты, API-тесты (иногда называются сервисными) и Unit-тесты (модульные). Иногда добавляют уровни интеграционных и контрактных тестов. Каждый уровень имеет свои особенности и примеры проверок.

Unit-тесты (модульные)

Это самый нижний и самый широкий уровень пирамиды. Unit-тесты проверяют отдельные модули, функции или методы в изоляции от других частей системы. Они должны быть быстрыми, независимыми и покрывать основные логические пути. Примеры проверок:

  • Проверка логики вычислений: Например, тестирование функции, которая вычисляет сумму двух чисел.
  • Проверка обработки граничных значений: Тестирование функции с входными данными на краях допустимого диапазона (например, null, пустые строки, максимальные/минимальные числа).
  • Проверка исключительных ситуаций: Тестирование того, как функция обрабатывает ошибки (например, деление на нуль).

Пример кода (Python)

import unittest

def add(a, b):
    return a + b

class TestAddition(unittest.TestCase):
    def test_add_positive_numbers(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative_numbers(self):
        self.assertEqual(add(-1, -4), -5)

    def test_add_zero(self):
        self.assertEqual(add(0, 5), 5)

if __name__ == '__main__':
    unittest.main()

API-тесты (сервисные)

Это средний уровень пирамиды. API-тесты проверяют взаимодействие между компонентами системы через API (например, REST, GraphQL). Они не требуют UI и позволяют тестировать бизнес-логику и интеграцию сервисов. Примеры проверок:

  • Проверка статусных кодов HTTP: Убедиться, что endpoint возвращает правильный код (200 для успеха, 400 для ошибки клиента, 500 для ошибки сервера).
  • Проверка структуры и данных ответа: Убедиться, что JSON ответ содержит ожидаемые поля и значения.
  • Проверка валидации входных данных: Тестирование обработки некорректных входных параметров (например, отправка строки вместо числа).
  • Проверка авторизации и аутентификации: Тестирование endpoints, требующих токен или другие credentials.

Пример кода (JavaScript с использованием библиотеки axios и jest)

const axios = require('axios');

describe('API Tests for User Endpoint', () => {
    const BASE_URL = 'https://api.example.com';

    test('GET /users returns 200 and list of users', async () => {
        const response = await axios.get(`${BASE_URL}/users`);
        expect(response.status).toBe(200);
        expect(response.data).toBeInstanceOf(Array);
        expect(response.data[0]).toHaveProperty('id');
        expect(response.data[0]).toHaveProperty('name');
    });

    test('POST /users with invalid data returns 400', async () => {
        const invalidUserData = { name: '' }; // пустое имя
        try {
            await axios.post(`${BASE_URL}/users`, invalidUserData);
        } catch (error) {
            expect(error.response.status).toBe(400);
        }
    });
});

UI-тесты

Это самый верхний и самый узкий уровень пирамиды. UI-тесты проверяют взаимодействие пользователя с интерфейсом (браузером, мобильным приложением). Они часто самые медленные и хрупкие, поэтому их количество должно быть минимальным, но достаточным для проверки ключевых пользовательских сценариев. Примеры проверок:

  • Проверка отображения элементов: Убедиться, что необходимые кнопки, поля ввода и текст присутствуют на странице.
  • Проверка пользовательских потоков: Тестирование полного сценария, например, регистрации пользователя или оформления заказа.
  • Проверка взаимодействия: Тестирование кликов, заполнения форм, отправки данных и реакции интерфейса.
  • Проверка кросс-браузерной и кросс-платформенной совместимости: Убедиться, что UI работает в разных браузерах и на разных устройствах.

Пример кода (Java с использованием Selenium и TestNG)

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class LoginPageTest {
    WebDriver driver;

    @BeforeMethod
    public void setUp() {
        driver = new ChromeDriver();
        driver.get("https://example.com/login");
    }

    @Test
    public void testSuccessfulLogin() {
        WebElement usernameField = driver.findElement(By.id("username"));
        WebElement passwordField = driver.findElement(By.id("password"));
        WebElement loginButton = driver.findElement(By.id("login-btn"));

        usernameField.sendKeys("testuser");
        passwordField.sendKeys("password123");
        loginButton.click();

        WebElement welcomeMessage = driver.findElement(By.id("welcome"));
        Assert.assertEquals(welcomeMessage.getText(), "Welcome, testuser!");
    }

    @AfterMethod
    public void tearDown() {
        driver.quit();
    }
}

Интеграционные тесты (часто рассматриваются как часть API-тестов или отдельный уровень)

Интеграционные тесты проверяют взаимодействие нескольких модулей или систем. Примеры проверок:

  • Проверка взаимодействия между сервисами: Убедиться, что Service A корректно отправляет данные в Service B и получает ожидаемый ответ.
  • Проверка работы с внешними системами: Тестирование интеграции с платежными системами, email-сервисами или базами данных.

Контрактные тесты (Contract Tests, часто относятся к микросервисным архитектурам)

Контрактные тесты проверяют, что взаимодействие между потребителем (client) и поставщиком (provider) API соответствует ожиданиям (контракту). Примеры проверок:

  • Проверка схемы ответа: Убедиться, что provider возвращает данные в формате, ожидаемом consumer (например, определенный JSON Schema).
  • Проверка обязательных полей: Убедиться, что в ответе присутствуют поля, необходимые для работы consumer.

Заключение

Пирамида тестирования помогает эффективно распределять тестовые усилия. Unit-тесты обеспечивают фундамент, API-тесты проверяют интеграцию и бизнес-логику, а UI-тесты фокусируются на конечном пользовательском опыте. Комбинация этих уровней позволяет достичь высокого качества продукта при оптимальном использовании ресурсов и времени. Автоматизация на каждом уровне с использованием соответствующих инструментов (например, JUnit для unit-тестов, REST Assured для API-тестов, Selenium для UI-тестов) является ключом к успешной реализации этой стратегии.