Как стать автором
Обновить

Тестирование финтех бэкенда: как мы дошли до 20 тыс. тест-кейсов

Время на прочтение12 мин
Количество просмотров5.8K
Всего голосов 7: ↑7 и ↓0+7
Комментарии17

Комментарии 17

А сколько у вас времени занимает один цикл регрессионного тестирования?

Сейчас это время 15-20 мин. Стараемся группировать тесты так, что бы длительность прохождения у всех групп была одинаковая.

ну если запуск теста занимает минуты, то ты не будешь их запускать каждый раз, а сперва подумаешь, надо ли запускать. как результат, не будешь писать сперва тесты, а потом код. а скорее напишешь код и потом будешь его тестировать.

для сравнения в одной из компаний у нас была скорость 300-500 тестов/сек. Кол-во тестов было на тот момент где то 10-15k. и вот в таком случае даже лень фильтровать тесты, тупо запускаешь все

Это всё на C++? Молодцы! Интуитивно, я бы уложился в на порядок меньшее количество тестов (написал бы всё на распределенных конечных автоматах, они быстро работают и легко тестировать) и до кучи бы записал день из реальной жизни и перематывал бы его с ускорением 5x. А как у вас как всё сделано (если не секрет)? FIX Gateway сами написали или QuickFIX присобачили?

FIX Gateway у нас свой. Дополнительно мы используем QuickFIX в тестах - для валидации структур FIX-собщений. FIX очень капризный, гарантия совместимости гейта с клиентами должна быть обязательно подтверждена.

Очень подробно и интересно, спасибо!

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

Хороший вопрос.
Когда строили тестовый проект, фреймворк-коннектор со своими кодеками жил в отдельной репе. И действительно была боль следить и синхронизировать репы. В конечном итоге терпение кончилось и репы объединили. Теперь, когда меняется формат сообщения, кодек сразу на это ругается и программист ядра или QA самостоятельно тюнят кодеки под новые требования.

В конечном итоге терпение кончилось и репы объединили.

А какие именно репы объединили? Судя по схеме, фреймфорк-коннектор взаимодействует с несколькими гейтами совершенно разных типов. Получается, что у вас и все эти гейты, и фреймворк лежат теперь в одной репе?

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

Теперь понял, спасибо. Просто изначально мне показалось, что у вас каждый компонент лежит в отдельном репо.

100K TPS, 0.5мс latency - серьёзные цифры, внушает! Какого примерно размера одна транзакция? TCP дампы нагрузочного тестирования должны получаться неслабых объемов...

Примерный размер одной транзакции: 0.25-1 Кбайт. Время процессинга дампа действительно большое.

НЛО прилетело и опубликовало эту надпись здесь

Доброго времени суток!
Отвечу по порядку:
1. Пока идет разработка (ядра и тестов) в фиче-ветке никто не запрещает запустить точечно или полный набор тестов для самоконтроля. Но когда работа завершена и готова вливаться в мастер, все тесты должны быть успешно пройдены. Набор тестов один. Как правило разработчик или QA знают в какая из групп тестов наиболее уязвима/интересна при разработки новой фичи. При первичной отладки ребята запускают именно эти группы. Каждая группа тестов выполняется 15-20 мин.
2. На одном независимом тестовом окружении поднимается вся система (30 с лишнем компонентов), далее на нем выполняется одна группа тестов.
При одновременном мерже нескольких разработчиков, пайплайны встают в очередь. Как только ВМ освобождается, она передается следующему мержу.
3. Почти все тесты генерят тестовые данные для себя через внешние точки доступа к системе (то что доступно клиентам). Но есть группы тестов которые дополнительно для себя подготавливают тестовое окружение через: внутренние протоколы / запросы в БД / подкладка специальных снапшотов. Это отдельные группы тестов, они как и все остальные, выполняется изолировано на ВМ. Как правило данный тип тестов проверяет очень специфические use-кейсы.

НЛО прилетело и опубликовало эту надпись здесь

Насколько такое мощное тестирование с почти полным покрытием позволяет избежать багов на проде? Может у вас есть какая-то статистика по количеству багов на протяжении развития тестов и увеличения покрытия?

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий