Как E2E-тестировать функциональность Storm Topology путем программной вставки сообщений

Наша топология Apache Storm прослушивает сообщения от Kafka с помощью KafkaSpout и после выполнения большого количества сопоставлений/уменьшения/обогащения/агрегации и т. д. и т. д. и т. д., наконец, вставляет данные в Cassandra. Есть еще один вход kafka, где мы получаем пользовательские запросы на данные, если топология находит ответ, а затем отправляет его в третью тему kafka. Теперь мы хотим написать тест E2E с помощью Junit, в котором мы можем напрямую программно вставлять данные в топологию, а затем, вставляя сообщение пользовательского запроса, мы можем утверждать в третьем пункте, что ответ, полученный на наш запрос, правильный.

Чтобы добиться этого, мы решили запустить EmbeddedKafka и CassandraUnit, а затем заменить ими настоящие Kafka и Cassandra, а затем мы можем начать топологию в контексте этого единственного теста Junit.

Но наш подход плохо сочетается с JUnit, потому что он делает эти тесты слишком громоздкими. Запуск kafka, cassandra и топологии занимают много времени и потребляют много ресурсов. Есть ли в Apache Storm что-нибудь, что может поддерживать тесты, которые мы планируем написать?


person Prashant Bhardwaj    schedule 12.07.2019    source источник


Ответы (1)


Здесь у вас есть несколько вариантов, в зависимости от того, с каким замедлением вы можете жить:

  • Как вы упомянули, вы можете запустить Кафку, Кассандру и топологию. Это самый медленный вариант и самый «реалистичный».

  • Запустите Kafka и Cassandra один раз и повторно используйте их для всех тестов. Вы можете сделать то же самое с Storm LocalCluster. Вероятно, будет быстрее очищать Kafka/Cassandra между каждым тестом (например, удалять все темы), а не перезапускать их.

  • Замените носики / болты Kafka и болт Cassandra заглушками в тесте. Storm имеет ряд встроенных инструментов для заглушки болтов и носиков, например. FixedTupleSpout, FeederSpout, отслеживаемая топология и функции дополняемой топологии в LocalCluster. Таким образом, вы можете вставить несколько фиксированных кортежей в топологию и сделать утверждения о том, какие кортежи были отправлены в заглушку Cassandra. Есть примеры некоторых из этих функций здесь и здесь

  • Наконец, вы можете, конечно, протестировать отдельные болты. Это самый быстрый вид теста. Вы можете использовать Testing.testTuple для создания тестовых кортежей для передачи болту.

person Stig Rohde Døssing    schedule 12.07.2019
comment
Спасибо за ответ. Есть ли какой-либо Java API, который может сообщить нам, когда топология готова к выполнению? Потому что перед началом теста я отправляю свою топологию, и прежде чем она будет готова к выполнению, выполнение моего теста завершается и терпит неудачу. Мне нужен Java API, который поможет мне дождаться готовности топологии. - person Prashant Bhardwaj; 23.07.2019
comment
Пожалуйста, опубликуйте еще один вопрос, чтобы другие люди могли найти его, когда у них возникнет тот же вопрос. - person Stig Rohde Døssing; 23.07.2019
comment
Задал этот вопрос здесь - stackoverflow.com/questions/57172246/ - person Prashant Bhardwaj; 24.07.2019
comment
Я попробовал ваши предложения, но столкнулся с одной проблемой. Размещение нового вопроса здесь - stackoverflow.com/questions/57244911/ - person Prashant Bhardwaj; 29.07.2019