---
sidebar_position: 3
date: 2015-10-28T18:50:00
---

<iframe width="100%" height="400" src="https://www.youtube.com/embed/A8MetRHGv4U" title="2015.10.28 Артём Курапов – Многообразие автоматических тестов" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

- [Слайды (PDF)](ru/about/Доклады/varietyofautomatedtests-151028134806-lva1-app6892.pdf)

<!-- truncate -->

## Чёрный ящик

Это семейство тестов рассматривает тестируемую систему как изолированный объект малоизвестной природы

- Базовые сценарные/UI тесты. Соответсвуют фичам, в основном тестируют навигацию и наличие html элементов  
    
- Продвинутые UI-тесты. Автоматизированы и эффективны. Тестируют все роли пользователей, сбрасывают данные, повторяющиеся функции абстрагированы. Средний приоритет.

- перетаскивание (drag-and-drop)
- тестирование различных ролей на привилегии
- многопоточный аплоад файлов
- тесты с вебсокетами на синхронизацию данных между браузерами

- Поведенческие тесты. Пишутся для бизнеса что-бы "наглядно" показывать что тестируется, но требует парсер на более низкий уровень
- Скриншоты и CSS регрессия. Тестируют слетающий UI, шрифты, разные браузеры и телефоны
- [Snapshot тесты](https://facebook.github.io/jest/docs/snapshot-testing.html)

## Серый ящик

Это семейство тестов рассматривает систему на уровне сервисов и процессов

- ​Диагностика окружения на доступность ресурсов  
    
- На доступность сервисов
- Внешних API (предшественник контрактных тестов). Высокий приоритет.

- на доступность
- предсказуемый формат (банальный get и проверка json), проверка что формат не изменился
- полное взаимодействие с записью (обычно партнёрская компания с разработчиком ставит тестовую машинку)

- Своего внутреннего API. Запускаются без браузера, через CURL-запросы, эмулирующие вызов из JavaScript или мобильных приложений. Высокий приоритет.

- совместимость классов и интерфейсов  
    
- простые get - запросы, проверяющие на наличие ошибок/stacktrace  
    
- POST/PUT-запросы, меняющие данные  
    
- в запущенных случаях (мобильные приложения), когда с мобильника e2e тесты не запустить, а функционал надо тестировать, то получаются последовательные сценарные (а не одинарные get-post) запросы, сохраняющие состояние сущностей и пользователя (в БД и сессии)

- На [конкурентность](https://kurapov.ee/rus/lab/quality_control/phpunit/concurrency_deadlock_integration_tests/). Проверяется наличие дедлоков на бэкенде
- Целостность данных

- целостность данных между табличками БД и/или файлами
- сравнение [entity классов](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html) с БД
- миграции БД

- Конфигурационная матрица (поддержка разных платформ)
- На производительность (performance). Тестовый прогон сервиса/кода что-бы понять эффективность работы

- время отклика / скорость
- бэкенд - память, CPU, IO-пропорции в RAM, HDD, сети, число запросов к БД
- фронтенд - число сетевых запросов

- На утечки памяти и количество обработчиков событий (особенно для UI-компонентов)
- На нагрузку (load/stress-тесты). Что будет, если трафика/посетителей очень много. Что самое слабое звено
- На отказоустойчивость (что будет, если упадёт БД, Rabbit или какой-то сервис). Есть ли резервный вариант, обработка ошибок, мониторинг
- На инъекции. Нечёткие (fuzzy) тесты

- контроль инъекций - SQL, XSS
- формат данных - вариации аргументов: разные типы, пути к файлам
- права на файлы/директории

## Белый ящик

- Юнит-тесты

- Бэкенд - средний приоритет. Особые случаи: соотношение random(), работа с ресурсами (генерация картинок)
- Фронтенд - низкий приоритет. Jest, Karma + Jasmine, Mocha.

- Приватные методы
- Моки
- Контракты

- API
- Библиотек

- Виртуальная БД
- Виртуальная файловая система
- Мутационные тесты - отключение частей приложения для выявления зависимостей и процента сбоев
- Тестирование многопоточных процессов
