6个版本

0.6.1 2024年6月24日
0.6.0 2024年3月29日
0.5.0 2023年7月4日
0.4.3 2023年4月6日
0.4.2 2023年3月13日

#197 in 测试

Apache-2.0

79KB
1.5K SLoC

sqlness

Crates.io docs.rs License CI OpenIssue

SQL 集成测试框架 NESS

一个易用、具有个人偏好的 SQL 集成测试框架。

用法

SQLNESS 可以作为库或直接作为命令行工具使用,它支持 MySQL/PostgreSQL 线协议。

作为库使用

首先将 sqlness 添加到您的项目中

cargo add sqlness

然后实现 DatabaseEnvController 特性以设置测试。请参考 basic.rs 以获得完整示例。

作为 CLI 使用

$ cargo install sqlness-cli

$ sqlness-cli -h
SQLNESS command line tool

Usage: sqlness-cli [OPTIONS] --case-dir <CASE_DIR> --ip <IP> --port <PORT>

Options:
  -c, --case-dir <CASE_DIR>  Directory of test cases
  -i, --ip <IP>              IP of database to test against
  -p, --port <PORT>          Port of database to test against
  -u, --user <USER>          User of database to test against
  -P, --password <PASSWORD>  Password of database to test against
  -d, --db <DB>              DB name of database to test against
  -t, --type <DB_TYPE>       Which DBMS to test against [default: mysql] [possible values: mysql, postgresql]
  -h, --help                 Print help
  -V, --version              Print version

我们的 CI 中使用的一个示例是

sqlness-cli -c tests -i 127.0.0.1 -p 3306 -u root -P 1a2b3c -d public

它将针对监听在 127.0.0.1:3306 的 MySQL 服务器进行测试

测试用例结构

这是 basic-example 测试用例的目录结构

$ tree examples/
examples/
├── basic-case               # Testcase root directory
│   └── simple               # One environment
│       ├── config.toml      # Config file for current environment, optional
│       ├── select.result    # Output result file
│       └── select.sql       # Input SQL testcase
├── basic.rs                 # Entrypoint of this example

当通过以下方式运行时

cargo run --example basic

它将执行以下操作

  1. 收集 basic-case 下的所有环境(一级目录)。
  2. 逐个运行环境下的测试用例(.sql 文件)。
    1. 在执行之前,它将读取 {testcase}.result(如果不存在则创建)到内存中进行比较。
    2. 在执行期间,它将收集查询响应并将其写入 {testcase}.result
    3. 执行后,它将比较生成的 {testcase}.result 与之前的一个,如果相同则显示 PASS,否则显示 FAIL
  3. 报告结果。

通常,result 文件应在 git 中进行跟踪,当有失败的测试时,用户应该

  1. result 更新到最新版本(例如,git add),如果新的结果是正确的,或者
  2. result 恢复到原始版本(例如,git checkout),调试数据库实现中的错误,并再次运行测试

下面的流程图说明了编写测试时的典型步骤。

下面是此示例的输出

Run testcase...
Start, env:simple, config:Some("examples/basic-case/simple/config.toml").
Test case "examples/basic-case/simple/select" finished, cost: 0ms
Environment simple run finished, cost:1ms
Stop, env:simple.
MyDB stopped.

谁在使用

  • CeresDB,一个高性能、分布式、云原生的时间序列数据库,可以处理时间序列和分析工作负载。
  • GreptimeDB,一个开源、云原生、分布式的时间序列数据库。

如果你在使用 sqlness 并希望被添加到这个列表中,欢迎你 提交一个 PR

许可协议

本项目采用 Apache License 2.0 许可。

依赖关系

~22–37MB
~613K SLoC