flink的副输出sideoutput单元测试

背景

处理函数中处理输出主输出的数据流数据外,也可以输出多个其他的副输出的数据流数据,当我们的处理函数有副输出时,我们需要测试他们功能的正确性,本文就提供一个测试flink副输出单元测试的例子

测试flink副输出单元测试

首先看一下处理函数,其中包含副输出逻辑

java 复制代码
public class MySideOutputProcessFunction extends ProcessFunction<String, String> {
 
    public static final OutputTag<String> OUTPUT_TAG = new OutputTag<String>("sideoutput") {};
 
    @Override
    public void processElement(String value, Context ctx, Collector<String> out) throws Exception {
        out.collect("normal:" + value);
        ctx.output(OUTPUT_TAG, "side:" + value);
    }
}

其次,看下对应的单元测试

java 复制代码
/**
 * 测试sideOutput的输出功能
 */
@Test
public void testSideOutput() throws Exception {
    MySideOutputProcessFunction mySideOutputProcessFunction = new MySideOutputProcessFunction();
    OneInputStreamOperatorTestHarness<String, String> testHarness =
            ProcessFunctionTestHarnesses.forProcessFunction(mySideOutputProcessFunction);
    testHarness.open();
    testHarness.processElement("hello", 10);
 
    // 测试主输出
    Assert.assertEquals(Lists.newArrayList("normal:hello"), testHarness.extractOutputValues());
    ConcurrentLinkedQueue<StreamRecord<String>> sideOutPutQueue =
            testHarness.getSideOutput(MySideOutputProcessFunction.OUTPUT_TAG);
    // 测试副输出
    Assert.assertEquals(Lists.newArrayList("side:hello"),
            sideOutPutQueue.stream().map(StreamRecord::getValue).collect(Collectors.toList()));
    testHarness.close();
}
相关推荐
运维老曾9 分钟前
Flink MySQL source 自定义开发步骤
大数据·mysql·flink
大大大大晴天️19 小时前
Flink技术实践-超时异常踩坑与优化
大数据·flink·kafka
大大大大晴天19 小时前
Flink技术实践-超时异常踩坑与优化
大数据·flink·kafka
老神在在00119 小时前
测试分类+自动化测试01
功能测试·学习·单元测试·postman
Lyyaoo.20 小时前
适配器模式
单元测试·适配器模式
zdl68620 小时前
SpringBoot Test详解
spring boot·后端·log4j
小陈工1 天前
2026年3月27日技术资讯洞察:量子计算密码突破、硬件安全新范式与三月网络安全警报
服务器·python·安全·web安全·单元测试·集成测试·量子计算
Greg_Zhong1 天前
认识前端自动化测试、小程序中如何实现单元测试
前端·小程序·单元测试
Isaac_Necroptics2 天前
Flink 1.19 Watermark源码分析
flink
根哥的博客2 天前
Flink on Yarn 任务启动后,暴露端口无授权访问漏洞,用iptables批量解决
大数据·flink·flink未授权访问