Интеграционный тест для сложной топологии (несколько входов) в Flink - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужно написать модульный тест для топологии потоковой передачи Flink. Это в основном CoFlatMapFunction, и он имеет 2 входа.

Я пытаюсь получить вдохновение на этой странице: https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html

Порядок входов имеет значение для моей топологии, поэтому при тестировании я не могу использовать StreamExecutionEnvironment#fromCollection для каждого входа, так как я не буду контролировать порядок, в котором точки данных вводятся в каждый вход.

Я пытался создать один вход, используя StreamExecutionEnvironment#fromCollection, и отправлять каждый элемент на фактический вход моего CoFlatMapFunction в зависимости от их типа, но порядок элементов в этой операции теряется.

Есть ли другой способ написать этот тест?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

В тренировочных упражнениях Flink есть пример использования TwoInputStreamOperatorTestHarness, к которому вы можете обратиться:

https://github.com/dataArtisans/flink-training-exercises/blob/master/src/test/java/com/dataartisans/flinktraining/exercises/datastream_java/process/EventTimeJoinTest.java

Вам понадобятся следующие зависимости:

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-test-utils-junit</artifactId>
  <version>${flink.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-streaming-java_2.11</artifactId>
  <version>${flink.version}</version>
  <scope>test</scope>
  <type>test-jar</type>
</dependency>

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-all</artifactId>
  <version>1.10.19</version>
  <type>jar</type>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-runtime_2.11</artifactId>
  <version>${flink.version}</version>
  <scope>test</scope>
  <type>test-jar</type>
</dependency>

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

0 голосов
/ 05 сентября 2018

Вы хотите использовать класс TwoInputStreamOperatorTestHarness. К сожалению, документация немного скудна. У меня есть тест, который использует этот класс, но он еще не отправлен в 133_stream-test-harness ветвь flink-crawler .

...