Sqlness 测试
介绍
SQL 是 GreptimeDB
的一个重要用户接口。我们为它提供了一个单独的测试套件(名为 sqlness
)。
Sqlness 手册
测试文件
Sqlness 有三种类型的文件
.sql
:测试输入,仅包含 SQL.result
:预期的测试输出,包含 SQL 和其结果.output
:不同的输出,包含 SQL 和其结果
.result
和 .output
都是输出(执行结果)文件。区别在于 .result
是标准(预期)输出,而 .output
是错误输出。因此,如果生成了 .output
文件,意味着测试结果不同,测试失败。你应该检查变更日志来解决问题。
你只需要在 .sql
文件中编写测试 SQL,然后运行测试。第一次运行时会生成 .output
文件,因为没有 .result
文件进行比较。如果你确认 .output
文件中的内容是正确的,可以将其重命名为 .result
,这意味着它是预期输出。
任何时候都应该只有两种文件类型,.sql
和 .result
—— 否则,存在 .output
文件意味着测试失败。这就是为什么我们不应该在 .gitignore
中忽略 .output
文件类型,而是跟踪它并确保它不存在。
组织测试案例
输入案例的根目录是 tests/cases
。它包含几个子目录,代表不同的测试模式。例如,standalone/
包含所有在 greptimedb standalone start
模式下运行的测试。
在第一级子目录下(例如 cases/standalone
),你可以随意组织你的测试案例。Sqlness 会递归地遍历每个文件并运行它们。
运行测试
与其他测试不同,这个测试工具是以二进制目标形式存在的。你可以用以下命令运行它
cargo run --bin sqlness-runner
它会自动完成以下步骤:编译 GreptimeDB
,启动它,抓取测试并将其发送到服务器,然后收集和比较结果。你只需要检查是否有新的 .output
文件。如果没有,恭喜你,测试通过了 🥳!
运行特定测试
cargo sqlness -t your_test
如果你指定了第二个参数,则只会执行名称中包含指定字符串的测试案例。Sqlness 还支持基于环境的过滤。过滤器接受正则表达式字符串,并会检查格式为 env:case
的案例名称。