Camel 测试插件
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.yamlProject 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 作为底层测试框架。一个典型的测试流程:
- 启动基础设施(Kafka、数据库等)
- 以测试配置启动 Camel 集成
- 发送消息以触发路由逻辑
- 验证结果
如需完整细节,请参阅 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 支持 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 中均可生效。
评论
登录后参与评论
KnowForge