Чёрный ящик — тестировщик не знает, как устроен код, и проверяет систему по входам и выходам: ввёл данные — сравнил результат с ожидаемым по требованиям. Сюда относятся почти все техники тест-дизайна: классы эквивалентности, граничные значения, таблицы решений, переходы состояний.
Белый ящик — тесты строятся по коду: чтобы выполнились все строки, ветки if, условия, циклы. Метрики — покрытие операторов, ветвей, условий. Обычно этим занимаются разработчики в unit-тестах.
Серый ящик — промежуточный вариант: тестировщик знает часть устройства — схему базы, архитектуру, API, логи — и использует это. Например, после оформления заказа проверяет в базе, что запись создалась с правильным статусом, или смотрит в логах, какая ошибка пришла от сервиса.
На практике тестировщик чаще всего работает чёрным ящиком через интерфейс и серым — через DevTools, базу и логи.