Skip to main content
本指南介绍 C++ 扩展的测试与迭代循环:设置本地服务器、安装 .veb 文件、运行回归测试以及调试测试失败。它是 使用 C++ 创建扩展 的补充,后者涵盖初始构建;也是 C++ 开发 的补充,后者深入介绍 VDF 编写。
如果您正在为 VillageSQL 服务器本身做贡献(而不是构建扩展),请参阅 从源代码构建,其中涵盖了完整的服务器开发人员工作流程,包括直接使用 mysql-test-run.pl 运行测试。

设置您的环境

要开发和测试扩展,您需要一个已构建的 VillageSQL 服务器。请按照 从源代码克隆和构建 指南来编译服务器二进制文件。 构建完成后,使用 villagesql CLI 管理本地开发服务器实例。从安装 VillageSQL 的目录运行所有命令。

启动本地开发服务器

初始化并启动服务器实例:
要在初始化时设置 root 密码:
要为某次测试运行启用或禁用 mysqld 功能,请在 -- 分隔符之后传递标志;其后的所有内容都会原封不动地转发给 mysqld
-- 之前任何无法识别的参数都会被拒绝,因此请对每个打算传给 mysqld 的标志都使用 -- 在任何命令之前传递 --dir <path> 以管理多个独立的实例,或者使用 --here 在当前工作目录中创建一个服务器目录:

管理扩展文件

在通过 SQL 安装扩展之前,其 .veb 文件必须存在于服务器上。CLI 管理服务器的 lib/veb/ 目录:
init 之前放置在 lib/veb/ 中的 .veb 文件会自动预置。添加文件后,通过 SQL 安装扩展:

运行回归测试

使用 VillageSQL 构建目录中的 MySQL 测试运行器来运行扩展回归测试。

运行完整套件

要运行扩展的所有测试:

运行单个测试

要运行单个测试用例,请指定套件路径和测试名称:

创建新测试

在添加新功能或修复错误时,您应该添加相应的回归测试。

测试位置

扩展测试位于扩展自己的存储库中的 mysql-test/ 目录中——而不是在 VillageSQL 服务器的 mysql-test/suite/ 树中。
  • 测试文件以 .test 结尾,并位于 mysql-test/t/ 中。
  • 预期结果文件以 .result 结尾,并位于 mysql-test/r/ 中。
例如,对于名为 my_extension 的扩展:
  • mysql-test/t/my_new_test.test
  • mysql-test/r/my_new_test.result

测试文件约定

典型的扩展测试安装扩展、运行 SQL 并卸载:
当您的测试输出包含来自测试运行器临时目录的路径时,请在 .test 文件中添加以下指令以对其进行规范化——否则,记录的结果将包含在其他机器上会出错的绝对路径:

添加测试的步骤

  1. 在扩展的 mysql-test/t/ 目录中创建 .test 文件
  2. 在扩展的 mysql-test/r/ 目录中创建空的 .result 文件
  3. 使用 --record 运行测试,以生成预期的输出:
  4. 验证生成的 .result 文件中的输出,以确保它与您的期望相符。

调试测试

如果测试失败,测试框架会提供详细的日志。
  • 测试输出: 检查 mysql-test/var/log/mysqltest.log(合并日志)或 mysql-test/var/log/<test_name>/(每个测试的目录)。
  • 服务器错误日志: 检查 mysql-test/var/log/mysqld.1.err。VillageSQL 特定的日志消息(通过 LogVSQL() 发出)仅在服务器使用 --log-error-verbosity=3 运行时才会出现。
  • 差异: 框架会输出实际输出与预期的 .result 文件之间的差异。
要使用额外的调试信息运行测试:

另请参阅