CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/LoongCollector/E2E测试——如何添加新的测试行为
文档目录
开发环境代码风格数据模型(C++)数据模型(Golang)
单元测试E2E测试E2E测试——如何添加新的测试行为E2E测试——如何编写Subscriber插件Benchmark测试

LoongCollector

E2E测试——如何添加新的测试行为

LoongCollector 提供了一个完整的E2E测试引擎,方便您快速开展集成测试,从而进一步保证代码质量。在大部分情况下,您只需要编写一个配置文件来定义测试行为,即可轻松完成测试。 可以参考 test/engine/steps.go 中的定义,目前支持的测试行为如下: | 行为类型 | 模板 | 参数 | 说明 | | --- | --- | --- | --- | | Given |...

E2E测试——如何添加新的测试行为

LoongCollector 提供了一个完整的E2E测试引擎,方便您快速开展集成测试,从而进一步保证代码质量。在大部分情况下,您只需要编写一个配置文件来定义测试行为,即可轻松完成测试。

目前支持的测试行为

可以参考 test/engine/steps.go 中的定义,目前支持的测试行为如下:

行为类型 模板 参数 说明
Given ^{(\S+)} environment$ 环境类型 初始化远程测试环境
Given ^LoongCollector depends on containers {(.*)} 容器 LoongCollector依赖容器,可多次执行,累积添加
Given ^LoongCollector expose port {(.)} to {(.)} 端口号 LoongCollector暴露端口,可多次执行,累积添加
Given ^{(.*)} local config as below 1. 配置名 2. 配置文件内容 添加本地配置
Given ^{(.*)} http config as below 1. 配置名 2. 配置文件内容 通过http添加配置
Given ^remove http config {(.*)} 配置名 通过http移除配置
Given ^subcribe data from {(\S+)} with config 1. 数据源 2. 配置文件内容 订阅数据源
When ^generate {(\d+)} regex logs, with interval {(\d+)}ms$ 1. 生成日志数量 2. 生成日志间隔 生成正则文本日志(路径为/tmp/ilogtail/regex_single.log)
When ^generate {(\d+)} http logs, with interval {(\d+)}ms, url: {(.)}, method: {(.)}, body: 1. 生成日志数量 2. 生成日志间隔 3. url 4. method 5. body 生成http日志,发送到LoongCollector input_http_server
When ^add k8s label {(.*)} k8s标签 为k8s资源添加标签
When ^remove k8s label {(.*)} k8s标签 为k8s资源移除标签
When ^start docker-compose dependencies {(\S+)} 依赖服务 启动docker-compose依赖服务
Then ^there is {(\d+)} logs$ 日志数量 验证日志数量
Then ^there is at least {(\d+)} logs$ 日志数量 验证日志数量
Then ^there is at least {(\d+)} logs with filter key {(.)} value {(.)}$ 1. 日志数量 2. 过滤键 3. 过滤值 验证日志数量
Then ^the log contents match regex single 验证正则文本日志内容
Then ^the log fields match kv kv键值对列表 验证kv日志内容
Then ^the log tags match kv kv键值对列表 验证kv日志标签内容
Then ^the context of log is valid$ 验证日志上下文
Then ^the log fields match 日志字段列表 验证日志字段内容
Then ^the log labels match 日志标签列表 验证日志标签内容
Then ^the logtail log contains {(\d+)} times of {(.*)}$ 1. 匹配次数 2. 匹配内容 验证日志内容
Then wait {(\d+)} seconds 等待时间 等待时间

如何添加新的测试行为

在某些情况下,需要对engine中的测试行为进行拓展,可以参考下面的添加指南。

1. 编写行为函数

如果您需要添加新的行为函数,可以在engine目录下添加一个Go函数。不同目录下的行为函数的职责有所不同:

  • cleanup:清理测试环境,其中的测试函数会默认在测试结束后执行。无需在配置文件中显式声明使用。
  • control:管控相关的行为函数,如初始化环境、添加配置等。
  • setup:初始化测试环境,并提供远程调用的相关功能。
  • trigger:数据生成相关的行为函数,如生成日志等。
  • verify:验证相关的行为函数,如验证日志数量、验证日志内容等。

每个行为函数的接口定义如下所示:

func LogCount(ctx context.Context, expect int) (context.Context, error) {
    // your code here
}

函数的第一个参数必须为context.Context。除此之外,后续可添加任意多个参数。函数的返回值为context.Context和error,其中context.Context为传递给下一个行为函数的参数,error为错误信息。一些需要在多个行为函数之间传递的参数,可以通过context.Context来传递。

return context.WithValue(ctx, key, value), nil

2. 注册行为函数

在test/engine/steps.go中,您需要注册您的行为函数。注册函数的格式如下所示:

func scenarioInitializer(ctx *godog.ScenarioContext) {
    // Given

    // When

    // Then
    ctx.Then(`^there is \{(\d+)\} logs$`, verify.LogCount)
}

您需要根据行为的类型,将行为函数注册到对应的位置。在Given中注册setup中的行为函数,在When中注册trigger中的行为函数,在Then中注册verify中的行为函数。control中的行为函数比较灵活,根据函数职责不同,注册到不同的类型中。

在注册时,您需要定义一个正则表达式,用于匹配配置文件中的行为。在正则表达式中,您可以使用{}来标识参数,这些参数将会传递给行为函数。例如:

ctx.Then(`^there is \{(\d+)\} logs$`, verify.LogCount)

能够从配置文件中匹配到there is {100} logs这样的行为,并将100作为参数传递给LogCount函数。

3. 在配置文件中使用

在配置文件中,您可以直接使用您定义的行为函数。例如:

Then there is {100} logs

在运行测试时,测试框架会根据配置文件中的行为,调用对应的行为函数,并传递参数。

文章大纲