如何正确测试Flink窗口功能?

时间:2019-06-25 13:35:27

标签: testing apache-flink flink-streaming

有人知道如何在Flink中测试窗口功能吗?我正在使用依赖项flink-test-utils_2.11

我的步骤是:

  1. 获取StreamExecutionEnvironment
  2. 创建对象并添加到环境中
  3. 做一个keyBy
  4. 添加会话窗口
  5. 执行聚合函数
public class AggregateVariantCEVTest extends AbstractTestBase {

   @Test
    public void testAggregateVariantCev() throws Exception  {
       StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
       env.setParallelism(1);

       env.fromElements(objectOne, objectTwo)
               .keyBy(new KeyedByMyCustomKey())
               .window(EventTimeSessionWindows.withGap(Time.seconds(1)))
               .aggregate(new MyAgreggateFunction());


       JobExecutionResult result = env.execute();

       assertEquals(myExpectedResults, result.getAllAccumulatorResults());

   }
}

问题是result.getAllAccumulatorResults()的大小为0。

有什么主意我做错了吗?预先感谢!

2 个答案:

答案 0 :(得分:1)

Windows不会将其结果放入累加器。您应该在工作中附加一个测试接收器,然后将其与您期望的内容进行比较。类似于section on integration testing文档中显示的内容。

答案 1 :(得分:1)

这里正确的方法可能是使用TestHarness。一个很好的例子是Flink项目本身中的WindowOperatorTest

此外,您可以检出https://github.com/knaufk/flink-testing-pyramid的示例,以了解如何在测试金字塔的不同级别上测试Flink Job以及有关测试https://ci.apache.org/projects/flink/flink-docs-master/dev/stream/testing.html的Flink文档。