Как тестировать пагинацию и фильтры
Вопрос
Как ты протестируешь эндпоинт списка с пагинацией, фильтрами и сортировкой?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Границы: limit 0, 1, максимум и больше максимума, отрицательные и нечисловые значения
Полнота: сумма элементов всех страниц равна total, нет дублей и пропусков
Стабильность: вставка или удаление записи между страницами, стабильная сортировка при равных ключах
Фильтры: каждый отдельно, комбинации, пустой результат, неизвестные значения
Безопасность и производительность: инъекция в sort, огромный limit, чужие данные в выдаче
Что могут спросить следом
- Почему при сортировке только по дате могут появиться дубли между страницами?
- Чем курсорная пагинация лучше для бесконечной ленты?
- Как проверить, что фильтр не протекает чужими данными?
Разбор
Я разбиваю проверки на пять групп. Границы: limit 0, 1, максимальный и больше максимума, отрицательный offset, строка вместо числа, страница за концом данных: это должен быть пустой список, а не 500. Полнота: прохожу все страницы и сверяю, что элементов столько же, сколько в total, и нет дублей. Стабильность: если сортировка только по дате, а у двух записей дата одинаковая, база вправе вернуть их в разном порядке, и запись прыгнет между страницами, поэтому нужен второй ключ, например id. Тут же вставляю запись между запросами страниц и смотрю, не появился ли дубль при offset-пагинации. Фильтры проверяю по одному, потом в комбинациях, плюс пустой результат и неизвестные значения. Наконец безопасность: параметр sort часто подставляют в SQL как есть, туда стоит отправить инъекцию, огромный limit может положить базу, а фильтр не должен отдавать данные другого пользователя.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.