Мне понадобилось написать тесты на десятки методов (HTTP API, SSE, WebSocket) и для каждого метода есть еще по несколько вариантов Query String или тел запросов
Также мне хотелось использовать Gatling throttle, для ровной нагрузки по RPS. А для этого надо было сделать сценарии длиной в один запрос — только так работает throttle
Сделал каждый запрос реализацией интерфейса IEndpointChainBuilder
🤩это позволило работать с каждым из них в едином виде
🤩например, добавлять такие методы в Registry методов где будет указан вес метода (влияет на вероятность вызова) и Lambda которая вызывает
IEndpointChainBuilder.build()За основу профиля нагрузки взял randomSwitch().on(...)
🤩это позволяет запускать все методы с весами
🤩подметоды методов можно тоже запускать с весами (randomswitch может быть вложенным)
🤩веса вычисляет класс-утилита Registry, который на вход принимает количества и сам вычисляет проценты в этой группе
Так как часть методов связаны — некоторые ответы являются основной для других запросов, — то добавил механизм Adapter-ов которые добавляют общие классы-хранилища (потокобезопасные Queue или Map) в связанные запросы
🤩атомарные запросы связаны не через Gatling Session, а через общие Queue и Map, заданные через Adapter-ы
Получился расширяемый проект
🤩легко добавить новый метод
🤩легко скорректировать актуальное количество (вес) каждого метода
Чтобы было проще отлаживать добавил к заголовкам каждого запроса X-TEST-NAME, где содержится имя теста:
🤩по заголовкам запроса легко отследить запрос на прокси-сервере как ProxyMan.io
Концепт написал и отладил руками, опираясь на знание Gatling DSL. И когда первые тесты были готовы и отлажены, то за работу по добавлению новых методов и вариаций тел и параметров запросов взялся AI агент Junie, который встроен в 💻 ItelliJ IDEA
Закодировать методы и добавить адаптеры по спецификации агент может с помощью как Gemini так и Opus, выбор модели не так важен
Отладка пока осталась на мне. Но процесс понятный



