Многообразие тестов

Типы автоматических тестов я разделяю таким образом..

​Чёрный ящик

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

  • Базовые сценарные/UI тесты. Соответсвуют фичам, в основном тестируют навигацию и наличие html элементов
  • Продвинутые UI тесты. Автоматизированы и эффективны. Тестируют все роли пользователей, ресетят данные, повторяющиеся функции абстрагированы. Medium priority
    • drag-and-drop
    • тестирование различных ролей на привилегии
    • многопоточный аплоад файлов
    • тесты с вебсокетами на cross-browser data synchronization
  • Поведенческие тесты. Пишутся для бизнеса что-бы «наглядно» показывать что тестируется, но требует парсер на более низкий уровень
  • Скриншоты и CSS регрессия. Тестируют слетающий UI, шрифты, разные браузеры и телефоны
  • Snapshot тесты

Серый ящик

Это семейство тестов рассматривает систему на уровне сервисов и процессов
  • ​Диагностика окружения на доступность ресурсов
  • На Availability сервисов
  • Внешних API (предшественник контрактных тестов). High priority
    • на доступность
    • предсказуемый формат (банальный get и проверка json), проверка что формат не изменился
    • полное взаимодействие с записью (обычно партнёрская компания с разработчиком ставит тестовую машинку)
  • Своего внутреннего API. Запускающиеся без браузера, через CURL запросы, эмулирующие вызов из javascript или мобильных приложений. High priority
    • class/interface compatibility
    • простые get — запросы, проверяющие на наличие ошибок/stacktrace
    • post/put запросы, меняющие данные
    • в запущенных случаях (мобильные приложения), когда с мобильника e2e тесты не запустить, а функционал надо тестировать, то получаются последовательные сценарные (а не одинарные get-post) запросы, сохраняющие состояние сущностей и пользователя (в БД и сессии)
  • На Concurrency. Тестируется наличие дедлоков на бэкэнде
  • Целостность данных
    • целостность данных между табличками БД и/или файлами
    • сравнение entity классов с БД
    • DB migrations
  • Конфигурационная матрица (поддержка разных платформ)
  • На производительность (performance). Тестовый прогон сервиса/кода что-бы понять эффективность работы
    • response time / speed
    • backend — память, CPU, IO пропорции в RAM, HDD, сети, число запросов в БД
    • frontend — число сетевых запросов
  • На утечку памяти (memory leaks) и event-listener count (особенно для UI компонентов)
  • На нагрузку (load/stress tests). Что будет если будет очень много траффика/посетителей. Что самое слабое звено
  • На failover (что будет если упадёт БД или rabbit, или какой-то сервис). Есть ли резервный вариант, error handling, мониторинг
  • На инъекции. Fuzzy tests
    • injection control — sql, xss injections
    • data format — argument variator — misc types, filepaths
    • file/directory permissions

Белый ящик

  • Unit тесты
    • Backend — Medium priority. Особые случаи — random() ratio, работа с ресурсами (генерация картинок)
    • Frontend — Low priority. Jest, Karma + Jasmine, Mocha.
  • Приватные методы
  • Моки
  • Контракты
    • API
    • Библиотек
  • Виртуальная БД
  • Виртуальная файловая система
  • Мутационные тесты — disabling parts of application to detect dependencies and failure %
  • Тестирование многопоточных процессов