Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL Test Run 测试框架

MySQL Test Run 测试框架详细介绍 

作者:GreatSQL社区

这篇文章主要介绍了MySQL Test Run 测试框架,主要通过include、suite展开MySQL Test Run 测试框架相关内容,文章介绍详细,需要的小伙伴可以参考一下

一、介绍

MySQL Test Run 简称MTR,是MySQL官方提供的自动化测试框架,执行脚本在发布路径的mysql-test目录下。

主要测试步骤,是通过执行一个case(*.test)中的语句(包括sql语句和其他管理语句),将case的输出记录保存在结果文件(*.result)中,或者是将语句执行结果与标准的输出结果作diff,如果出现偏差就会报错。

MySQL自动化框架包括一组测试用例和用于运行它们的程序:perl 脚本(mysql-test-run.pl)和 c++ 二进制(mysqltest)。

二、安装

安装依赖包

本次安装环境是CentOS 8.5

yum -y install perl* -y

下载安装包并解压:

本文采用的MySQL版本是8.0.28,可根据需要自行选择版本。

cd  /home/
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-test-8.0.28-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-test-8.0.28-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.28-linux-glibc2.12-x86_64 mysql_mtr_8.0.28
cd /home/mysql_mtr_8.0.28/
cp -r /path-to-db/* /home/mysql_mtr_8.0.28/  #将mysql安装包目录下的文件与mtr目录合并
cd /home/mysql_mtr_8.0.28/mysql-test #进入mtr目录

主要介绍:

include:

包含.inc文件,用于测试开始时判断是否满足测试条件,在测试用例中通过source命令引入,就像C/C++的头文件,在mtr的体系中,我们可以将许多可重复利用的测试语句,提取到*.inc文件中,放到对应的include目录中,以便在*.test中直接调用。

suite:

包含所有测试suite,每一个suite为一个测试用例集,一般地,我们将若干个测试功能点同属于一个功能模块的testcase放在一个大目录下,这个包含了t和r目录的大目录被称为一个testsuite。其中a.test文件会放在t目录,而a.result放在r目录。

三、测试示例

我们通过一个最简单的例子来说明这个框架是怎么使用的。

四、创建测试用例

在 mysql-test/t 目录下创建一个文件名为 mytest.test的测试用例:

# vi mytest.test
--disable_warnings
DROP TABLE IF EXISTS t1;
SET @@sql_mode='NO_ENGINE_SUBSTITUTION';
--enable_warnings

SET SQL_WARNINGS=1;

CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (2);

DROP TABLE t1; 

执行并查看结果:

# ./mtr --record mytest.test
Logging: ./mtr  mytest.test
MySQL Version 8.0.28
Checking supported features...
 - SSL connections supported
Collecting tests...
Checking leftover processes...
Removing old var directory...
Creating var directory '/usr/local/mysql/mysql-test/var'...
Installing system database...
Using parallel: 1

==============================================================================

TEST                                      RESULT   TIME (ms) or COMMENT
--------------------------------------------------------------------------

worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009
worker[1] mysql-test-run: WARNING: running this script as _root_ will cause some tests to be skipped
[100%] main.mytest                          [ pass ]     12
--------------------------------------------------------------------------
The servers were restarted 0 times
Spent 0.012 of 4 seconds executing testcases

Completed: All 1 tests were successful. 

看到successful说明执行成功。

执行说明:

五、mtr 其他常用参数介绍

–force

默认情况下,只要遇到一个用例出错,测试程序就会退出,加入该参数后,mtr会忽略错误并继续执行下一个case直到所有case执行结束再退出(但如何脚本存在太多错误还是会退出);

–record

是否记录results结果,首次执行建议带上,让其自动生成.results文件(再修改成我们预期的结果文件);

若一个执行输出结果和testname.result文件不同,会生成一个testname.reject文件,该文件在下次执行成功之后被删除;检查reject文件的内容,如果里面是期望的输出,则将内容拷贝到.result文件中,作为以后判断运行结果是否通过的依据;

–big-test

执行标记为big的测试用例,因为用例较大、耗时较长,标记为big的用例默认不会执行,输入两遍big-test则只执行标记为big的测试用例;

–suite=[dirname]

批量执行指定测试目录下的所有测试例,有时候我们要执行一套xx.test文件,这样可以在执行时候指定套件名称。

连接远程的数据库进行mtr执行:
 

#./mtr --extern host=192.168.6.1 --extern port=3306 --extern user=root --extern password='123456'  --record --force example.1

--extern:一般情况下mtr是启动自己的MySQL服务来进行测试,如果在启动时指定参数—extern,则可以使用指定的MySQL服务进行测试;
host | port :远程服务器地址 | 端口;
user | password: 对应数据库的用户名 | 密码;

六、测试用例编写的规范

case运行失败的原因:

处理预期错误:

--error 1050
--error ER_TABLE_EXISTS_ERROR
其中数字对应错误码,ER_TABLE_EXISTS_ERROR对应错误的逻辑名。
这样在mysqltest运行后,会将返回的错误信息一起写入结果文件,这些错误信息就作为期望结果的一部分了。

也可以使用SQLSTATE来指示期望有错误返回,例如与MySQL错误码1050关联的SQLSTATE值是42S01,使用下面的方式,注意编码增加了S前缀:

--error S42S01
在指令error后面是可以加入多个错误码作为参数的,使用逗号分隔即可;.

MTR其他详细用法可以参考官网: 官方文档

到此这篇关于MySQL Test Run 测试框架详细介绍 的文章就介绍到这了,更多相关MySQL Test Run 测试框架内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文