# Пирамида тестирования

Пирамида тестирования — понятие, обозначающее уменьшение **количества** динамических тестов по мере продвижения проекта.

### Стандартная тестовая пирамида <a href="#standard" id="standard"></a>

Самая старая, и все еще самая широко применяемая, как бы эталонная тестовая стратегия, впервые подробно описанная в книге Майкла Кона “*Succeeding with Agile*”. Стандартная пирамида в самом «олдовом» варианте состоит всего из 3 уровней: юнит-тесты, *сервисные тесты*, и тесты интерфейса.

<figure><img src="https://qarocks.ru/wp-content/uploads/2023/07/piramida-testirovaniya-standartnaya-1.webp" alt="Стандартная тестовая пирамида" height="348" width="649"><figcaption><p>Стандартная пирамида тестирования</p></figcaption></figure>

* **Юнит-тесты**, или модульные, самые «дешевые и быстрые». Под «юнитом» имеется в виду не только, собственно, модуль кода, а вообще любая небольшая и логически ограниченная часть кода, которая может быть и классом, и функцией, или даже одним методом в классе. Юнит-тестирование проверяет, что отдельно взятый модуль работает как положено, выполняет свою функцию. Юнит-тестов больше чем всех остальных \[вместе взятых], потому что в приложении как правило много модулей, соответственно модульных тестов требуется много, и они простые.
* **Сервисные тесты**, под этим здесь имеются в виду интеграционные тесты, проверяющие коммуникацию, взаимодействия между юнитами и более крупными чем юнит сущностями — компонентами. В стандартной пирамиде интеграционных тестов намного меньше чем модульных.&#x20;
* **ТестыЕ2Е / UI**, верхнего уровня, проверяющие соблюдение требований к интерфейсу и общих требований к продукту. Из-за сложности, трудоемкости, и большой себестоимости таких тестов, их количество по возможности стараются ограничить, и в стандартной пирамиде тестирования интерфейсных тестов намного меньше чем модульных и сервисных.

| Тип тестов                       | Скорость выполнения         |
| -------------------------------- | --------------------------- |
| Юнит-тесты                       | <p>0,01-0,1 секунды<br></p> |
| Сервисные (интеграционные) тесты | 1 секунда                   |
| Сквозные (е2е) и UI-тесты        | <p>10 секунд<br></p>        |

<figure><img src="https://qarocks.ru/wp-content/uploads/2023/07/10-piramida-testirovaniya-obyasnenie-min.webp" alt="Пирамида — Уровни" height="484" width="918"><figcaption><p><em>Пирамида — Уровни</em></p></figcaption></figure>

<figure><img src="https://qarocks.ru/wp-content/uploads/2023/07/12-piramida-testirovaniya-kolichestvo-testov-min.webp" alt="Уровни и количество тестов" height="457" width="715"><figcaption><p>Уровни и количество тестов</p></figcaption></figure>

Иногда указывают еще «фундамент пирамиды» — статические проверки:

<figure><img src="https://qarocks.ru/wp-content/uploads/2023/07/14-testovaya-piramida-i-staticheskoe-testirovanie-min.webp" alt="статическое тестирование" height="680" width="900"><figcaption><p>+ статическое тестирование</p></figcaption></figure>

### Расширенная пирамида тестирования <a href="#extended" id="extended"></a>

Со временем стандартную пирамиду начали расширять добавлением отдельных **интеграционных контрактных тестов**, и **компонентных тестов**.&#x20;

*Компонентные тесты* выделяются в отдельную категорию — как бы «промежуточная стадия» между модульными и приемочными; это тестирование компонентов более крупных чем модули.

<figure><img src="https://qarocks.ru/wp-content/uploads/2023/07/13-piramida-testirovaniya-yunity-i-komponenty-prilozheniya-min.webp" alt="Пирамида — Юниты и компоненты приложения" height="517" width="677"><figcaption><p>Пирамида — Юниты и компоненты приложения</p></figcaption></figure>

Также в расширенной пирамиде появляются ручные исследовательские тесты.&#x20;

<figure><img src="https://qarocks.ru/wp-content/uploads/2023/07/2-piramida-testirovaniya-rasshirennaya-min-1.webp" alt="Пирамида тестирования — Расширенная" height="568" width="984"><figcaption><p>Пирамида тестирования — Расширенная<br></p></figcaption></figure>

При этом сохраняется закономерность «чем выше, тем меньше тестов»; чем ближе к концу цикла, тем сложнее тесты и меньше их количество.

### Пример пирамиды тестов на практике — действия и инструменты <a href="#example-tools" id="example-tools"></a>

В реальных проектах уровни и применяемые инструменты могут выглядеть так:

<figure><img src="https://qarocks.ru/wp-content/uploads/2023/07/piramida-testirovaniya-instrumenty-min-1.webp" alt="Инструменты на разных уровнях" height="824" width="779"><figcaption><p>Инструменты на разных уровнях</p></figcaption></figure>

| Приоритет     | Что делают                 | Классическое название операций  | Инструменты                 |
| ------------- | -------------------------- | ------------------------------- | --------------------------- |
| 1             | Проверку качества кода     | Статическое тестирование        | ESLint, Prettier, SonarCube |
| 2             | Тестируют взаимодействия   | Интеграционное тестирование     | Cypress и Playwright        |
| 3             | Сценарное тестирование     | Сквозное тестирование           | Cypress и Playwright        |
| 4             | Производительность         | Тестирование производительности | Lighthouse (CI)             |
| 5             | Контроль логики приложения | Юнит-тестирование               | Jest                        |
| 6             | Визуальное тестирование    | UI-тестирование                 | Storybook                   |
| Всегда        | Безопасность               | Тестирование безопасности       | Synk (SAST), OWASP (DAST)   |
| Перед релизом | Нагрузочное                | Нагрузочное тестирование        | JMeter                      |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://qabook.gitbook.io/start/teoriya-testirovaniya/osnovy-testirovaniya/piramida-testirovaniya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
