#pool #parallel #connection-pool #integration-tests #web

db-pool

线程安全的数据库连接池,用于并行运行与数据库相关的集成测试

4个版本

0.2.1 2024年4月14日
0.2.0 2024年4月13日
0.1.4 2024年4月8日
0.1.3 2024年3月24日

#810 in 测试

Download history 6/week @ 2024-04-28 1/week @ 2024-05-05 6/week @ 2024-07-21 48/week @ 2024-07-28 2/week @ 2024-08-04

每月56次下载

MIT许可证

375KB
8K SLoC

db-pool

unsafe forbidden Book Status Crates.io

书籍 - 文档

线程安全的数据库连接池,用于并行运行与数据库相关的集成测试,具有以下特性:

  • 易于配置
  • 适当的隔离
  • 自动创建、重用和清理
  • 异步支持

描述

db-pool 并不是简单地提供可以连接到同一数据库的多个连接的数据库连接池,而是维护一个独立隔离的数据库池,以便能够并行运行数据库相关的测试。它还处理这些数据库的生命周期:无论何时从池中选取数据库,都可以确保数据库是干净的,可以立即使用,且没有任何其他测试正在连接到你在某个测试中使用的数据。

动机

当针对与数据库相关的服务(如Web服务器)运行测试时,通常使用测试数据库。然而,这也带来了一系列困难:

  1. 数据库必须在每次测试之前(a)删除并重新创建,或者(b)清理。
  2. 测试必须串行运行以避免交叉污染。

串行运行测试会导致以下问题:

  • 现在需要测试设置和拆卸。
  • 从头开始删除和创建数据库可能很昂贵。
  • 与删除和重新创建数据库相比,清理数据库需要执行特定方言的语句。

当切换到并行执行测试时,还会出现更多困难:

  • 为每个测试创建和删除数据库可能很昂贵。
  • 在测试之间共享临时数据库需要:
    • 在并发使用中隔离数据库
    • 在后续测试重用之前清理每个数据库
    • 限制用户权限以防止恶意测试修改模式
    • 在测试运行前后删除临时数据库以减少杂乱

db-pool负责处理所有这些问题,同时支持多种数据库类型、后端和连接池。

数据库

  • MySQL (MariaDB)
  • PostgreSQL

后端 & 池

同步

后端 特性
diesel/mysql r2d2 diesel-mysql
diesel/postgres r2d2 diesel-postgres
mysql r2d2 mysql
postgres r2d2 postgres

异步

后端 特性
diesel-async/mysql bb8 diesel-async-mysql, diesel-async-bb8
diesel-async/mysql mobc diesel-async-mysql, diesel-async-mobc
diesel-async/postgres bb8 diesel-async-postgres, diesel-async-bb8
diesel-async/postgres mobc diesel-async-postgres, diesel-async-mobc
sea-orm/sqlx-mysql sqlx sea-orm-mysql
sea-orm/sqlx-postgres sqlx sea-orm-postgres
sqlx/mysql sqlx sqlx-mysql
sqlx/postgres sqlx sqlx-postgres
tokio-postgres bb8 tokio-postgres, tokio-postgres-bb8
tokio-postgres mobc tokio-postgres, tokio-postgres-mobc

依赖

~0.6–17MB
~241K SLoC