Camel CLI

Camel 测试插件

师成师成· 更新于 2026-09-28· 阅读 10 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Camel Testing 插件

使用 Citrus 测试框架为 Camel 集成编写并运行自动化测试。

启用该插件:

camel plugin add test
运行 camel test --help 查看所有可用的子命令。

初始化测试

创建一个空的测试文件作为起点:

camel test init route-test.yaml

文件扩展名决定了测试所使用的语言:YAML、Java、XML 或 Cucumber(.feature)。

测试创建在 test 子文件夹中,以便与运行时源码分开。你无需手动切换到该目录——插件会自动处理工作目录。

运行测试

使用 JUnit Jupiter 在本地运行测试——无需任何项目配置:

camel test run route-test.yaml

Project export

导出项目时,测试插件会自动将测试资源作为测试作用域(test-scoped)的 Maven 依赖包含到 src/test/java 和 src/test/resources 中:

camel export route.yaml --dir my-export --runtime quarkus
cd my-export
./mvnw verify
导出操作会在 src/test/java 中创建一个 JUnit Jupiter 测试类,你也可以直接在 IDE 中运行它。

依赖管理

基本的 Citrus 依赖项开箱即用。若需额外模块(Kafka、Testcontainers 等),请在测试源码旁的 jbang.properties 文件中添加:

jbang.properties

run.deps=org.citrusframework:citrus-camel:4.7.0,\
org.citrusframework:citrus-kafka:4.7.0,\
org.citrusframework:citrus-testcontainers:4.7.0,\
org.apache.camel:camel-endpointdsl:4.13.0,\
org.apache.camel:camel-aws2-s3:4.13.0

run.D=citrus.camel.jbang.dump.integration.output=true
这些依赖会在项目导出时自动作为测试范围(test-scoped)的依赖添加。

使用 Citrus 编写测试

测试插件以 Citrus 作为底层测试框架。一个典型的测试流程:

  1. 启动基础设施(Kafka、数据库等)
  2. 以测试配置启动 Camel 集成
  3. 发送消息以触发路由逻辑
  4. 验证结果

如需完整细节,请参阅 Citrus 文档。

使用基础设施服务

在测试过程中启动 Camel 基础设施服务或 Testcontainers:

actions:
  - camel:
      infra:
        run:
          service: postgres
  - testcontainers:
      start:
        kafka: {}

连接设置以测试变量的形式公开(CITRUS_CAMEL_INFRA_SERVICE_<NAME>_<PROP> 或 CITRUS_TESTCONTAINERS_<NAME>_<PROP>),可在 application.properties 中使用:

camel.database.url=${CITRUS_CAMEL_INFRA_POSTGRES_SERVICE_ADDRESS}
camel.kafka.bootstrapServers=${CITRUS_TESTCONTAINERS_KAFKA_BOOTSTRAP_SERVERS}

参见 Citrus 文档中的 Camel 基础设施与 Testcontainers。

运行 Camel 集成

以独立进程启动 Camel 集成,并应用针对测试的配置:

actions:
  - camel:
      jbang:
        run:
          integration:
            file: "../route.yaml"
            systemProperties:
              file: "application.test.properties"
路径使用 ../ 是因为测试位于 test 子目录中。

请参阅 Citrus 中的 Camel CLI 支持。

发送和接收消息

Citrus 支持 Kafka、HTTP、SOAP、FTP、JMS 等多种传输方式:

发送到 Kafka

actions:
  - send:
      endpoint: "kafka:bookings"
      message:
        body:
          data: |
            { "client": "camel-batch", "product": "Orange", "amount": 200, "price": 1.0, "status": "APPROVAL_REQUIRED" }
        headers:
          - name: "citrus_kafka_messageKey"
            value: "bookings.csv_0"

验证接收到的消息

actions:
  - receive:
      endpoint: "kafka:reports"
      message:
        body:
          data: |
            { "bookings": { "completed": 1, "errors": 0 } }

你还可以直接使用任意 Camel 端点 URI(例如 camel:aws2-s3:my-bucket?amazonS3Client=#s3Client)。Bean 引用(#beanName)和 Citrus 测试变量在端点 URI 中均可生效。

请参阅 Citrus 文档中的发送/接收动作和消息端点。

评论

登录后参与评论

正在加载评论…