摘要: 1、概述 在我们給MySQL打了patch后,不仅需要测试新增的功能,同时更重要的问题是,需要对原有的功能作回归――若新增的patch导致原有其他功能产生bug,就得不偿失。 MySQL自动测试框架是一个以MySQL框架和内部引擎为测试对象的工具。主要执行脚本在发布路径的mysql-test目录下...
1、概述
在我们給MySQL打了patch后,不仅需要测试新增的功能,同时更重要的问题是,需要对原有的功能作回归――若新增的patch导致原有其他功能产生bug,就得不偿失。
MySQL自动测试框架是一个以MySQL框架和内部引擎为测试对象的工具。主要执行脚本在发布路径的mysql-test目录下。自动测试框架的主要测试步骤,是通过执行一个case,将该case的输出结果,与标准的输出结果作diff。这里的“标准输出结果”指代在可信任的MySQL版本上的执行结果。
如果某个case的执行结果与标准输出结果不同,则说明正在执行的这个MySQL服务有问题,或许是框架,或许是引擎。 当然若干case执行正确并不能确保被测试的框架和引擎是没有问题的,除非能够证明执行的case已经覆盖了所有的分支(这太难了)。
这里说到的case,是指一系列的语句,包括SQL语句和一些必要的shell语句。在mysql-test/t/目录下,可以找到很多这样的case,他们的文件名以.test为后缀。接下来我们用一个简单的例子来说明用法。
2、初体验
再简单的例子也不如自己写的简单。因此我们通过自己作一个case,来体验一下这个框架的便捷。
a) 在mysql-test/t/目录下创建文件 mytest.test, 内容为
1 — source include/have_innodb.inc 2 use test; 3 create table t(c int) engine=InnoDB ; 4 insert into t values(1); 5 select c from t; 6 drop table t; |
从第二行开始是我们熟悉的SQL语句,创建一个InnoDB表,插入一行,执行一个查询,删除这个表。输出也是显而易见的。
b) 在mysql-test/r/目录下创建文件 mytest.result, 内容为
1 use test; 2 create table t(c int) engine=InnoDB ; 3 insert into t values(1); 4 select c from t; 5 c 6 1 7 drop table t; |
c) 在mysql-test/ 目录下执行 ./mtr mytest
=================================================================== TEST RESULT TIME (ms) ———————————————————— |