Продолжаем истории про тестирование Умного Трекинга.
Для освежения контекста можно почитать предыдущие посты (раз, два, три)
В предыдущих постах не упомянул ещё один недостаток статичных тестов, который решил с помощью ИИшки. Точнее, упоминал его, но хочется остановиться на нём подробнее.
Нам тяжело было анализировать результаты тестирования. Вот представьте, у вас тест
public async Task RunStandardGroupingScenario(RoutingTestData testData)
{
...
var order1 = new TestOrderBuilder(1)
.PlacedAt(currentDate.AddMinutes(-40))
.WithMeterOffsets(724, 1000)
.Please();
...
await Runner
.WithContext<AutoAssignmentContext>()
.RunScenarioAsync(
...
_ => _.OrderPlacementSteps.GivenOrdersAreOnTheShelf(order1),
...
_ => _.when_GroupOrdersForDelivery_iterate(),
_ => _.then_ORDERS_are_grouped(order1.Number, order2.Number, order3.Number)
);
}
Тут ключевое, на что нужно смотреть, —
WithMeterOffsets. Это смещение заказа от координат пиццерии в метрах. Сделали метод для упрощения написания тестов, чтобы не нужно было искать координаты каждого заказа. Просто указываешь смещение от пиццерии по направлению север-юг и смещение по направлению запад-восток, а тестовый метод сам высчитывает координаты. И вот перед очередным релизом этот тест падает, и ты видишь буквально:
Orders are not in the same group
Found groups: [{"TravelMode":0,"Orders":[3,2]}], [{"TravelMode":0,"Orders":[1]}]
И что с этим делать? Напомню, что мы тестируем результаты работы алгоритма группировки. Как понять расположение заказов относительно друг друга и пиццерии? Можно, конечно, вспомнить, что первый аргумент в методе WithMeterOffsets — это отклонение по направлению север-юг, но, возможно, и отклонение по направлению запад-восток. Затем мысленно представить себе карту и наложить на неё заказы. Но у меня не получалось.
Что я сделал? Правильно, навайбкодил html, который получал последний запрос к солверу, парсил его и рисовал карту. На карте отмечал маркеры заказов и группы заказов, ну и вообще отображал весь контекст того, какие данные были засетаплены до этого.
Затем сделал генерацию такой карты после каждого теста и приложил её в ТестОпс. Теперь можно легко смотреть на итоги теста, и разбирать упавшие тесты стало сильно легче.
Раньше, без ИИшки, я бы даже не взялся за это, а сейчас в перерывах между тестированием создал вспомогательный инструмент, который плотно засел в тестах. У меня есть ещё один похожий инструмент для других тестов, но о нём расскажу дальше, когда буду рассказывать о динамических тестах в Умном Трекинге.
