iLogtail

1756
下载
iLogtail 是阿里云日志服务(Log Service)中的一款高性能、可扩展的日志采集工具。它被设计用于实时收集、解析和传输各类日志数据,支持多种数据源和复杂的日志处理场景,广泛应用于分布式系统、Web 服务器、应用程序等环境中的日志管理。

E2E添加指南


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

目前支持的测试行为

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

行为类型模板参数说明
Given^{(\S+)} environment$环境类型初始化远程测试环境
Given^iLogtail depends on containers {(.*)}容器iLogtail依赖容器,可多次执行,累积添加
Given^iLogtail expose port {(.)} to {(.)}端口号iLogtail暴露端口,可多次执行,累积添加
Given^{(.*)} local config as below1. 配置名 2. 配置文件内容添加本地配置
Given^{(.*)} http config as below1. 配置名 2. 配置文件内容通过http添加配置
Given^remove http config {(.*)}配置名通过http移除配置
Given^subcribe data from {(\S+)} with config1. 数据源 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日志,发送到iLogtail 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 kvkv键值对列表验证kv日志内容
Then^the log tags match kvkv键值对列表验证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. 匹配内容验证日志内容
Thenwait {(\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.Contexterror,其中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

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


observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32