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