SuperAPI AI 工具集

integration-test

测试与质量

查看项目

更新于 10-16 08:34

技能介绍

用途:为 CockroachDB 编写集成测试的规范,集成测试使用 testserver(同一进程内、全内存的完整 CockroachDB 服务),启动较慢,每个用例可能增加数秒,因此仅在必要时使用。

适用与不适用:适合 SQL 执行与查询校验、事务行为、schema 操作、分布式行为;不适合纯逻辑与数据转换、解析与校验,以及任何可用单元测试覆盖的内容。

服务器类型:单机服务器 serverutils.StartServerOnly 用于单节点行为、SQL 查询、schema 操作,速度快,多数集成测试足够;测试集群 testcluster.StartTestCluster 用于分布式行为、复制、多节点协调,慢得多,仅在确需多节点时使用。

基本用法:用 serverutils.StartServerOnly(t, base.TestServerArgs{}) 启动并用 defer s.Stopper().Stop(ctx) 关停,再通过 sqlutils.MakeSQLRunner(s.ApplicationLayer().SQLConn(t)) 获取 sqlDB;可传入 Knobs 等自定义配置。

sqlutils 方法:优先使用 MakeSQLRunner,其错误会自动使测试失败。Exec 执行语句;QueryRow 适合读取后续测试逻辑要用的 ID、计数并保留数据类型;QueryStr 返回 [][]string,适合字符串比较;CheckQueryResults 用于精确校验查询结果。需要直接处理错误(如重试循环 testutils.SucceedsSoon、自定义错误检查)时使用 sqlDB.DB 原始句柄。

性能与隔离:关键是在测试循环外只启动一次服务器,再配合表驱动测试;表管理可采用复用表并清空数据、每个用例独立表、schema 变更需每用例独立表三种模式,按性能与隔离需求权衡。