Ответ вслух Senior REST и документация API обновлено

Как тестировать пагинацию и фильтры

Вопрос

Как ты протестируешь эндпоинт списка с пагинацией, фильтрами и сортировкой?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Я разбиваю проверки на пять групп. Границы: limit 0, 1, максимальный и больше максимума, отрицательный offset, строка вместо числа, страница за концом данных: это должен быть пустой список, а не 500.

Что должно прозвучать в ответе

  • Границы: limit 0, 1, максимум и больше максимума, отрицательные и нечисловые значения

  • Полнота: сумма элементов всех страниц равна total, нет дублей и пропусков

  • Стабильность: вставка или удаление записи между страницами, стабильная сортировка при равных ключах

  • Фильтры: каждый отдельно, комбинации, пустой результат, неизвестные значения

  • Безопасность и производительность: инъекция в sort, огромный limit, чужие данные в выдаче

Что могут спросить следом

  • Почему при сортировке только по дате могут появиться дубли между страницами?
  • Чем курсорная пагинация лучше для бесконечной ленты?
  • Как проверить, что фильтр не протекает чужими данными?

Разбор

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

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме