Flink中复杂拓扑(多个输入)的集成测试

时间:2018-09-03 17:04:06

标签: java unit-testing apache-flink flink-streaming

我需要为flink流拓扑编写单元测试。基本上是CoFlatMapFunction,它有2个输入。

我试图从此页面中获得一些启发:https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/testing.html

输入的顺序对我的拓扑结构很重要,因此在测试时,我不能为每个输入使用StreamExecutionEnvironment#fromCollection,因为我无法控制在每个输入中注入数据点的顺序。

我尝试使用StreamExecutionEnvironment#fromCollection创建单个输入,并根据其类型将每个元素分派到我的CoFlatMapFunction的实际输入中,但是在此操作中元素的顺序丢失了。 / p>

还有另一种编写此测试的方法吗?

2 个答案:

答案 0 :(得分:1)

您要使用TwoInputStreamOperatorTestHarness类。不幸的是,文档很少。我有一个使用此类的测试,但尚未推送到133_stream-test-harnessflink-crawler分支。

答案 1 :(得分:1)

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>

您应该记住,这不是受支持的公共界面,因此它可能会以意想不到的方式演变。