跳到主要内容
版本:nightly

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 的案例名称。