11 个不稳定版本
0.6.1 | 2024年6月24日 |
---|---|
0.6.0 | 2024年3月29日 |
0.5.0 | 2023年7月4日 |
0.4.2 | 2023年3月13日 |
0.1.1 | 2022年12月30日 |
#165 in 数据库接口
每月 4,311 次下载
在 sqlness-cli 中使用
58KB
1K SLoC
sqlness
SQL 集成测试框架
一个易于使用、有偏见的 SQL 集成测试框架。
用法
SQLNESS 可以用作库或直接用作命令行工具,它支持 MySQL/PostgreSQL 线路协议。
作为库使用
首先将 sqlness 添加到您的项目中
cargo add sqlness
然后实现 Database
和 EnvController
特性来设置您的测试。请参考 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
运行它时,它将执行以下操作
- 收集
basic-case
下的所有环境(一级目录)。 - 依次运行环境下的测试(
.sql
文件)。- 在执行之前,它将读取
{testcase}.result
(如果不存在则创建一个)到内存中进行比较。 - 在执行过程中,它将收集查询响应并将其写入
{testcase}.result
- 执行后,它将比较生成的
{testcase}.result
与之前的一个,如果相同则 PASS,否则 FAIL。
- 在执行之前,它将读取
- 报告结果。
通常,当测试失败时,用户应该将 result
文件纳入 git 版本控制。
- 如果更新的结果正确,则更新
result
到最新版本(例如,git add
),或者 - 将
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。
依赖
~8–22MB
~324K SLoC