Что такое кэширование
Что проверяют
Понимаете ли вы, где живут кэши, и знаете ли, что именно ломается из-за них.
Как отвечать
Кэш это временное хранилище результата, чтобы не вычислять и не запрашивать его повторно. Выигрыш в скорости и снижении нагрузки, плата это риск показать устаревшее.
Уровни, которые тестировщику стоит знать, потому что «не обновилось» может случиться на любом:
- браузер: заголовки
Cache-Control,ETag,Last-Modified, плюс сервис-воркер; - сеть доставки контента и обратный прокси: отдают ответ, не доходя до приложения;
- приложение: Redis или память процесса;
- база: кэш страниц и планов запросов.
Способы обновления: срок жизни, сброс по событию (изменили сущность, удалили ключ), версия в ключе или в имени файла (app.9f2c1.js), ручной сброс.
Что ломается на практике и что надо проверять:
- устаревшие данные: изменили в админке, на витрине по-прежнему старое. Проверять надо не только сразу, но и через время жизни кэша;
- утечка между пользователями: персональный ответ закэширован под общим ключом, и один человек видит данные другого. Самый серьёзный дефект этого класса. Проверять заголовки: у персональных страниц должно быть
privateилиno-store, а неpublic; - рассинхрон между узлами: за балансировщиком несколько экземпляров, у каждого свой кэш в памяти, и ответы отличаются от запроса к запросу;
- старые статические файлы после релиза: пользователь получил новый HTML и старый скрипт;
- закэшированная ошибка: сервис ответил 500, и это попало в кэш;
- лавина после истечения: срок вышел одновременно у всех, и запросы разом пошли в базу.
Полезный приём при проверке: сравнивать ответ обычного запроса и запроса с обходом кэша, смотреть заголовки ответа и статус попадания в кэш.
Где спотыкаются
Проверяют обновление только через жёсткую перезагрузку и пропускают дефект.
Не проверяют кэширование персональных данных.
Забывают, что за балансировщиком несколько экземпляров.
Считают кэш только ускорением и не тестируют его инвалидацию.