Динамические тесты - база
Если вы думали что история с тестированием группировщика закончилась, то нет, не закончилась.
Вот мы написали статические тесты - они помогают нам провалидировать отдельные требования к группировщику (отдельный сервис, который за счет штрафов и комбинаторики выбирает наилучшие группировки исходя из заданных параметров), но не помогают нам увидеть, как система ведет себя в динамике.
Потому что, например, перед обедом, когда, как правило, нагрузка выше, мы можем отправить всех курьеров в поездку с 1 заказом, и на обеденный пик в пиццерии не останется ни одного курьера. При этом если смотреть отдельно на каждое конкретное решение - все логично, 3 заказа 3 курьера, даем каждому по 1 заказу. А через 5 минут у нас еще 20 заказов в работе.
Мы решили, что нужно двигаться дальше и писать симулятор пиццерии. Или ДИНАМИЧЕСКИЕ ТЕСТЫ.
Важный дисклеймер - все тесты были полностью навайбкожены. Делали вместе с Сашей, если читаешь - привет.
В чем суть этих тестов - мы берем снепшот пиццерии за какой-то день.
- Заказы, которые создавались, как эти заказы в пиццерии готовили.
- Информация о курьерах, когда пришли на смену, когда ушли, когда ходили на обед и когда возвращались.
- Время в поездке от пиццерии до каждого заказа и между заказами (для того чтобы составить маршрут из 2 или 3 заказов) из Яндекса.
Но Яндекс отдает только время в дороге, поэтому мы сами добавляем некоторое время на то, чтобы курьер поднялся до клиента, спустился, обошел дом и т.д.
И получаем симуляцию пиццерии с некоторыми ограничениями - наши курьеры никогда не опаздывают и всегда приезжают вовремя.
Ну и начинаем создавать заказы, менять их статусы, в определенный момент вызываем продакшен-код реального группировщика, не мок, не фейк, не урезанная версия для тестов, а ровно тот же самый код, который обслуживает пиццерию, и получаем от него ответы в виде групп. Вот это на мой взгляд очень важно, что мы в этих тестах тестируем настояющую боевую систему (она конечно же работает в отдельном контуре)
А затем отправляем курьеров в поездки на эти группы и планируем возврат в пиццерию после завершения доставки. И таким образом воспроизводим день работы пиццерии.
Сейчас у нас воспроизводится 38 пиццериедней - это 15 разных по профилю пиццерий (мало заказов + много курьеров, мало курьеров + много заказов, с плохой кухней, с хорошей кухней) и разные дни (будни, выходные, предпраздничные дни). В сумме у нас получается 4к+ поездок (некоторые из них по 2 или 3 заказа).
По дням все по-разному, есть Георгиевск, в котором 100 заказов и 15 курьеров в сумме за день бывает. А есть Красноярск, в котором 500 заказов и 26 курьеров.
По результатам запуска собираем отчет с метриками, но метриками именно бизнесовыми. Сколько отдали сертификатов за опоздания, сколько заказы лежали после готовки в ожидании доставки, сколько мы доставляли заказы и т.д. А дальше сравниваем две версии группировщика друг с другом по этим метрикам. Профит? Не совсем, но об этом в следующих сериях.
Post #276
202

- 🔥 4
- 👍 3