TGViewer
QAжется, работает! QAжется, работает! @seems_to_be_working · 613 subscribers
Post #276 202
Динамические тесты - база

Если вы думали что история с тестированием группировщика закончилась, то нет, не закончилась.

Вот мы написали статические тесты - они помогают нам провалидировать отдельные требования к группировщику (отдельный сервис, который за счет штрафов и комбинаторики выбирает наилучшие группировки исходя из заданных параметров), но не помогают нам увидеть, как система ведет себя в динамике.

Потому что, например, перед обедом, когда, как правило, нагрузка выше, мы можем отправить всех курьеров в поездку с 1 заказом, и на обеденный пик в пиццерии не останется ни одного курьера. При этом если смотреть отдельно на каждое конкретное решение - все логично, 3 заказа 3 курьера, даем каждому по 1 заказу. А через 5 минут у нас еще 20 заказов в работе.

Мы решили, что нужно двигаться дальше и писать симулятор пиццерии. Или ДИНАМИЧЕСКИЕ ТЕСТЫ.

Важный дисклеймер - все тесты были полностью навайбкожены. Делали вместе с Сашей, если читаешь - привет.

В чем суть этих тестов - мы берем снепшот пиццерии за какой-то день.
- Заказы, которые создавались, как эти заказы в пиццерии готовили.
- Информация о курьерах, когда пришли на смену, когда ушли, когда ходили на обед и когда возвращались.
- Время в поездке от пиццерии до каждого заказа и между заказами (для того чтобы составить маршрут из 2 или 3 заказов) из Яндекса.

Но Яндекс отдает только время в дороге, поэтому мы сами добавляем некоторое время на то, чтобы курьер поднялся до клиента, спустился, обошел дом и т.д.

И получаем симуляцию пиццерии с некоторыми ограничениями - наши курьеры никогда не опаздывают и всегда приезжают вовремя.

Ну и начинаем создавать заказы, менять их статусы, в определенный момент вызываем продакшен-код реального группировщика, не мок, не фейк, не урезанная версия для тестов, а ровно тот же самый код, который обслуживает пиццерию, и получаем от него ответы в виде групп. Вот это на мой взгляд очень важно, что мы в этих тестах тестируем настояющую боевую систему (она конечно же работает в отдельном контуре)

А затем отправляем курьеров в поездки на эти группы и планируем возврат в пиццерию после завершения доставки. И таким образом воспроизводим день работы пиццерии.

Сейчас у нас воспроизводится 38 пиццериедней - это 15 разных по профилю пиццерий (мало заказов + много курьеров, мало курьеров + много заказов, с плохой кухней, с хорошей кухней) и разные дни (будни, выходные, предпраздничные дни). В сумме у нас получается 4к+ поездок (некоторые из них по 2 или 3 заказа).

По дням все по-разному, есть Георгиевск, в котором 100 заказов и 15 курьеров в сумме за день бывает. А есть Красноярск, в котором 500 заказов и 26 курьеров.

По результатам запуска собираем отчет с метриками, но метриками именно бизнесовыми. Сколько отдали сертификатов за опоздания, сколько заказы лежали после готовки в ожидании доставки, сколько мы доставляли заказы и т.д. А дальше сравниваем две версии группировщика друг с другом по этим метрикам. Профит? Не совсем, но об этом в следующих сериях.
  • 🔥 4
  • 👍 3
More from @seems_to_be_working
  1. Jul 30, 2026Как я перестал читать логи упавших тестов и начал их видеть Продолжаем истории про тестиро…
  2. Apr 30, 2026Как автотестируем систему батчинга заказов ч.2 Времени на нормальную отладку тестов у нас…
  3. Apr 30, 2026Как автотестируем систему батчинга заказов ч.1 Это продолжение предыдущего поста. У нас в…
  4. Apr 3, 2026Тестирование сложных систем Я уже рассказывал, что плотно сижу на проекте «Умный трекинг»…
  5. Mar 3, 2026Хотели бы вы найти багулю в самолёте? Я если честно не очень. Вот @DanilBabich нашел, пора…
  6. Feb 19, 2026Погружайтесь в бизнес Почти всю прошлую неделю я провел в пиццериях своего города. К нам н…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →