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 数据库接口

Download history 643/week @ 2024-04-26 754/week @ 2024-05-03 1142/week @ 2024-05-10 723/week @ 2024-05-17 1057/week @ 2024-05-24 1469/week @ 2024-05-31 1003/week @ 2024-06-07 1511/week @ 2024-06-14 2265/week @ 2024-06-21 1154/week @ 2024-06-28 1013/week @ 2024-07-05 994/week @ 2024-07-12 1062/week @ 2024-07-19 980/week @ 2024-07-26 1103/week @ 2024-08-02 1071/week @ 2024-08-09

每月 4,311 次下载
sqlness-cli 中使用

Apache-2.0

58KB
1K SLoC

sqlness

Crates.io docs.rs License CI OpenIssue

SQL 集成测试框架

一个易于使用、有偏见的 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

依赖

~8–22MB
~324K SLoC