mysql套件_MySQL测试套件_编程学问网

27.1.2. MySQL测试套件

包含在Unix源码和二进制分发版中的测试系统可以让用户和开发人员对MySQL代码施行回归测试。这些测试可以在Unix上进行,目前它们还不能在原生的Windows环境下进行。

当前的测试案例套件不能在MySQL中测试所有东西,但是它能发现SQL处理代码,OS/library文件中大多数明显的缺陷,并且在测试复件方面也是非常彻底的。我们的终极目标是对100%的代码进行测试。我们欢迎大家给我们的测试套件添加内容。你可能会特别想贡献出那些检查你系统里功能性危机的测试,因为这将确保未来所有发行版的MySQL会与你的应用程序一起更好地运行。

27.1.2.1. 运行MySQL测试套件

测试系统包括一个测试语言解释器(mysqltest),一个运行所有测试的外壳脚本(mysql-test-run),用专用语言编写的测试案例,以及它们的预期结果。在系统上编译好之后,在源代码的root下键入make test 或mysql-test/mysql-test-run。如果安装了一个二进制分发版, cd 到安装root (如 /usr/local/mysql), 然后键入 scripts/mysql-test-run。所有测试应该都通过,假使有没通过的,若是一个MySQL里的缺陷,你可以试着找找是因为什么,并且报告这个问题。请参阅27.1.2.3节,“在MySQL测试套件里报告缺陷”。

如果你想要运行测试套件的机器上已经运行了一个 mysqld ,只要它不占用9306 和 9307端口,就不用停掉它。如果占用了其中的一个,以可以编辑mysql-test-run把主端口和(或)从端口号改为其它可用的。.

可使用下面指令运行单个测试案例 mysql-test/mysql-test-run test_name.

若一个测试未通过,你可以用--force选项来检查运行着的mysql-test-run看是否是别的测试未通过。

27.1.2.2. 扩展MySQL测试套件

你可以用mysqltest 语言编写你自己的测试案例。不幸地是,我们还没有写完相关方面完整地文档。但是,你可以查看我们现有的测试案例,并将它们作为范例。下面几点将有助于你入手:

测试位于 mysql-test/t/*.test

测试案例包括终止声明,测试案例类似于mysql命令行客户端的输入。 默认的声明是一个被发送到MySQL服务器的查询,除非这个声明被识别为内部命令(如 sleep)。

所有产生结果的查询,例如SELECT, SHOW, EXPLAIN等,必须在 @/path/to/result/file之前。那个文件必须包含期望的结果。生成结果文件的一个简单办法是在mysql-test目录运行mysqltest -r < t/test-case-name.test ,然后编辑生成的结果文件,如果需要,可将它们调整到想要的输出端。在那种情况下,要小心避免添加或删除任何不可见的字符,确保只改变文本和(或)删除行。如果插入一行,要确保插入的区域被一个硬标识隔开,且在行尾有一个硬标识。你可能会想要使用od -c来确保你的文本编辑器在编辑 步骤中没有搞乱任何东西。当你发现一个缺陷而不得不编辑mysqltest -r的输出时,我们真希望你不要编辑它。

为和我们的设置一致,你应该把你的结果文件放在mysql-test/r 目录,并取名为test_name.result。如果测试产生不止一个结果,你应该使用诸如 test_name.a.result,test_name.b.result等这样的名字。

如果声明返回一个错误,你可以在声明的前一行使用--error error-number来详细说明它。错误号可能是由“,”分开的可能错误号的列表。

如果你正编写一个重复的测试案例,你应该在测试文件的第一行写:source include/master-slave.inc;。用connection master; 和 connection slave;来切换主案例和从案例。如果你需要对一个替换的连接做点什么,对于主连接,用connection master1;,对于从连接,用connection slave1;。

如果需要在一个循环里做点什么,可以用些这样的内容:let $1=1000;

while ($1)

{

# do your queries here

dec $1;

}

在查询之间休眠,使用sleep命令。此命令支持几分之几秒,所以,例如你想要休眠1.3秒,你可以使用sleep 1.3; 命令。

对你的测试案例要运行带附加选项的从案例,以命令行方式把它们放在mysql-test/t/test_name-slave.opt。对于主案例,把它们放在mysql-test/t/test_name-master.opt。

如果对测试套件有问题,和想要献出一个测试案例,发送邮件信息到MySQL 内部插件 邮件列表。请参阅1.7.1.1节,“MySQL邮件列表”。 虽然这个列表不接受附件,你可以把相关文件通过ftp上传到:ftp://ftp.mysql.com/pub/mysql/upload/

27.1.2.3. 在MySQL测试套件中报告缺陷

如果你的MySQL的版本没有通过测试套件,你可以采取如下措施:

在尽可能多地找到出错之时的错误之前,不要发送缺陷报告。查找之时,请使用mysqlbug脚本比便我们能获取你的系统和MySQL版本信息,参阅1.7.1.3节 ,“如何报告缺陷或问题”。

确保包含了mysql-test-run的输出,以及  mysql-test/r目录下所有.reject文件的内容。

如果测试套件里的测试未通过,用如下命令检查一下看它自己运行时是否通过测试:cd mysql-test

mysql-test-run --local test-name

如果未能通过,你应该用 --with-debug 配置MySQL并使用--debug选项来运行mysql-test-run。如果这样也未能通过,请把追踪文件var/tmp/master.trace 上传到 ftp://ftp.mysql.com/pub/mysql/upload/ 以便我们能检查它。请记得也要包含你系统的完整描述,mysqld 二进制文件的版本,以及你是如何编译它的。

也试着带--force选项运行一下mysql-test-run ,看是否还有别的测试未通过。

如果你是自己编译的MySQL,查看我们的手册看看如何在你的平台上编译MySQL,最好用一个在http://dev.mysql.com/downloads/上我们已经为你编译好的二进制版本。我们所有标准的二进制版本都能通过测试套件的测试!

如果错误是Result length mismatch 或 Result content mismatch ,这意味测试的输出于期望的输出不匹配,这可能是在MySQL或你的mysqld 版本里的缺陷在某些环境下产生稍有不同的结果。

未通过的测试结果放在和结果文件同主名但扩展名为.reject的文件里。如果测试案例未通过,你应该对两个文件做diff操作。如果你不能发现它们是如何不同,用od -c 命令检查它们,也检查一下文件长度。

如果测试完全未通过,你应该检查mysql-test/var/log目录下的日志文件以获得有关错误的一些提示。

如果你是为调试而编译MySQL,试一下带--gdb和(或)--debug参数运行mysql-test-run 。请参阅E.1.2节,“创建跟踪文件”。

如果你没有为调试而编译MySQL,这应该是你可能去做的。只要带--with-debug参数运行configure。 请参阅2.8节,“使用源码分发版安装MySQL ”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值